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

phpcms 自定義模組實現分頁功能的實戰技巧

     編輯:PHP 相關知識

phpcms 自定義模組實現分頁功能的實戰技巧

在 phpcms 二次開發中,自定義模組若需在前台模板標籤中實現分頁,常會遇到 page 參數無法正常傳遞的問題。本文分享一個實際專案中遇到的「論壇模組」分頁解決方案,雖然寫法略顯笨拙,但能有效解決問題,供參考。

問題背景

模組目錄名稱為 luntan,列表頁需顯示所有帖子並分頁。按照 phpcms 預設標籤寫法:

{pc:luntan action="get_send" num="2" page="$_GET[page]"}

然而在模組類別中接收到的 $data['page'] 卻為 NULL,導致無法正確分頁。經研究發現,標籤解析機制對自定義模組的分頁參數處理有別於核心模組。

解決方案:雙方法分離

採用「資料獲取」與「分頁輸出」分離的策略,在模組類別中定義兩個公開方法:

1. 獲取資料列表 get_send()

public function get_send($data) {
    $page = empty($_GET['page']) ? 1 : intval($_GET['page']);
    $send_info = $this->luntan_send->listinfo($where = '', $order = '', $page, $pagesize = 20);
    // $pages_send = $this->luntan_send->pages; // 暫時註解,避免輸出干擾

    for ($i = 0; $i < count($send_info); $i++) {
        // 關聯查詢分類名稱
        $type_info = $this->luntan_type->get_one(array('type_id' => $send_info[$i]['send_type_id']));
        $send_info[$i]['send_type_name'] = $type_info['type_name'];

        // 統計回覆數
        $reply_info = $this->luntan_reply->get_one(
            array('reply_send_id' => $send_info[$i]['send_id']),
            'count(*) as reply_send_num'
        );
        $send_info[$i]['send_reply_num'] = $reply_info['reply_send_num'];
    }
    // echo $pages_send; // 若解開註解,分頁會直接輸出在資料位置,無法控制顯示位置
    return $send_info;
}

2. 專門輸出分頁 get_send_page()

public function get_send_page($data) {
    $page = empty($_GET['page']) ? 1 : intval($_GET['page']);
    $send_info = $this->luntan_send->listinfo($where = '', $order = '', $page, $pagesize = 20);
    $pages_send = $this->luntan_send->pages;
    echo $pages_send; // 直接輸出分頁 HTML
    return $send_info; // 返回值此處不重要
}

模板調用方式

在模板中分別調用兩個標籤,將資料列表與分頁條分開放置:

// 資料列表
{pc:luntan action="get_send" num="20" page="$_GET[page]"}
    {loop $data $val}
        // 輸出帖子標題、分類、回覆數等
    {/loop}
{/pc}

// 分頁條(可放在頁面底部或側邊欄)
{pc:luntan action="get_send_page" num="20" page="$_GET[page]"}

關鍵點總結

  • 參數獲取:直接使用 $_GET['page'] 而非依賴 $data['page']。
  • 職責分離:get_send 僅負責資料組裝;get_send_page 僅負責輸出分頁 HTML。
  • 頁面大小同步:兩個方法中的 $pagesize = 20 必須保持一致,修改時需同步更新。
  • 分頁位置可控:分頁輸出不再綁定在資料標籤位置,版面佈局更靈活。

改進建議

若熟悉 phpcms 核心標籤解析機制,可嘗試擴展標籤類別(tag 目錄下),實現原生分頁支援,避免雙方法維護成本。但對於快速交付專案,上述方案屬於「能用、可維護」的務實選擇。

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