ECSHOP文章内容时显示时不显示终极解决方法

[ 2011年10月24日 ]
Tags:  

其实这个问题有三种解决办法:

第一种:直接在后台清楚缓存,然后浏览文章,现在可以显示了吧

第二种:

添加:   /* 文章内容 */
     $content = $db->getRow("SELECT article_id, title,content FROM " .$ecs->table('article'). " WHERE article_id= $article_id ");
   if (!empty($content))
    {
        $content['url'] = build_uri('article', array('aid'=>$content['article_id']), $content['content']);
        $smarty->assign('content', $content);
    }
然后: article.dwt文件修改

以前的    <!-- {if $article.content } -->
     {$article.content}
     <!-- {/if} -->   

替换成:{$content.content}

第三种方法:次方法不仅仅解决文章内容不显示的文通,同时解决了ECSHOP缓存文件过大的问题

ecshop的数据库缓存存在些问题,会导致缓存文件无限制的增多。

经过测试发现,大量类似这样的语句被缓存

SELECT act_id, act_name, act_type, start_time, end_time FROM `ecs`.`ecs_goods_activity` WHERE is_finished=0 AND start_time <= '1216338055' AND end_time >= '1216338055'

SELECT act_id, act_range, act_range_ext, act_name, start_time, end_time FROM `ecs`.`ecs_favourable_activity` WHERE start_time <= '1216338055' AND end_time >= '1216338055'

随着时间的变化,这些sql语句也在发生变化,所以他们会被当作不同的语句而被缓存,所以文件会越来越多。

而这些语句超过当前时间就不会再被执行,缓存起来没有意义。

官方出了禁止缓存的补丁,但是缓存还是有一定实际效果的,完全禁用指标不治本。

所以只对favourable_activity,goods_activity这2个表禁止缓存即可。

简单解决方法:
打开include/init.php
找到
$db->set_disable_cache_tables(array($ecs->table('sessions'), $ecs->table('sessions_data'), $ecs->table('cart')));
修改为
$db->set_disable_cache_tables(array($ecs->table('sessions'), $ecs->table('sessions_data'), $ecs->table('cart'), $ecs->table('favourable_activity'), $ecs->table('goods_activity')));
即可


进阶解决方法:
只对类似上面sql语句禁止缓存,这样上面2个表其他类型的sql仍然可以被缓存
打开include/cls_mysql.php
查找 $this->setSqlCacheData($result, $arr);
全部替换成 $this->setSqlCacheData($result, $arr,$sql);
找到
function setSqlCacheData($result, $data)
{
if ($result['storecache'] === true && $result['filename'])
{
@file_put_contents($result['filename'], '<?php exit;?>' . time() . serialize($data));
clearstatcache();
}

}


修改为
function setSqlCacheData($result, $data,$sql='')
{
if(preg_match("/start_time(\s+)\<\=(.*?)end_time(\s+)\>\=/is",$sql)){
return false;
}else{

if ($result['storecache'] === true && $result['filename'])
{
@file_put_contents($result['filename'], '<?php exit;?>' . time() . serialize($data));
clearstatcache();
}
}
}

以上就是关于ECSHOP缓存问题的解决方法,希望对大家有用。

相关文章:
发布:xunzhaohaizi | 分类:常见故障排除 | 评论:0 | 引用:0 | 浏览:
发表评论