分離自Discuz模板類和文法

來源:互聯網
上載者:User

模板原理:當模板沒被編譯成php檔案的時候 第一次讀模數板的時候系統會自動進行編譯然後再次開啟的時候系統就直接讀取php檔案了

主要功能說明

  1. 去掉了 Discuz 語言套件的功能
  2. 移植 Discuz 模板中所有的功能
  3. 添加了自動更新緩衝及生命週期功能

在模板中的使用方法跟Discuz的一樣,所以就不做多餘的說明了,使用前只需要做些簡單的設定就可以了

如果需要使用discuz的語言套件功能,只要去掉template.class.php第172行注釋,並在template.func.php中加上discuz原來的languagevar函數就可以了

Java代碼  
  1. //設定語言變數
      
  2. function languagevar($var) {  
  3.     return
     $GLOBALS[
    'language'
    ][$var] ? $GLOBALS[
    'language'
    ][$var] : “!$var!”;  
  4. }  
//設定語言變數function languagevar($var) {return $GLOBALS['language'][$var] ? $GLOBALS['language'][$var] : “!$var!”;}

Discuz! 的模板採用近似 PHP 運算式的文法
.

直接輸出變數: {$abc}或 {echo $abc}

輸出數組中某個變數:{$arr[0]}

在本模板中引用其他的模板: 如我們要包含頭部模板檔案(header.htm)可以這樣寫:{subtemplate header}

支援的元素如下:  * <!–{ … }–>

      邏輯元素包圍符,該符號用於包含條件和迴圈元素
  條件判斷
            <!--{if expr1}-->
              statement1
             <!--{elseif expr2}-->
              statement2
             <!--{else}-->
              statement3
             <!--{/if}-->
            這是一個典型的條件模板,當條件 expr1 為真時,顯示模板 statement1 內容,否則當 expr2
為真時,顯示模板 statement2 內容,否則顯示模板 statement3 的內容。如同其他語言中的條件控制一樣,其中
<!–{elseif expr}–> 和 <!–{else} –> 是非必須的。

  不帶下標變數的數組迴圈
            <!--{loop $array $value}-->
              statement
             <!--{/loop}-->
            相當於 PHP 的數組迴圈語句:
            foreach($array as $value) {
              statement
             }

  帶下標變數的數組迴圈
            <!--{loop $array $key $value}-->
              statement
             <!--{/loop}-->
            相當於 PHP 的數組迴圈語句:
            foreach($array as $key => $value) {
              statement
             }

            邏輯元素包圍符在 { } 外麵包含了 html 的注釋符號 <!–
–>,除了為了和資訊元素相區別外,也方便了使用 Dreamweaver 和 Frontpage
之類工具編輯模板的使用者。因邏輯元素會被識別為 html
的注釋而不被顯示,對於絕大多數使用者,邏輯元素中的內容是完全不需要修改的,甚至修改錯一個字元就可能引起錯誤資訊和整個系統無法運行。因此通常您在修改
模板的時候,不要修改模板的邏輯資訊,更不要將邏輯資訊內部元素(如 <!–{else}–>
等)的前後位置作以修改,否則可能會導致錯誤。如果您的模板被不慎修改損壞,請立即用原標準預設範本覆蓋,即可恢複。

            對於高手而言,實際上外部的 <!– –> 是可以省略不寫的,可以用於某些元素在模板中的定位,但強烈建議普通使用者不要輕易嘗試。
    * { … }
      資訊元素包圍符
          o {CONSTANT}
            可以引用介面替換變數,其中必須為大寫字母,該符號實際的作用是引用 PHP 常量 CONSTANT,因此也可以通過它來引用其他的常量內容。
          o {lang variable}
            可 以在模板中引用語言變數 variable 的內容,語言變數經由 templates.php.lang 中數組
$language 定義。如 {lang post_edit} 的內容在編譯模板的時候被替換為 $language['post_edit']
的內容,簡體中文版的意思是“編輯文章”。
          o {template name}
            模板嵌入符,為了避免模板的冗長,可以使用本符號來將 name 模板的內容嵌入本模板中(實際上為引用)。

{subtemplate header}    //這種是靜態引入, 即把header的代碼直接載入在當前的快取檔案上。

{template header}       //這種是動態引入, 會通過include來引入。
          o {eval statement}
            eval
標籤主要是用來在模板中執行php
文法,在eval
後必須緊跟合法的PHP
文法。推薦只在特別必須的時候才使用該結構,因為它會破壞模板的結構和可讀性。如 {eval echo ‘template!’;} 實現的功能為 echo ‘template’;

          o {LF}

            分行符號,因為 Discuz! 模板引擎會忽略掉多餘的換行(/n),這個符號用來成生需要的 /n。

我 們所推薦的模板修改方法:通過普通編輯器手工書寫 html 或通過 Dreamweaver 或 Frontpage
修改。但是修改需切記,同一邏輯元素內或嵌套中元素的位置和內容切勿修改,即通常情況下,您不能把 <!–{}–>
包圍的內容單獨的移動,更不能刪除。但是整個最外部邏輯結構是可以移動或刪除的。

如果修改後模板所在頁面在輸出類似如下的錯誤資訊 Parse error: parse error, unexpected ‘}’ in
/home/username/forums/forumdata/templates/1_login.tpl.php on line
6,說明模板中出現了無法匹配,或格式錯誤的邏輯元素,請仔細檢查是否有元素不對應,沒有結束或嵌套損壞,格式錯誤的現象,必要時可以恢複原始模板來解決
問題。

Discuz! 提供了方便的介面打包程式,前面已對其格式做了介紹,將匯出資訊的內容粘貼到 系統設定 中 風格方案 中的
匯入介面方案中,執行即可。程式會自動解析資料內容,恢複相關的介面設定,自訂替換變數和所需的模板設定。如果被匯出介面使用了非預設範本,必須將
./templates 目錄屬性設定為 777,以便匯入程式自動建立模板記錄和檔案夾。

定義變數說明

<?exit?>
<!–{eval $i=2}–>
<!–{if $i==1}–>
123
<!–{/if}–>

<!–{block name=”spaceblog”
parameter=”notype/1/order/i.dateline,i.lastpost/limit/0,14/cachetime/900
/cachename/newti/tpl/data”}–><!–最新日誌以上是調用資料庫中的資料
–>
<!–{eval $i=0;}–>
<!–{loop $_SBLOCK['newti'] $value}–>
<!–{if $i % 2 == 0}–>//如果i除以2的餘數等於0
<div class=”listbg”><!–{else}–>
<div class=”listbg2″><!–{/if}–>
· [<span class="listA">$value[typename]</span>]<a
class=”listA” href=”$value[url]” title=”$value[subjectall]” target=”_blank”>$value[subject]</a></div>
<!–{eval $i++;}–>
<!–{/loop}–>

<!–{eval for ($i=1; $i<=5; $i++){ }–>

<!–{eval echo “Hello World!<br />”;}–>
<!–{eval}}–>

 

 

轉自:http://hudeyong926.iteye.com/blog/899385

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.