Zencart诡异的子分类地址出错问题

世界末日估计真的要来了,不然怎么会有这么诡异的问题。

C同学将原来用于测试的zencart商品分类进行了一系列的移动,将原来属于商品分类ID为6下面的子分类分别移动到商品分类ID为3和9的下面,于是诡异的问题出现了。

被移走的分类居然个个那么的不忘本,访问的地址居然会带着原来旧目录的ID,伪静态的地址里统一的加了c-6,于是属于分类3下的子分类地址是c-6_3,属于分类9下的子分类地址成了c-6_9。

这个问题本来大家都没发现,今天C同学突然说某个分类的归属出错了,表现出来的是面包屑导航出错了,路径前面多了一个没有关系的分类归属,于是我研究了一下,发现了上述问题,只要当时从分类id为6下的子分类移出去的全部都有类似问题,自动在面包屑导航前面加上了个已经没有关系的id为6的分类名。

于是我去掉了伪静态,发现问题一样,动态地址同样会自己扯上旧的分类ID;于是我删除了网站缓存,没有用;于是去删除了伪静态的缓存,发现问题任然没有解决;我又试了后台重新修改分类再保存,没有解决问题;我到数据库分类表格里去找,表格里ID归属正常,找不到问题;搜索数据库也无果……我郁闷了!

而且更诡异的是,在分类ID为3或9下的那些从6移过来的子分类的地址里,删除了6_,也就是手动将地址改为c-3或者c-9,居然能正常访问,面包屑导航出错的问题也得到解决……

不写入数据库,和缓存没关系,我的zencart是最新的1.5.1版本的,这到底是怎么回事呢?哪个大侠给指点指点啊!

Update 2012-12-21

因为备份的目录错误,鬼使神差的,原来C同学自己通过网络教程将侧边的分类展开了,修改了includes/classes/category_tree.php里面的代码:

<span>if</span> (zen_not_null($cPath)) <span>{</span> 改为 <span>if</span> (zen_not_null($cPath) or 1) <span>{</span>

并且在下面两行代码之间

reset($cPath_array);
while (list($key, $value) = each($cPath_array)) {

插入了<span>$</span>cPath_array = array(#,#); 其中#是表示需要展开的分类的ID,最后在<span>while</span> (list($key, $value) = each($cPath_array)) <span>{</span>之前加入了代码:<span>$</span>new_path = ''<span>;</span>,最终使得让zencart默认不展开的侧边分类显示了子分类,但没想到的是居然导致子分类链接出错。

今天看到一解决方法,在includes/modules/category_row.php文件中类似以下代码的前面:

$list_box_contents[$row][$col] = array('params' =&gt; 'class="categoryListBoxContents"' . ' ' . 'style="width:' . $col_width . '%;"',
        'text' =&gt; '&lt;a href="' . zen_href_link(FILENAME_DEFAULT, $cPath_new). '"&gt;' . zen_image(DIR_WS_IMAGES . $categories-&gt;fields['categories_image'], $categories-&gt;fields['categories_name'], SUBCATEGORY_IMAGE_WIDTH, SUBCATEGORY_IMAGE_HEIGHT) . '&lt;br /&gt;' . $categories-&gt;fields['categories_name'] . '&lt;/a&gt;');

加入以下代码:

$str= zen_href_link(FILENAME_DEFAULT, $cPath_new);
$arrs=explode('-',$str);
    $html_str=$arrs[sizeof($arrs)-1];
    //echo '&lt;hr&gt;'.$html_str.'&lt;hr&gt;';
    unset($arrs[sizeof($arrs)-1]);
    $html_str_arr=explode('_',$html_str);
    if(sizeof($html_str_arr)&gt;=2){
     $html_str_arr_tmp=$current_category_id.'_'.$html_str_arr[sizeof($html_str_arr)-1];
     $return=implode('-',$arrs).'-'.$html_str_arr_tmp;
     $str= $return;
    }

并将前面代码中的zen_href_link(FILENAME_DEFAULT, $cPath_new)改成 <span>$</span>str

可是貌似问题仍然无法解决。

作者: LMS

天行贱,君子自强自息。

标签

《Zencart诡异的子分类地址出错问题》有2个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注