ECSHOP文章内容时显示时不显示终极解决方法
其实这个问题有三种解决办法:
第一种:直接在后台清楚缓存,然后浏览文章,现在可以显示了吧
第二种:
添加: /* 文章内容 */
$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缓存问题的解决方法,希望对大家有用。