• 商品
  • 详情
  • 评价
  • 联系
  • 推荐
立即购买 分享好友 商城首页 商城分类 切换频道 秒杀活动 购物车
1/5
destoon省、市、区/县、乡/镇四级联动菜单图1

destoon省、市、区/县、乡/镇四级联动菜单

完美兼容destoon系统缓存
8322+已售
价格 400.00
粉丝价 350.00   关注店铺,即享粉丝价
发货 全国付款后24小时内  
到付 支持货到付款
数量
-+
库存 9999997起订1件  
商品详情

destoon省、市、区/县、乡/镇四级联动菜单前台效果

destoon省、市、区/县、乡/镇四级联动菜单后台

三,destoon省、市、区/县、乡/镇四级联动菜单(部分代码)

1)根节点入栈

foreach ($items as $id => $item) {
            if ($item['parentid'] == 0) {
                $stack[] = $id;
                $depths[$id] = 0;
                $arrparentids[$id] = '0';
            }
        }

2)使用栈进行深度优先遍历

while (!empty($stack)) {
            $pid = array_pop($stack);
            
            if (!empty($children[$pid])) {
                foreach ($children[$pid] as $child_id) {
                    $depths[$child_id] = $depths[$pid] + 1;
                    $arrparentids[$child_id] = $arrparentids[$pid] . ',' . $pid;
                    $stack[] = $child_id;
                }
            }
        }

3)按深度降序排序(从叶子节点到根节点)

arsort($depths);

4)从叶子节点开始向上计算

foreach ($depths as $id => $depth) {
            $parentid = $items[$id]['parentid'];
            if ($parentid && isset($arrchildids[$parentid])) {
                $arrchildids[$parentid] .= ',' . $arrchildids[$id];
            }
        }

5)开启事务提高性能

DB::query("START TRANSACTION");
        
        foreach ($items as $id => $item) {
            $child = isset($children[$id]) && !empty($children[$id]) ? 1 : 0;
            $arrparentid = isset($arrparentids[$id]) ? $arrparentids[$id] : '0';
            $arrchildid = $arrchildids[$id];
            
            // 修复:使用 addslashes 替代 DB::escape
            $sql = "UPDATE {$this->table} SET 
                    arrparentid = '".addslashes($arrparentid)."',
                    arrchildid = '".addslashes($arrchildid)."',
                    child = '".intval($child)."'
                    WHERE areaid = '".intval($id)."'";
            
            DB::query($sql);
            
            $counter++;
            // 每处理$batch_size条提交一次
            if ($counter % $batch_size === 0) {
                DB::query("COMMIT");
                DB::query("START TRANSACTION");
                
                // 输出进度信息
                if ($action == 'cache') {
                    $progress = round($counter / $total * 100);
                    echo "处理进度: {$progress}% ({$counter}/{$total})<br>";
                    flush();
                }
            }
        }

举报
收藏 0
买家评价
正在加载评价详情...
联系方式
加关注0

php开发

管理员第1年
资料未认证
保证金未缴纳