Jump to content
HojasDeMaria

Incluir subdirectorio /blog en el sitemap

Recommended Posts

Buenas tardes,

 

estamos haciendo un blog en la tienda mediante el módulo SmartBlog. 

 

El blog está ubicado en un subdirectorio, http://hojasdemaria.com/blog

 

El problema es que el Sitemap que generamos mediante el módulo Google Sitemap no indexa las páginas del blog.

 

¿Hay alguna forma de incluir el directorio /blog para que el módulo lo tenga en cuenta?

 

Utilizamos la versión 1.6.0.11

 

¡Muchas gracias y buen fin de semana!

Share this post


Link to post
Share on other sites

Tendrías que modificar el módulo de Sitemap, o que smartblog creara otro sitemap para su contenido.

 

Así que la única forma que hay es programando una de esas 2 opciones.

Share this post


Link to post
Share on other sites

Creo que puedes editar a pelo el sitemap y ponerle la entrada que quieres. No es lo más elegante, y seguramente se te chafe la siguiente vez que generes el sitemap, pero ya es algo.

Share this post


Link to post
Share on other sites

laldeguer, muchas gracias pero efectivamente busco algo automatizado para no tener que cargarlo manualmente cada dos por tres. 

 

Tendrías que modificar el módulo de Sitemap, o que smartblog creara otro sitemap para su contenido.

 

Así que la única forma que hay es programando una de esas 2 opciones.

 

Alguna idea de qué modificación hay que hacer en el módulo de Sitemap? Gracias por tu respuesta. 

Share this post


Link to post
Share on other sites

Buenos días,

 

Hace algunos días buscando en el foro en ingles, que es donde hay información libre, de código libre como en teoría es Prestashop, pero que en este foro en Español, siempre termina en que alguien te resuelve tu problema previo pago claro está, o te deriva a algún módulo que siempre es de pago,......

 

Bueno para no seguir metiendo cizaña, encontré un fragmento de código que no me termina de funcionar bien, hay que implementarlo dentro de sitemap.tpl en el thema que esteis utilizando, y que si alguien tiene a bien probarlo y pasar el file sitemap.tpl corregido se lo agradeceremos todos.

 

Adjunto el código: a mi en mi tienda no me termina de funcionar.

 

