Discuz!模板解析語法


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樣式
  1. 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
?>
  1. 模板代碼:
    <!--{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 onclick="changefontsize('{$_G['style']['SMFONTSIZE']}');">改變小號字</span><span onclick="changefontsize('{$_G['style']['THREADTITLEFONTSIZE']}');">改變為大號字</span>
<script type="text/javascript">
function changefontsize(size) {
    $('test1').style.fontSize = size;
}
</script>
<!--{subtemplate common/footer}-->


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM