ホームページ  >  記事  >  バックエンド開発  >  thinkPHPは連携メニューの機能を実装します

thinkPHPは連携メニューの機能を実装します

不言
不言オリジナル
2018-06-07 14:35:472416ブラウズ

この記事では、主に thinkPHP で実装された連携メニュー機能を紹介し、thinkPHP 連携メニューの実装手順と具体的な操作テクニックをサンプルの形式で分析します。必要な方は、以下の例を参照してください。この記事では、thinkPHP 連携メニュー機能の実装について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

リンクされたメニュー、最初にフロントエンドがどのように書かれているかをお見せします:

<p id="newCat">
  <p class="all_type" id="allGoogsCat">所有商品分类</p>
  <p class="spfl-warp <?php if(CONTROLLER_NAME != &#39;Index&#39; || ACTION_NAME != &#39;index&#39;){echo &#39;hide&#39;;} ?> ">
    <p class="index-spfl-left" id="pCatList">
      <ul>
        <foreach name="category_menu" key="one" item="v">
        <li class="li{$one+1}">
          <span><em></em>
            <a href="{:U(&#39;Category/index&#39;,array(&#39;id&#39;=>$v[&#39;category_id&#39;],&#39;level&#39;=>1))}" rel="external nofollow" >{$v.category_name}</a>
          </span>
          <p class="p none">
            <foreach name="v[&#39;childs&#39;]" key="two" item="v2">
              <dl>
                <dt>
                  <a href="{:U(&#39;Category/index&#39;,array(&#39;id&#39;=>$v2[&#39;category_id&#39;],&#39;level&#39;=>2))}" rel="external nofollow" >{$v2.category_name}</a>
                </dt>
                <dd class="fl">
                  <foreach name="v2[&#39;childs&#39;]" item="v3">
                    <a href="{:U(&#39;Category/index&#39;,array(&#39;id&#39;=>$v3[&#39;category_id&#39;],&#39;level&#39;=>3))}" rel="external nofollow" >
                      {$v3.category_name}
                    </a>
                  </foreach>
                </dd>
                <p class="cl"></p>
              </dl>
            </foreach>
          </p>
        </li>
      </foreach>
    </ul>
  </p>
  </p>
</p>
<script type="text/javascript">
<?php if(CONTROLLER_NAME != &#39;Index&#39; || ACTION_NAME != &#39;index&#39;){ ?>
  //商品分类鼠标滑过
  function spflHover() {
    $(".index-spfl-left ul li").live("mouseover", function () {
      $(this).addClass("active").siblings().removeClass("active");
      $(".index-spfl-left").find(".p").hide();
      $(this).find(".p").show();
    }).live("mouseout", function () {
      $(this).removeClass("active");
      $(".index-spfl-left").find(".p").hide();
      $(this).find(".p").hide();
    });
    //鼠标滑过分类显示
    $("#newCat").mouseover(function () {
      $(".spfl-warp").show();
    }).mouseout(function () {
      if ($("#ismain").val() == "1") {
        $(".spfl-warp").show();
      } else {
        $(".spfl-warp").hide();
      }
    })
  }
  spflHover();
<?php } ?>
</script>

実際、同じ li の第 1 レベルのメニューが第 2 レベルのメニューに対応していることがわかりましたか。li の第 2 レベルと第 3 レベルのメニューは次のとおりです。すべて dl の dt タグと dd タグに配置されます。

次に、取り出した category_menu がどのようなデータであるかを見てみましょう:

