ecshop

Call to undefined function insert_bought_notes()

2010/8/26

帮忙给人做ecshop二次开发和换ecshop模版的时候,有时候会出现以下错误,

Fatal error: Call to undefined function insert_bought_notes() in。。。\web\includes\cls_template.php on line 1140

在网上找好多,终于找到可以解决90%以上可以解决这个问题的办法。主要的问题是因为新旧的模版和程序不能兼容。解决办法:

在ecshop的include目录中创建lib_buy.php,以下代码贴入:

<?php

if (!defined('IN_ECS'))

{

die('Hacking attempt');

}

function insert_bought_notes($arr)

{

$need_cache = $GLOBALS['smarty']->caching;

$need_compile = $GLOBALS['smarty']->force_compile;

$GLOBALS['smarty']->caching = false;

$GLOBALS['smarty']->force_compile = true;

$sql = 'SELECT u.user_name, og.goods_number, oi.add_time, IF(oi.order_status IN (2, 3, 4), 0, 1) AS order_status ' .

'FROM ' . $GLOBALS['ecs']->table('order_info') . ' AS oi LEFT JOIN ' . $GLOBALS['ecs']->table('users') . ' AS u ON oi.user_id = u.user_id, ' . $GLOBALS['ecs']->table('order_goods') . ' AS og ' .

'WHERE oi.order_id = og.order_id AND ' . time() . ' - oi.add_time < 2592000 AND og.goods_id = ' . $arr['id'] . ' ORDER BY oi.add_time DESC LIMIT 5';

$bought_notes = $GLOBALS['db']->getAll($sql);

foreach ($bought_notes as $key => $val)

{

$bought_notes[$key]['add_time'] = local_date("Y-m-d G:i:s", $val['add_time']);

}

$sql = 'SELECT count(*) ' .

'FROM ' . $GLOBALS['ecs']->table('order_info') . ' AS oi LEFT JOIN ' . $GLOBALS['ecs']->table('users') . ' AS u ON oi.user_id = u.user_id, ' . $GLOBALS['ecs']->table('order_goods') . ' AS og ' .

'WHERE oi.order_id = og.order_id AND ' . time() . ' - oi.add_time < 2592000 AND og.goods_id = ' . $arr['id'];

$count = $GLOBALS['db']->getOne($sql);

$pager = array();

$pager['page']         = $page = 1;

$pager['size']         = $size = 5;

$pager['record_count'] = $count;

$pager['page_count']   = $page_count = ($count > 0) ? intval(ceil($count / $size)) : 1;;

$pager['page_first']   = "javascript:gotoBuyPage(1,$arr[id])";

$pager['page_prev']    = $page > 1 ? "javascript:gotoBuyPage(" .($page-1). ",$arr[id])" : 'javascript:;';

$pager['page_next']    = $page < $page_count ? 'javascript:gotoBuyPage(' .($page + 1) . ",$arr[id])" : 'javascript:;';

$pager['page_last']    = $page < $page_count ? 'javascript:gotoBuyPage(' .$page_count. ",$arr[id])"  : 'javascript:;';

$GLOBALS['smarty']->assign('notes', $bought_notes);

$GLOBALS['smarty']->assign('pager', $pager);

$val= $GLOBALS['smarty']->fetch('library/bought_notes.lbi');

$GLOBALS['smarty']->caching = $need_cache;

$GLOBALS['smarty']->force_compile = $need_compile;

return $val;

}

?>

再在文件cls_template.php中,在这个函数里引用上面这个文件

即:function insert_mod($name) // 处理动态内容

{

require_once(ROOT_PATH . 'includes/lib_buy.php');

list($fun, $para) = explode('|', $name);

$para = unserialize($para);

$fun = 'insert_' . $fun;

return $fun($para);

}

这样就不会报错了,问题解决。

如果还想看看到底哪里错了,可以查看cls_template.php

function insert_mod($name) // 处理动态内容

{

list($fun, $para) = explode('|', $name);

$para = unserialize($para);

$fun = 'insert_' . $fun;

return $fun($para);  //就是这一行,在这里调了$fun($para)即是function insert_bought_notes

}

这就是新旧版面不能兼容的关键所在。

感谢sina chunxia 网友的技术支持。帮我好多次解决问题

原版地址http://blog.sina.com.cn/s/blog_5f7b8c2c0100kiwj.html