Prestashop免费的博客模块 Simple BLOG

下载地址: https://www.prestashop.com/forums/topic/1075163-module-simple-blog-%E2%80%93-free-prestashop-blog-module/

这是一个免费的模块,个人感觉是完成度非常高了,支持数据的导入导出,评论,分类管理等等,但是问题也几个:

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

Post Comment