Array
(
 [0] => Array
  (
   [category_id] => 84
   [category_name] => 家装主材
   [parent_id] => 0
   [listorder] => 200
   [display] => 1
   [childs] => Array
    (
     [0] => Array
      (
       [category_id] => 85
       [category_name] => 厨卫
       [parent_id] => 84
       [listorder] => 200
       [display] => 1
       [childs] => Array
        (
         [0] => Array
          (
           [category_id] => 99
           [category_name] => 厨盆/水槽
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [1] => Array
          (
           [category_id] => 98
           [category_name] => 卫浴配件
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [2] => Array
          (
           [category_id] => 97
           [category_name] => 卫浴龙头
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [3] => Array
          (
           [category_id] => 96
           [category_name] => 龙头
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [4] => Array
          (
           [category_id] => 95
           [category_name] => 淋浴房
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [5] => Array
          (
           [category_id] => 94
           [category_name] => 智能坐便器
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [6] => Array
          (
           [category_id] => 93
           [category_name] => 浴室柜
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [7] => Array
          (
           [category_id] => 92
           [category_name] => 坐便器
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [8] => Array
          (
           [category_id] => 91
           [category_name] => 浴霸
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [9] => Array
          (
           [category_id] => 90
           [category_name] => 地漏
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [10] => Array
          (
           [category_id] => 89
           [category_name] => 坐便器盖板
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [11] => Array
          (
           [category_id] => 88
           [category_name] => 洗面盆
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [12] => Array
          (
           [category_id] => 87
           [category_name] => 角阀
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [13] => Array
          (
           [category_id] => 100
           [category_name] => 卫浴五金
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [14] => Array
          (
           [category_id] => 101
           [category_name] => 厨房挂件/配件
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [15] => Array
          (
           [category_id] => 86
           [category_name] => 淋浴花洒
           [parent_id] => 85
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
        )
      )
     [1] => Array
      (
       [category_id] => 126
       [category_name] => 墙纸
       [parent_id] => 84
       [listorder] => 200
       [display] => 1
       [childs] => Array
        (
         [0] => Array
          (
           [category_id] => 130
           [category_name] => 3D墙纸
           [parent_id] => 126
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [1] => Array
          (
           [category_id] => 129
           [category_name] => 纯纸墙纸
           [parent_id] => 126
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )
         [2] => Array
          (
           [category_id] => 128
           [category_name] => PVC墙纸
           [parent_id] => 126
           [listorder] => 200
           [display] => 1
           [childs] => Array
            (
            )
          )

それでは、データ テーブルはどのようになっているのでしょうか? データはどこにありますか?

Array
(
  [0] => Array
    (
      [category_id] => 211
      [category_name] => 鞋柜
      [parent_id] => 31
      [listorder] => 200
      [display] => 1
    )
  [1] => Array
    (
      [category_id] => 194
      [category_name] => 相框/照片墙
      [parent_id] => 189
      [listorder] => 200
      [display] => 1
    )
  [2] => Array
    (
      [category_id] => 193
      [category_name] => 帘艺隔断
      [parent_id] => 189
      [listorder] => 200
      [display] => 1
    )
  [3] => Array
    (
      [category_id] => 192
      [category_name] => 沙发垫套/椅垫
      [parent_id] => 189
      [listorder] => 200
      [display] => 1
    )
  [4] => Array
    (
      [category_id] => 191
      [category_name] => 地毯地垫
      [parent_id] => 189
      [listorder] => 200
      [display] => 1
    )
  [5] => Array
    (
      [category_id] => 190
      [category_name] => 桌布/罩件
      [parent_id] => 189
      [listorder] => 200
      [display] => 1
    )

データ テーブル内のデータは紫色です。

それでは、配列を処理するメソッドを記述してください。元のデータを、反復処理を使用して必要なデータに処理します。約6行のコードで大丈夫でしょうか?

コードをコピーしすぎると、人々は愚かになります。 ? ?

//把栏目分组,以多维数组形式
public function group_category($id = 0)
{
    $list=$this->where(&#39;display = 1&#39;)->order(&#39;listorder asc&#39;)->select();
    $tmp = array();
    foreach($list as $v){
      if($v[&#39;parent_id&#39;] == $id){
        $v[&#39;childs&#39;] = $this->group_category($v[&#39;category_id&#39;]);
        $tmp[] = $v;
      }
    }
    return $tmp;
}

SQL ステートメントを外部に配置し、パラメータとして関数 groud_category に渡してみてはいかがでしょうか。こうすることで、データベースを常にチェックする必要がなくなります。

#これは、親 ID を 0 としてクエリを開始し、次に親 ID としてサブ列の ID をクエリし、その ID に属するサブ列をクエリするだけです

以上です。記事の全内容はこちらです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

ThinkPHP と Ajax のセカンダリ リンケージの実装ドロップダウン メニュー

##################################

以上がthinkPHPは連携メニューの機能を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。