网商云计算

 找回密码
 立即注册
搜索
热搜: 网渠道
查看: 109|回复: 0

[网商系统] 无法更换模版的bug

[复制链接]
发表于 2016-1-28 11:23:22 | 显示全部楼层 |阅读模式
发现更换模版后会出现错误,表现为json数据没有正常转换成商品排列。
经检查,出错的文件是 ad_position.lbi,内容就一句话 {insert name='ads' id=$ads_id num=$ads_num}。
{insert} 标签是ecshop的用法,控制语句是在 /includes/lib_insert.php 文件。


  1. {insert name='ads' id=$ads_id num=$ads_num}

  2. 表示:执行动态内容函数库(/includes/lib_insert.php)中的insert_ads()函数

  3. name:insert_后面的名字

  4. id:传入的数组参数

  5. num:传入的数组参数

  6. /**
  7. * 例如
  8. */
  9. function insert_ads($arr) {
  10.     $id = $arr['id']; //表示传入的id参数

  11.     $num = $arr['num']; //表示传入的num参数

  12.     return 'something'; //返回需要输出的内容

  13. }
复制代码
无法转换的原因是动态转换没有得到数据,找到 cls_template.php文件,得到以下内容:
  1.             /* 检查有无动态库文件,如果有为其赋值 */
  2.             $dyna_libs = get_dyna_libs($GLOBALS['_CFG']['template'], $this->_current_file);
  3.             if ($dyna_libs)
  4.             {
  5.                 foreach ($dyna_libs AS $region => $libs)
  6.                 {
  7.                     $pattern = '/<!--\\s*TemplateBeginEditable\\sname="'. $region .'"\\s*-->(.*?)<!--\\s*TemplateEndEditable\\s*-->/s';

  8.                     if (preg_match($pattern, $source, $reg_match))
  9.                     {
  10.                         $reg_content = $reg_match[1];
  11.                         /* 生成匹配字串 */
  12.                         $keys = array_keys($libs);
  13.                         $lib_pattern = '';
  14.                         foreach ($keys AS $lib)
  15.                         {
  16.                             $lib_pattern .= '|' . str_replace('/', '\/', substr($lib, 1));
  17.                         }
  18.                         $lib_pattern = '/{include\sfile=(' . substr($lib_pattern, 1) . ')}/';
  19.                         /* 修改$reg_content中的内容 */
  20.                         $GLOBALS['libs'] = $libs;
  21.                         $reg_content = preg_replace_callback($lib_pattern, 'dyna_libs_replace', $reg_content);

  22.                         /* 用修改过的内容替换原来当前区域中内容 */
  23.                         $source = preg_replace($pattern, $reg_content, $source);
  24.                     }
  25.                 }
  26.             }
复制代码
查 get_dyna_libs,原来是在 lib_main.php中

  1. on get_dyna_libs($theme, $tmp)
  2. {
  3.         $tmp_arr_www_ecshop68_com = explode('.', $tmp);
  4.     $ext = end($tmp_arr_www_ecshop68_com);
  5.     $tmp = basename($tmp,".$ext");
  6.     $sql = 'SELECT region, library, sort_order, id, number, type' .
  7.             ' FROM ' . $GLOBALS['ecs']->table('template') .
  8.             " WHERE theme = '$theme' AND filename = '" . $tmp . "' AND type > 0 AND remarks=''".
  9.             ' ORDER BY region, library, sort_order';
  10.     $res = $GLOBALS['db']->getAll($sql);

  11.     $dyna_libs = array();
  12.     foreach ($res AS $row)
  13.     {
  14.         $dyna_libs[$row['region']][$row['library']][] = array(
  15.             'id'     => $row['id'],
  16.             'number' => $row['number'],
  17.             'type'   => $row['type']
  18.         );
  19.     }

  20.     return $dyna_libs;
  21. }
复制代码

问题找到了,估计是某位在修改程序时做了些手脚,目前可以手工去修改。
下免的问题就是怎么能在改变模版的时候直接改正过来,简单粗暴的方式就是在换模版时加一句sql语句,但是不知道小京东的模版是否有特殊要求,这个bug暂时就到这里,不继续修改了。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|网商云计算

GMT+8, 2026-4-17 23:53 , Processed in 0.066219 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表