Prestashop免费的博客模块 Simple BLOG
这是一个免费的模块,个人感觉是完成度非常高了,支持数据的导入导出,评论,分类管理等等,但是问题也几个:
1.切换语言的时候没有跳转到rewrite url
解决方法
RewriteCond %{QUERY_STRING} ^id_post=([0-9]+)&url_alias=([a-zA-Z0-9-]+)$
RewriteRule ^([a-z]+)/module/ets_blog/blog$ /$1/blog/post/%1-%2? [R=301,L]
RewriteRule ^([a-z]+)/module/ets_blog/blog$ /$1/blog [R=301,L]2.hreflang元标签错误,没有指向rewrite url
修改模板文件:\themes\xxx\templates\_partials\head.tpl,找到
<link rel="alternate" href="{$pageUrl}" hreflang="{$code}">
修改为
{if $page.page_name == 'ets_blog_page'}
{if strpos($urls.current_url, "post") !== false}
<link rel="alternate" href="{$smarty.server.REQUEST_SCHEME}://{$smarty.server.HTTP_HOST}/{$language.iso_code}/blog/post/{$smarty.get.id_post}-{$smarty.get.url_alias}" hreflang="{$code}">
{elseif strpos($urls.current_url, "category") !== false}
<link rel="alternate" href="{$smarty.server.REQUEST_SCHEME}://{$smarty.server.HTTP_HOST}/{$language.iso_code}/blog/category/{$smarty.get.id_category}-{$smarty.get.url_alias}" hreflang="{$code}">
{/if}
{else}
<link rel="alternate" href="{$pageUrl}" hreflang="{$code}">
{/if}3.作者链接错误的bug
这是一个bug,内容发布页没有正确链接到作者页面,而是博客频道首页,
使用{$blog_post|@var_dump}并没有发现author_link,但是在模块文件中views\templates\hooksingle_post.tpl,它却在调用
<a href="{$blog_post.author_link|escape:'html':'UTF-8'}">
先检查了controller文件:/controllers/front/blog.php,找到了核心方法getAuthorById,里面有一行参数是$params['id_author'] = $id_author;,然后该参数使用了模块的getLink方法
$author['author_link']= $this->module->getLink('blog',$params); 接下来检查了模块文件ets_blog.php发现是getLink中根本没有对对传入的id_author参数做任何反应啊,所以导致没有生成出正确url
大量的if else, 没有id_author传入,最后使用了else里面的模块首页链接
elseif($controller=='blog')
{
if(isset($params['edit_comment']) && (int)$params['edit_comment'] && isset($params['id_post']) && $params['id_post'] && $postAlias = $this->getPostAlias((int)$params['id_post'],$id_lang))
{
$url .= 'post/'.(int)$params['id_post'].'-'.(int)$params['edit_comment'].'-'.$postAlias.$subfix;
}
elseif( isset($params['all_comment']) && $params['all_comment'] && isset($params['id_post']) && $postAlias = $this->getPostAlias((int)$params['id_post'],$id_lang))
{
$url .= 'post/allcomments/'.(int)$params['id_post'].'-'.$postAlias.$subfix;
}
elseif(isset($params['id_post']) && $postAlias = $this->getPostAlias((int)$params['id_post'],$id_lang))
{
$url .= 'post/'.$params['id_post'].'-'.$postAlias.$subfix;
}
elseif(isset($params['id_category']) && $categoryAlias = $this->getCategoryAlias((int)$params['id_category'],$id_lang))
{
$url .= 'category'.($page ? '/'.rtrim($page) : '/').$params['id_category'].'-'.$categoryAlias.$subfix;
}
elseif(isset($params['search']))
{
$url .= $page.'search/'.(string)$params['search'];
}
elseif(isset($params['latest']))
{
$url .= 'latest'.($page ? '/'.rtrim($page,'/') : '');
}
elseif(isset($params['month']) && isset($params['year']))
{
$url .= 'month/'.$params['month'].'/'.$params['year'].($page ? '/'.rtrim($page,'/') : '');
}
elseif(isset($params['year']))
{
$url .= 'year/'.$params['year'].($page ? '/'.rtrim($page,'/') : '');
}
elseif(isset($params['id_author'])) //添加id_author的判断即可解决问题
{
$url .= 'author/'.$params['id_author'].'-'.$params['alias'];
}
else
{
if($page)
$url .= trim($page,'/');
else
$url = rtrim($url,'/');
}
return $url;
} 解决方法:
修改ets_blog.php, 找到 public function getLink($controller = 'blog', $params = array(),$id_lang=0)下面的$controller=='blog',添加
elseif(isset($params['id_author']))
{
$url .= 'author/'.$params['id_author'].'-'.$params['alias'];
}