本文記錄三個 ThinkPHP/OneThink 實戰問題的排查與解決:友言評論插件 UID 缺失、模板渲染 display() 進階用法、前台左側導航 Widget 動態生成機制。
開啟友言插件後,生成的 JS 代碼中 uid 為空:
<script type="text/javascript" src="https://v2.uyan.cc/code/uyan.js?uid="></script>
模板 \Addons\SocialComment\comment.html 中變量寫法錯誤:
{$addons.config.comment_uid_youyan} <-- 錯誤
ThinkPHP 模板中陣列變量需用下劃線:
{$addons_config.comment_uid_youyan} <-- 正確
將模板中的 $addons.config 統一改為 $addons_config。
display() 進階用法$this->display('[模板文件]'[, '字符編碼'[, '輸出類型']]);
// 調用 Member 模塊下的 read 模板
$this->display('Member:read');
關鍵點: 此處的「模塊:操作」僅對應目錄結構 View/Member/read.html,不要求存在實際控制器/方法。
\Application\Home\View\default\Public\body.html:
<div class="span3 bs-docs-sidebar">
<block name="publish"></block>
<ul class="nav nav-list bs-docs-sidenav">
{:W('Category/lists', array($category['id'], ACTION_NAME == 'index'))}
</ul>
</div>
\Application\Home\Widget\CategoryWidget.class.php 中的 lists() 方法根據分類 ID 與當前操作名(ACTION_NAME 常量)生成導航 HTML。
ACTION_NAME:當前操作名(如 index、lists、detail)MODULE_NAME、CONTROLLER_NAME 同理. 與 _,陣列鍵名含點號時必須用下劃線。display() 支援跨模塊模板復用,減少重複視圖文件。