精品项目开发
分享
  • 收藏
  • 举报
    X
    问下:fun('sort@sons'方法,如果父栏目是模型1,用此方法只能获取这个栏目下模型1的子栏目,如果有其他模型的子栏目,是不能输出的
    458
    6

    是不是这样

    7
    赏礼
    赏钱
    收藏
    点击回复
        全部留言
    • 6
    • 半满 程序开发者 消费:0.3元 2021-05-07 21:26 21:266楼
      输出方法:
      {volist name=":getArray(fun('Sort@son',intval($fid))?:fun('Sort@brother',$fid))" id="name"}
      <li {eq name="$key" value="$fid"}class='ck'{/eq}><a href="{:urls('content/index',"fid=$key")}">{$name}</a></li>
      {/volist}
      结果:





      wr1688 消费:2593.25元 华为 2021-05-07 21:27
      看下sons能出来授权查询吗
      半满 消费:0.3元 2021-05-07 21:29
      可以的,sons获取所有子栏目,包括所有下下级,son只获取下一级的栏目,
      半满 消费:0.3元 2021-05-07 21:29
      @wr1688

      wr1688 消费:2593.25元 华为 2021-05-07 22:41
      谢了,我再试试
    0 赏钱 赏礼回复
    • 半满 程序开发者 消费:0.3元 2021-05-07 21:16 21:166楼
      if (!function_exists('get_sort')) {

          /**
           * 获取具体某个频道下面的栏目相关信息
           * @param number $id 为0时,取出所有栏目,大于0时,根据$type参数取值
           * @param string $field 取某个字段对应的值,config或者是不存在的字段名,则取出所有配置参数
           * @param string $type father时取出所有父级栏目,sons时取出所有下一级栏目,other时优先取子栏目,若无再取同级,若无再取父级兄弟栏目
           * @param string $sys_type 指定频道模块
           * @return void|number|number[]|array[]|unknown[]|number[]|unknown[]|array|unknown
           */
          function get_sort($id = 0, $field = 'name', $type = '', $sys_type = '')
          {
              $array = sort_config($sys_type);
              $_type = $type === '' ? $field : $type;   //兼容处理
              if ($id > 0) {
                  if ($_type == 'father') {    //所有父栏目,也包括自身,一般用在面包屑导航
                      $farray = sort_get_father($id, $sys_type);
                      $self_array = [$id => $array[$id]['name']];
                      return empty($farray) ? $self_array : $farray + $self_array;
                  } elseif ($_type == 'sons') {  //所有下一级级栏目,也包括自身,一般用在查询数据库
                      $s_array = [
                          $id => $field == 'name' ? $array[$id]['name'] : $id,
                      ];
                      $_pid = 0;
                      $fpid = [];     //把所有父分类都加入到容器
                      foreach ($array as $key => $rs) {
                          if (!$rs['pid']) continue;
                          //$rs['pid']==$id 仅仅第一层直属下级, $rs['pid']==$_pid 下级的下级
                          if ($rs['pid'] == $id || $rs['pid'] == $_pid || in_array($rs['pid'], $fpid)) {
                              $s_array[$key] = $field == 'name' ? $array[$key]['name'] : $key;
                              if (!in_array($rs['pid'], $fpid)) {   //把所有父分类都加入容器
                                  $fpid[] = $rs['pid'];
                              }
                              $_pid = $key;
                          }
                      }
                      return $s_array;
                  } elseif ($_type == 'brother') {  //取同级栏目
                      $s_array = [];
                      $_pid = $array[$id]['pid'];
                      foreach ($array as $key => $rs) {
                          if ($rs['pid'] == $_pid) {
                              $s_array[$key] = $rs['name'];
                          }
                      }
                      return $s_array;
                  } elseif ($_type == 'other') {    //取父级兄弟栏目及本级兄弟栏目及子栏目,一般用在栏目页面方便展示布局
                      $m_array = [];
                      $pid = $array[$id]['pid'];
                      $fpid = $pid ? $array[$pid]['pid'] : null;
                      $_pid = null;
                      foreach ($array as $key => $rs) {
                          if ($fpid !== null && $rs['pid'] == $fpid) {  //父级栏目
                              $m_array[$key] = $rs['name'];
                          } elseif ($rs['pid'] == $pid) {   //同级栏目
                              $m_array[$key] = $rs['name'];
                          } elseif ($rs['pid'] == $_pid) {    //子栏目
                              $m_array[$key] = $rs['name'];
                          }
                          if ($key == $id) {
                              $_pid = $id;
                          }
                      }
                      return $m_array;
                  } elseif ($_type == 'config') {
                      return $array[$id];
                  } elseif (isset($array[$id][$_type])) {
                      return $array[$id][$_type];
                  } else {
                      return $array[$id];
                  }
              } elseif ($_type == 'other' && $array) {  //fid不存在的话,就只取一级栏目
                  $farray = [];
                  foreach ($array as $key => $rs) {
                      if ($rs['pid'] == 0) {
                          $farray[$key] = $rs['name'];
                      }
                  }
                  return $farray;
              } elseif ($_type == 'all') {
                  $farray = [];
                  foreach ($array as $key => $rs) {
                      $farray[$key] = $rs['name'];
                  }
                  return $farray;
              }
              return $array;
          }
      }




    0 赏钱 赏礼回复
    更多回复
        你可能感兴趣的主题
    恢复多功能编辑器
  • 3 1
  • 精品项目开发
        圈内贴子3650
    • 圈子成员218
    本圈子内的新贴

    推荐内容
    扫一扫访问手机版
    请选择要切换的马甲:

     
    网页即时交流
    QQ咨询
    咨询热线
    020-28998648