首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHPCMS V9 二級導航實作邏輯與 arrchildid 判斷技巧

     編輯:PHP 綜合知識

前言

PHPCMS V9 使用 {pc:content action="category"} 取得欄目資料時,$r[arrchildid] 欄位行為常讓開發者困惑:無子欄目時回傳自身 ID 而非空值。本文解析此特性並提供正確的二級導航判斷邏輯與完整模板代碼。

一、arrchildid 行為分析

情況$r[arrchildid] 值說明
有子欄目"1,2,3,5" (字串,含自身及所有子孫 ID)以逗號分隔的 ID 列表
無子欄目(葉子節點)"5" (僅自身 ID)非空字串,直接判斷 if ($r[arrchildid]) 會誤判為有子欄目

二、正確判斷邏輯

// 錯誤寫法:無子欄目時也會進入
{if $r[arrchildid]} ... {/if}

// 正確寫法:比較 arrchildid 是否等於 catid
{if $r[arrchildid] != $r[catid]} 
  // 有子欄目,輸出下拉選單
{else}
  // 無子欄目,輸出單層連結
{/if}

三、完整二級導航模板代碼 (Bootstrap 3 風格)

<ul class="nav navbar-nav">
  <li class="active"><a href="{siteurl($siteid)}">首頁</a></li>
  {pc:content action="category" catid="0" num="10" siteid="$siteid" order="listorder ASC"}
  {loop $data $r}
  {if $r[arrchildid] != $r[catid]}
  <li class="dropdown">
    <a href="{$r[url]}" class="dropdown-toggle" data-toggle="dropdown">
      {$r[catname]} <b class="caret"></b>
    </a>
    <ul class="dropdown-menu">
      {pc:content action="category" catid="$r[catid]" num="10" siteid="$siteid" order="listorder ASC" return="data2"}
      {loop $data2 $v}
      <li><a href="{$v[url]}">{$v[catname]}</a></li>
      {/loop}
      {/pc}
    </ul>
  </li>
  {else}
  <li><a href="{$r[url]}">{$r[catname]}</a></li>
  {/if}
  {/loop}
  {/pc}
</ul>

四、進階擴充:三級以上導航

若需支援多層,建議改用遞迴模板或 PHP 函數生成巢狀陣列:

// 在模板中引入自訂函數
{php 
  function build_menu($catid, $level = 0) {
    $data = get_category_children($catid); // 自行封裝查詢
    if (!$data) return '';
    $html = '';
    foreach ($data as $r) {
      $has_child = ($r['arrchildid'] != $r['catid']);
      $html .= '';
      $html .= '';
      $html .= $r['catname'] . ($has_child ? ' ' : '') . '';
      if ($has_child) $html .= build_menu($r['catid'], $level + 1);
      $html .= '';
    }
    $html .= '';
    return $html;
  }
}
{echo build_menu(0)}

五、常見問題排查

  1. 子欄目不顯示:檢查 num 參數是否足夠、siteid 是否正確、子欄目是否「顯示在導航」。
  2. 當前欄目高亮:在循環中判斷 {if $r[catid]==$catid} class="active"{/if}。
  3. 快取導致更新不生效:模板標籤 cache="0" 或後台更新快取。
  4. 多站點混淆:確認 siteid="$siteid" 變數在模板中可用。

六、結語

掌握 arrchildid != catid 這一核心判斷,即可正確實作 PHPCMS V9 二級導航。配合 Bootstrap 下拉選單元件,幾行模板代碼即可完成專業級導航結構。若需三級以上,建議封裝 PHP 遞迴函數而非在模板中硬寫多層 {pc:content},效能與維護性更佳。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved