2023-05-12 开启多语言插件支持……

ecshop 模板缓存机制

ecshop 苏 demo 3151℃ 0评论

ECSHOP使用了模板缓存技术

在商店设置->基本设置里可以设置缓存的生存期,默认是3600秒。

如果需要调试网站,你可以设置缓存存活时间为0,不缓存任何页面。打开/index.php,可以看到以下代码:

/**
 * 判断是否存在缓存,如果存在则调用缓存,反之读取相应内容
 */

$cache_id = sprintf('%X', crc32($_SESSION['user_rank'] . '-' . $_CFG['lang'])); //缓存编号

if (!$smarty->is_cached('index.dwt', $cache_id))
{
    assign_template();

    $position = assign_ur_here();
    $smarty->assign('page_title',      $position['title']);    // 页面标题
    $smarty->assign('ur_here',         $position['ur_here']);  // 当前位置

$cache_id就是缓存的ID,根据这个ID,找到缓存的文件。ecshop使用的缓存类似于smarty的缓存机制。当然ecshop把它简单化了。全部写/inludes/cls_template.php文件里。

  1. if (!$smarty->is_cached(‘index.dwt’, $cache_id))

通过smarty类的is_cached方法判断页面是否重新缓存页面。如果返回false,那么就直接显示缓存的文件。

  1. $smarty->display(‘index.dwt’, $cache_id);

这样的缓存,既节省了网页的打开时间,又增加了网站的负载性能。你可以根据网站的实际情况,来设置模板的缓存时间,以提升网站性能。但网页有些地方,不能缓存。比如:库存、倒记时、会员的登录状态,购物车等,这些都必须是实时的,ECSHOP里可以找到lib_insert.php文件,所有不能缓存的地方都写在这里了。

比如下面的购物车代码:

/**
 * 调用购物车信息
 *
 * @access  public
 * @return  string
 */
function insert_cart_info()
{
    $sql = 'SELECT SUM(goods_number) AS number, SUM(goods_price * goods_number) AS amount' .
           ' FROM ' . $GLOBALS['ecs']->table('cart') .
           " WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'";
    $row = $GLOBALS['db']->GetRow($sql);

    if ($row)
    {
        $number = intval($row['number']);
        $amount = floatval($row['amount']);
    }
    else
    {
        $number = 0;
        $amount = 0;
    }

    $str = sprintf($GLOBALS['_LANG']['cart_info'], $number, price_format($amount, false));

    return '<a href="flow.php" title="' . $GLOBALS['_LANG']['view_cart'] . '">' . $str . '</a>';
}

在模板里使用{insert name=’cart_info’}调用进行

 

 

 

打赏

转载请注明:苏demo的别样人生 » ecshop 模板缓存机制

   如果本篇文章对您有帮助,欢迎向博主进行赞助,赞助时请写上您的用户名。
支付宝直接捐助帐号oracle_lee@qq.com 感谢支持!
喜欢 (0)or分享 (0)