发现更换模版后会出现错误,表现为json数据没有正常转换成商品排列。
经检查,出错的文件是 ad_position.lbi,内容就一句话 {insert name='ads' id=$ads_id num=$ads_num}。
{insert} 标签是ecshop的用法,控制语句是在 /includes/lib_insert.php 文件。
- {insert name='ads' id=$ads_id num=$ads_num}
- 表示:执行动态内容函数库(/includes/lib_insert.php)中的insert_ads()函数
- name:insert_后面的名字
- id:传入的数组参数
- num:传入的数组参数
- /**
- * 例如
- */
- function insert_ads($arr) {
- $id = $arr['id']; //表示传入的id参数
- $num = $arr['num']; //表示传入的num参数
- return 'something'; //返回需要输出的内容
- }
复制代码 无法转换的原因是动态转换没有得到数据,找到 cls_template.php文件,得到以下内容:
- /* 检查有无动态库文件,如果有为其赋值 */
- $dyna_libs = get_dyna_libs($GLOBALS['_CFG']['template'], $this->_current_file);
- if ($dyna_libs)
- {
- foreach ($dyna_libs AS $region => $libs)
- {
- $pattern = '/<!--\\s*TemplateBeginEditable\\sname="'. $region .'"\\s*-->(.*?)<!--\\s*TemplateEndEditable\\s*-->/s';
- if (preg_match($pattern, $source, $reg_match))
- {
- $reg_content = $reg_match[1];
- /* 生成匹配字串 */
- $keys = array_keys($libs);
- $lib_pattern = '';
- foreach ($keys AS $lib)
- {
- $lib_pattern .= '|' . str_replace('/', '\/', substr($lib, 1));
- }
- $lib_pattern = '/{include\sfile=(' . substr($lib_pattern, 1) . ')}/';
- /* 修改$reg_content中的内容 */
- $GLOBALS['libs'] = $libs;
- $reg_content = preg_replace_callback($lib_pattern, 'dyna_libs_replace', $reg_content);
- /* 用修改过的内容替换原来当前区域中内容 */
- $source = preg_replace($pattern, $reg_content, $source);
- }
- }
- }
复制代码 查 get_dyna_libs,原来是在 lib_main.php中
- on get_dyna_libs($theme, $tmp)
- {
- $tmp_arr_www_ecshop68_com = explode('.', $tmp);
- $ext = end($tmp_arr_www_ecshop68_com);
- $tmp = basename($tmp,".$ext");
- $sql = 'SELECT region, library, sort_order, id, number, type' .
- ' FROM ' . $GLOBALS['ecs']->table('template') .
- " WHERE theme = '$theme' AND filename = '" . $tmp . "' AND type > 0 AND remarks=''".
- ' ORDER BY region, library, sort_order';
- $res = $GLOBALS['db']->getAll($sql);
- $dyna_libs = array();
- foreach ($res AS $row)
- {
- $dyna_libs[$row['region']][$row['library']][] = array(
- 'id' => $row['id'],
- 'number' => $row['number'],
- 'type' => $row['type']
- );
- }
- return $dyna_libs;
- }
复制代码
问题找到了,估计是某位在修改程序时做了些手脚,目前可以手工去修改。 下免的问题就是怎么能在改变模版的时候直接改正过来,简单粗暴的方式就是在换模版时加一句sql语句,但是不知道小京东的模版是否有特殊要求,这个bug暂时就到这里,不继续修改了。
|