{if Module::isEnabled('smartblog')}
<li>
<a href="{smartblog::GetSmartBlogLink('smartblog_list')|escape:'html'}" mod='blockcms'}">
{l s='All Blog News'}
</a>
<ul class="
tree">
{foreach BlogCategory::getCategory() as $blog}
{if $blog@last}
{$last = 'true'}
{else}
{$last = 'false'}
{/if}
{assign var="
options" value=null}
{$options.id_category = $blog['id_smart_blog_category']}
{$options.slug = $blog['link_rewrite']}
<li {if isset($last) && $last == 'true'}class="
last"{/if}>
<a href="
{smartblog::GetSmartBlogLink('smartblog_category',$options)|escape:'html':'UTF-8'}" title="{$blog['meta_description']|escape:'html':'UTF-8'}">{$blog['meta_title']|escape:'html':'UTF-8'}</a>
</li>
{/foreach}
</ul>
</li>
{/if}

Share this post


Link to post
Share on other sites

Hola, a mi me ha ocurrido lo mismo y he tenido que modificar el fichero gsitemap.php del módulo. Te indico lo que he realizado, aunque tengo que depurarlo, pero funciona, lo único que hay que hacer es dejarlo un poco más elegante.

 

En el fichero en la línea 49 añade a un array el tipo de páginas que va a incluir en el sitemap, yo lo dejo así (donde añado el último valor, 'post'):

 

$this->type_array = array('home', 'meta', 'product', 'category', 'manufacturer', 'supplier', 'cms', 'module','post');

 

Luego añado después de la línea 76 las dos líneas (para indicar la prioridad de las páginas del blog o post, he usado dos nombres pero con uno valdría, y 0.7 lo cual va a gusto del consumidor):

 

'GSITEMAP_PRIORITY_POST' => 0.7,
'GSITEMAP_PRIORITY_BLOG' => 0.7,
Después de la línea 123:
 
'GSITEMAP_PRIORITY_POST' => '',
'GSITEMAP_PRIORITY_BLOG' => '',
Es importante que se vea que esto es para la instalación y desinstalación del módulo, como yo no lo he desinstalado y vuelto a instalar a la hora de obtener la prioridad lo meto a pelo para el blog, por lo que estos dos bloques no los he podido probar al 100%.
 
Luego, después de la línea 654, que es cuando termina la función que añade las páginas CMS, añado la siguiente función que es una copia de la que se utiliza para obtener los enlaces CMS pero la modifico para obtener los del blog. La hago sin emplear objetos blog ni el objeto link como en el resto de métodos ya que me resultaba fácil obtenerlos con una consulta sql (aunque no es la manera más elegante repito, además de que para obtener el home tengo que repetir código). Además, en el valor de tipo y página pongo 'blog', se puede poner lo que uno quiera. La función en concreto:
(LA SQL PARA FORMAR LA URL EN MI SMART BLOG ES idpost_campolinkrewrite.html SI NO ES ASÍ EN VUESTRO BLOG HAY QUE MODIFICAR LA SQL Y EN LA VARIABLE blogfolder DEBÉIS PONER VUESTRO FOLDER DEL BLOG )
protected function _getPostLink(&$link_sitemap, $lang, &$index, &$i, $id_post = 0)
{
if (Configuration::get('PS_SSL_ENABLED') && Configuration::get('PS_SSL_ENABLED_EVERYWHERE'))
$protocol = 'https://';
else
$protocol = 'http://';


$home=$protocol.Tools::getShopDomainSsl(false).$this->context->shop->getBaseURI().(method_exists('Language', 'isMultiLanguageActivated') ? Language::isMultiLanguageActivated() ? $lang['iso_code'].'/' : '' : '');
$blogfolder='tu_parte_de_la_url_del_blog_despues_del_home/';


if (method_exists('ShopUrl', 'resetMainDomainCache'))
ShopUrl::resetMainDomainCache();
$posts_id = Db::getInstance()->ExecuteS(
'SELECT post.`id_smart_blog_post`, CONCAT(post.`id_smart_blog_post`,"_",postlang.link_rewrite,".html") as link '.
'FROM `'._DB_PREFIX_.'smart_blog_post` post, '._DB_PREFIX_.'smart_blog_post_lang postlang '.
'WHERE post.active=1 and post.id_smart_blog_post=postlang.id_smart_blog_post '.
'and postlang.id_lang='.(int)$lang['id_lang'].' order by id_smart_blog_post asc'
);


if (is_array($posts_id))
foreach ($posts_id as $post_id)
{
$url = $home.$blogfolder.$post_id['link'];


if (!$this->_addLinkToSitemap(
$link_sitemap, array(
'type' => 'blog',
'page' => 'blog',
'link' => $url,
'image' => false
), $lang['iso_code'], $index, $i, $post_id['id_smart_blog_post']
))
return false;
}


return true;
}

Por último en el método _getPriorityPage añado estas dos líneas antes del return (por lo que comentaba antes de que no lo he desinstalado):

 

if ($page='post'||$page='blog')
return 0.7;
 

Y eso es todo, espero que te sirva. Ni falta hará que te recuerde que te recomiendo hacer un backup del fichero php original.

 

Un saludo.

Edited by val_carter (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Hi, 

val_carter's method works excellent. 

 

Although I haven't tested installation / deinstallation. 

 

Thank you very much. 

Regards, 

mmi

Share this post


Link to post
Share on other sites

Siiiiiiiii, muchas gracias val_carter , me ha funcionado perfecto!!!

y era muy importante porque voy a tener pocos articulos, asi que se me indexan pocas paginas. y las del blog van a ser importantes.

Edited by m10.es (see edit history)

Share this post


Link to post
Share on other sites

Los que tenéis wordpress y lo habéis hecho bien, ¿podéis poner el código? Yo me pierdo al tocar esos archivos.

 

Un saludo y gracias.

Share this post


Link to post
Share on other sites

Hola, a mi me ha ocurrido lo mismo y he tenido que modificar el fichero gsitemap.php del módulo. Te indico lo que he realizado, aunque tengo que depurarlo, pero funciona, lo único que hay que hacer es dejarlo un poco más elegante.

 

En el fichero en la línea 49 añade a un array el tipo de páginas que va a incluir en el sitemap, yo lo dejo así (donde añado el último valor, 'post'):

 

$this->type_array = array('home', 'meta', 'product', 'category', 'manufacturer', 'supplier', 'cms', 'module','post');

 

Luego añado después de la línea 76 las dos líneas (para indicar la prioridad de las páginas del blog o post, he usado dos nombres pero con uno valdría, y 0.7 lo cual va a gusto del consumidor):

 

'GSITEMAP_PRIORITY_POST' => 0.7,
'GSITEMAP_PRIORITY_BLOG' => 0.7,
Después de la línea 123:
 
'GSITEMAP_PRIORITY_POST' => '',
'GSITEMAP_PRIORITY_BLOG' => '',
Es importante que se vea que esto es para la instalación y desinstalación del módulo, como yo no lo he desinstalado y vuelto a instalar a la hora de obtener la prioridad lo meto a pelo para el blog, por lo que estos dos bloques no los he podido probar al 100%.
 
Luego, después de la línea 654, que es cuando termina la función que añade las páginas CMS, añado la siguiente función que es una copia de la que se utiliza para obtener los enlaces CMS pero la modifico para obtener los del blog. La hago sin emplear objetos blog ni el objeto link como en el resto de métodos ya que me resultaba fácil obtenerlos con una consulta sql (aunque no es la manera más elegante repito, además de que para obtener el home tengo que repetir código). Además, en el valor de tipo y página pongo 'blog', se puede poner lo que uno quiera. La función en concreto:
(LA SQL PARA FORMAR LA URL EN MI SMART BLOG ES idpost_campolinkrewrite.html SI NO ES ASÍ EN VUESTRO BLOG HAY QUE MODIFICAR LA SQL Y EN LA VARIABLE blogfolder DEBÉIS PONER VUESTRO FOLDER DEL BLOG )
protected function _getPostLink(&$link_sitemap, $lang, &$index, &$i, $id_post = 0)
{
if (Configuration::get('PS_SSL_ENABLED') && Configuration::get('PS_SSL_ENABLED_EVERYWHERE'))
$protocol = 'https://';
else
$protocol = 'http://';


$home=$protocol.Tools::getShopDomainSsl(false).$this->context->shop->getBaseURI().(method_exists('Language', 'isMultiLanguageActivated') ? Language::isMultiLanguageActivated() ? $lang['iso_code'].'/' : '' : '');
$blogfolder='tu_parte_de_la_url_del_blog_despues_del_home/';


if (method_exists('ShopUrl', 'resetMainDomainCache'))
ShopUrl::resetMainDomainCache();
$posts_id = Db::getInstance()->ExecuteS(
'SELECT post.`id_smart_blog_post`, CONCAT(post.`id_smart_blog_post`,"_",postlang.link_rewrite,".html") as link '.
'FROM `'._DB_PREFIX_.'smart_blog_post` post, '._DB_PREFIX_.'smart_blog_post_lang postlang '.
'WHERE post.active=1 and post.id_smart_blog_post=postlang.id_smart_blog_post '.
'and postlang.id_lang='.(int)$lang['id_lang'].' order by id_smart_blog_post asc'
);


if (is_array($posts_id))
foreach ($posts_id as $post_id)
{
$url = $home.$blogfolder.$post_id['link'];


if (!$this->_addLinkToSitemap(
$link_sitemap, array(
'type' => 'blog',
'page' => 'blog',
'link' => $url,
'image' => false
), $lang['iso_code'], $index, $i, $post_id['id_smart_blog_post']
))
return false;
}


return true;
}

Por último en el método _getPriorityPage añado estas dos líneas antes del return (por lo que comentaba antes de que no lo he desinstalado):

 

if ($page='post'||$page='blog')
return 0.7;
 

Y eso es todo, espero que te sirva. Ni falta hará que te recuerde que te recomiendo hacer un backup del fichero php original.

 

Un saludo.

 

 

Hola en primer lugar muchas gracias por la aportación.

Estoy intentando hacerlo pero no me sale, y sin duda es por causa de que hay conocimientos que yo no tengo.

Hay dos cosas que no entiendo bien:

1) Yo al igual que tú he tratado de hacerlo modificando el modulo una vez instalado. Pero no me queda claro si para este caso hay que poner las  constantes PRIORITY en las linéas 76 y 123 ("Luego añado después de la línea 76 las dos líneas

'GSITEMAP_PRIORITY_POST' => 0.7,

'GSITEMAP_PRIORITY_BLOG' => 0.7,

Después de la línea 123:
 
'GSITEMAP_PRIORITY_POST' => '',

'GSITEMAP_PRIORITY_BLOG' => '',  "

Yo lo he realizado poniendolas tal cual pero no me ha salido.

 

2) Por otro lado, tal como entiendo en $blogfolder='tu_parte_de_la_url_del_blog_despues_del_home/'; deberíamos poner $blogfolder='blog/'; para los que en nuestra url tenemos la carpeta blog así: www.mydomain.es/blog.html

¿Estoy en lo cierto? Es que no se que otra cosa puedo estar haciendo mal.

Por otro lado en mi sitemap no se muestra ni el link para la carpeta blog, ni en consecuencia los link para los post de esta carpeta.

Saludos

Edited by pacogomez (see edit history)

Share this post


Link to post
Share on other sites

Hola a todos,

En efecto los chicos de datasoft olvidan que el blog debería incluirse en el sitemap, es más si no lo tenemos incluido en el sitemap es como si no lo tuviéramos.

Lo más correcto sería incluir en el sitemap-index el sitemap propio de smartblog .... pero smart-datasoft solo te lo da pagando, por lo que el otro camino debería ser que Prestashop lo incluyera en su sitemap, pero esto Prestashop no tiene por qué hacerlo, en fin que estamos jodidos......

 

Yo he implementado la solución que da "Val-Carter" un poco más arriba en este hilo y funciona perfectamentem es más alterando un poco el sql se puede adaptar a cualquier tienda, pero esta modificación solo casa los posts....que ya es mucho...

 

Pero ahora quiero compartir con vosotros un gsitemap.php y un sitemap.tpl aptas para la versión 1.6 de Prestashop.

 

sitemap.tpl del theme de cada uno

 

gsitemap.php del módulo gsitemap

 

Que lo disfrutéis.

 

A mi en mi tienda Medinet Online me funciona perfectamente, todos los lunes con el Cron se genera un  nuevo sitemap que actualiza los cambios que haya podido hacer durante la semana y se lo envía a Google.

Share this post


Link to post
Share on other sites

Hola a todos,

En efecto los chicos de datasoft olvidan que el blog debería incluirse en el sitemap, es más si no lo tenemos incluido en el sitemap es como si no lo tuviéramos.

Lo más correcto sería incluir en el sitemap-index el sitemap propio de smartblog .... pero smart-datasoft solo te lo da pagando, por lo que el otro camino debería ser que Prestashop lo incluyera en su sitemap, pero esto Prestashop no tiene por qué hacerlo, en fin que estamos jodidos......

 

Yo he implementado la solución que da "Val-Carter" un poco más arriba en este hilo y funciona perfectamentem es más alterando un poco el sql se puede adaptar a cualquier tienda, pero esta modificación solo casa los posts....que ya es mucho...

 

Pero ahora quiero compartir con vosotros un gsitemap.php y un sitemap.tpl aptas para la versión 1.6 de Prestashop.

 

sitemap.tpl del theme de cada uno

 

gsitemap.php del módulo gsitemap

 

Que lo disfrutéis.

 

A mi en mi tienda Medinet Online me funciona perfectamente, todos los lunes con el Cron se genera un  nuevo sitemap que actualiza los cambios que haya podido hacer durante la semana y se lo envía a Google.

 

Can you update the links to your modified files? Thank you.

Share this post


Link to post
Share on other sites

Mi estimado, cómo has generado el cron?

Podrías pasar la línea de código?

 

Gracias de antemano

Hola a todos,

En efecto los chicos de datasoft olvidan que el blog debería incluirse en el sitemap, es más si no lo tenemos incluido en el sitemap es como si no lo tuviéramos.

Lo más correcto sería incluir en el sitemap-index el sitemap propio de smartblog .... pero smart-datasoft solo te lo da pagando, por lo que el otro camino debería ser que Prestashop lo incluyera en su sitemap, pero esto Prestashop no tiene por qué hacerlo, en fin que estamos jodidos......

 

Yo he implementado la solución que da "Val-Carter" un poco más arriba en este hilo y funciona perfectamentem es más alterando un poco el sql se puede adaptar a cualquier tienda, pero esta modificación solo casa los posts....que ya es mucho...

 

Pero ahora quiero compartir con vosotros un gsitemap.php y un sitemap.tpl aptas para la versión 1.6 de Prestashop.

 

sitemap.tpl del theme de cada uno

 

gsitemap.php del módulo gsitemap

 

Que lo disfrutéis.

 

A mi en mi tienda Medinet Online me funciona perfectamente, todos los lunes con el Cron se genera un  nuevo sitemap que actualiza los cambios que haya podido hacer durante la semana y se lo envía a Google.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More