<?php
PHP中使用template()函數顯示已存在模闆
在Discuz!程式執行中可以通過 include template('模闆檔案夾/模闆名稱無字尾');的方式進行解析,前提是您使用的Discuz!程式已經包含了 ./source/function/function_core.php 的函數庫
PHP格式的模闆
[X2.5新增内容]
從 Discuz! X2.5 開始,模闆檔案支援 PHP 擴充名的格式,你可以建立例如 ./template/mytext/common/forum/discuz.php 檔案,PHP 的模闆檔案中你隻需在原有 HTM 的模闆檔案開頭添加一行代碼即可,如:
<?php exit;?>
<?php echo '你不能看此模闆的内容';exit;?>
PHP 的模闆檔案的模闆資料内容将從檔案的第二行開始解析。PHP 和 HTM 模闆檔案同時存在時,會優先解析 PHP 模闆檔案
模闆文法
變量輸出
輸出一個變量的值,等同于php的 <?php echo $my_var;?>,花括号可以省略但不建議去掉。
{$my_var}
條件判斷
通過if判斷流程分支
如果寫在HTML表單元素中,可以省去使代碼更清晰易讀,如{if $my_var}xxx{/if}
<!--{if $my_var}-->
任意html語句
<!--{/if}-->
帶有多條件的if寫法,可使用PHP正常判斷中的按位運算符等
<!--{if $my_var && ($my_var2 & 1 || $my_var3 == 3)}-->
任意html語句
<!--{/if}-->
帶有分支條件的if寫法
<!--{if $my_var == 1}-->
變量為1
<!--{elseif $my_var == 2}-->
變量為2
<!--{else}-->
其他情況
<!--{/if}-->
循環輸出
帶有數組鍵的循環寫法
<!--{loop $my_arr $key $val}-->
循環輸出的HTML語句
<!--{/loop}-->
沒有數組鍵的循環寫法
<!--{loop $my_arr $val}-->
模闆嵌套
将被嵌套模闆内容解析為PHP語句并合并入本模闆中的寫法
common/header 對應某個模闆套系中的common目錄的header.htm模闆檔案
<!--{subtemplate common/header}-->
程式運作時include嵌套模闆内容
<!--{template common/header}-->
插件鈎子
在模闆中設立插件鈎子 插件模闆和語言包的設計
hook為關鍵詞,意為将index_top定義為鈎子
<!--{hook/index_top}-->
變量數組嵌套使用
條件判斷或變量輸出時用到
<!--{if $my_arr[$my_var]}-->
<!--{if $my_arr[0]}-->
<!--{if $my_arr[$my_arr2[$my_var]]}-->
PHP解析
在模闆中使用PHP語句可以通過{eval}進行
<!--{eval $my_var = 1;}-->
<!--{eval echo $my_var;}-->
<!--{eval $my_arr = array(1, 2, 3);}-->
<!--{eval print_r($my_arr);}-->
<!--{eval output();}-->
<!--{eval exit();}-->
多行PHP解析(Discuz! X3 新增)
<!--{eval}-->
...PHP語句...
<!--{/eval}-->
語言包使用
在模闆中可以通過下面的代碼來使用語言包中的某個值
{lang index_yesterday}
其中語言包在 ./source/language/目錄下,以PHP數組形式存放
插件模闆和語言包的設計
請參見:插件模闆和語言包的設計
綜合示例
綜合示例題目1:php程式中建立一個數組并在模闆中循環,并且根據模闆顯示奇數行輸出不同的CSS樣式
PHP端代碼:
此PHP代碼省略了包含 class_core.php 以及初始化$_G變量,詳細請檢視:
<?php
/*此處省略include class_core.php*/
$my_arr = array('one', 'two', 'three', 'four');
include template('forum/mytest'); //使用自定義模闆套系中的forum目錄的mytest.htm
?>
模闆代碼:
<!--{loop $my_arr $key $val}-->
<div {if $key % 2 == 1}style="background: #ccc;"{/if}>
這裡是value值:{$val}
</div>
<!--{/loop}-->
綜合示例題目2:結合風格常量與javascript,動态改變模闆頁面的字型大小,并引用預設模闆的header和footer
預設風格中,小号字型大小 {SMFONTSIZE}為0.83em,主題清單字型大小 {THREADTITLEFONTSIZE}為14px,在Disucz!X2中使用時,需要使用$_G['style']['SMFONTSIZE']和$_G['style']['THREADTITLEFONTSIZE']。
$('test1')此寫法是因為header中已經加載了common.js全局javascript腳本檔案,可以通過簡寫來達到document.getElementById('test1')的效果
./template/mytest/forum/mytest.htm模闆代碼如下
<!--{subtemplate common/header}-->
<div id="test1" style="font-size:{$_G['style']['FONTSIZE']};">
這是一個改變字型的執行個體
</div>
<span οnclick="changefontsize('{$_G['style']['SMFONTSIZE']}');">改變小号字</span><span οnclick="changefontsize('{$_G['style']['THREADTITLEFONTSIZE']}');">改變為大号字</span>
<script type="text/javascript">
function changefontsize(size) {
$('test1').style.fontSize = size;
}
</script>
<!--{subtemplate common/footer}-->
?>