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']; }