Cú pháp Template trong XenForo

Thảo luận trong 'Development Tutorials' bắt đầu bởi VXF, 7/6/12.

1votes
5/5, 1 vote

  1. VXF

    VXF Be like no other .. Staff Member

    Bài viết:
    1,277
    Likes :
    2,172
    Giờ mới làm xong việc, tiện vẫn chưa buồn ngủ. Tranh thủ ngồi viết lách tí :D.

    Bài viết sẽ hướng dẫn các bạn về cú pháp template của XenForo. Đọc xong bài viết này các bạn sẽ hiểu một cách cơ bản về cú pháp template của xenforo.

    Nếu các bạn hay vọc vào template của xenforo để ý thì có thể thấy rằng tất cả các template function của xenforo đều bắt đầu bằng xen:. Ví dụ: {xen:link}

    1. Biến trong XenForo template.
    - Trước khi vào tìm hiểu các hàm trong template của xenforo. Mình sẽ nói qua về khái niệm biến. Biến là đại lượng được đặt tên, dùng để lưu giữ giá trị và giá trị có thể thay đổi trong quá trình thực hiện chương trình.
    - Cú pháp: {$<ten-bien>} hoặc {$<ten-mang>.<phan-tu>}
    - Quy tắc đặt tên biến
    + Ký tự bắt đầu phải là một chữ cái, còn các ký tự tiếp theo có thể là chữ số, gạch dưới, chữ cái. Ngoài mấy thứ kể trên ra, bạn không nên thêm bết cứ thứ gì khác vào tên biến!
    + Không được có khoản trắng
    + Các biến phân biệt chữ hoa chữ thừơng, vì thế ANH sẽ khác với Anh cũng như anh, để tránh rắc rối, ta nên dùng chữ thường cho tất cả tên biến và dùng dấu _ để phân cách thay cho khoảng trắng

    2. Hiển thị các cụm từ (phrase).
    - Để hiển thị 1 cụm từ (phrase) chúng ta sử dụng cú pháp
    Mã:
    {xen:phrase <phrase-varname>}
    - phrase-varname là tên biến. Ví dụ. Khi bạn vào ACP>>Appearance>>Phrases>>Create New Phrase. Tạo một cụm từ với nội dung (phrase text) là: "Chào mừng các bạn đến với vietxf.org" và varname (Title) là "welcome_vietxf". Và bạn sử dụng lệnh
    Mã:
    {xen:phrase welcome_vietxf}
    trong template. Thì khi xem trên website các bạn sẽ thấy dòng chữ: "Chào mừng các bạn đến với vietxf.org"

    3. "<xen:require />"
    - Hàm này có các thuộc tính sau: <type> = "<location>"
    - <xen:require /> có chức năng tương tự như hàm require_once(<location>); trong PHP. Có nghĩa là nó cho phép chúng ta chèn code từ một template khác.
    - Các kiểu dữ liệu chúng ta có thể dùng: css/js.
    - Tất cả các hàm <xen:require phải được kết thúc bằng />
    - Ví dụ:
    Mã:
    <xen:require css="vietxf_org.css" />
    4. "<xen:include />"
    - Hàm này có các thuộc tính tương tự như hàm require ở trên. Nhưng nó chỉ cho phép chèn một template và location là tên của template.
    - Sự khác biệt lớn nhất giữ require và include là include có thể cho phép bạn khai báo template variable (biến).
    - Ví dụ:
    Mã:
    <xen:include template="vietxfdotorg">
      <xen:set var="$TemplateVar">TemplateVarValue</xen:set>
    </xen:include>
    - Tất cả các hàm <xen:include cần phải được kết thúc bằng /> hoặc ></xen:include>

    5. "<xen:set></xen:set>"
    - Hàm này cho phép chúng ta khai báo biến trong một template.
    - Cách sử dụng: <xen:set var="$<tenbien>"><giatricuabien></xen:set>
    - Cách đặt tên biến giống như cách đặt tên biến ở PHP. Ví dụ
    PHP:
    $varname not good
    $_VarName 
    good
    - Tất cả các hàm <xen:set> cần phải được kết thúc bằng </xen:set>

    6. "<xen:if>{<xen:else />}</xen:if>"
    - Cú pháp:
    Mã:
    <xen:if <type>=”<condition>”>
    true statments
      {
      <xen:else />
    false statments
      }
      </xen:if>
    - <xen:else /> là tuỳ chọn (có thể có, có thể không)
    - Ví dụ:
    Mã:
    <xen:if is=”{$variable)”>
      Biến “variable” tồn tại
      <xen:else />
      Biến “variable" không tồn tại
      </xen:if>
    - Bạn có thể tạo ra một biểu thức điểu kiện kép bằng cách sử dụng toán tử 'OR' và 'AND'
    - Để kiểm tra một biến, chúng ta có thể sử dụng "{$variable} <toán tử> '<giá trị>'".
    + Toán tử bao gồm: !=, <=, <, >, >=, <>.
    + Giá trị có thể là số hoặc chuối.
    - Trong trường hợp có nhiều lệnh If lồng nhau thì else sẽ gắn liền với if gần nhất.

    7. "<xen:foreach></xen:foreach>"
    - Hàm <xen:foreach> có chức năng tương tự như vòng lặp ở trong PHP.
    - Các thuộc tích của nó bao gồm "loop" và "value".
    - Ví dụ:
    Mã:
    <xen:foreach loop="$foo" value="$item">
    statement block
    </xen:foreach>
    8. "<xen:title></xen:title>"
    - Hàm <xen:title> có chức năng xác định "Tiêu đề" của trang.
    - Cách sử dụng:
    Mã:
    <xen:title>Your title</xen:title>
    9. "{$visitor.csrf_token_page}"
    Ngoài ra, có một chú ý cho các bạn khi tạo một template có chứa form. Xenforo có hỗ trợ một security token để chống lại các tấn công CSRF(Cross site request forgery). Để sử dụng security token {$visitor.csrf_token_page} trong form của bạn thêm dòng sau:
    Mã:
    <input type="hidden" name="_xfToken" value="{$visitor.csrf_token_page}" />
    - Cross site request forgery là gì?
    Nó là phương pháp mượn tay người để thực hiện một hành động không cho phép. Ví dụ, để có thể xóa một bài viết trên diễn đàn, một member có thể mượn tay của một moderator để làm việc đó vì member không đủ chủ quyền nhưng moderator lại đủ chủ quyền để thực hiện hành động này. (theo conmale)
    Done! Tuts by Alucar (VietXF.OrG)
     
    Đang tải...
  2. VXF

    VXF Be like no other .. Staff Member

    Bài viết:
    1,277
    Likes :
    2,172
    English version. Xenforo Template Syntax
    -------------------------------------------------------
    The XenForo template system is very unique. This guide was written for you to get basic knowledge of the template syntax.
    Lets start shall we?

    Every xenForo template function starts with xen: For example: {xen:link}

    1. The variables in XenForo templates
    In order to output the value of an variable we use
    Mã:
    {$<varname>}
    If the variable is an 1-D array we use
    Mã:
    {$<arrayname>.<arrayitem>}
    in order to output the array item.

    2. Displaying phrases
    In order to output an phrase we are using the
    Mã:
    {xen:phrase <phrasevarname>}
    The phrasevarname is the variable name of the phrase. For example:
    I've just created a phrase that is text is: “Welcome to VietXF.Org!” and is varname is “hello_world”, In order to output him I will use
    Mã:
    {xen:phrase hello_world}
    3. "<xen:require />"
    This function as the following attributes: <type>=”<location>”.
    This function is the same function as “require_once(<location>);” in PHP.
    The type can be: css/js (in lowercase). And the <location> at CSS type is the CSS template name.
    Every require must end with “/>”.

    4. "<xen:include />"
    This function as the same attributes of the require function.
    But, the type can be only “template” and the location is the template name.
    The big difference between require and include is that in include you can and may declare the template variable!
    HTML:
    <xen:include template=”myTemplate”><xen:setvar=”$myTemplateVar”>myTemplateVarValue</xen:set>
    </xen:include>
    Every <xen:include must end with “/>” or “></xen:include>”

    5. "<xen:set></xen:set>"
    The function is the function we use to declare a variable in a template.
    Usage is: <xen:set var=”$<varname>”><varvalue></xen:set>.
    The variable name must apply to the conditions of the php variable name.
    Mã:
    $varname = not good!
      $_VarName    = good :)
    Every “<xen:set>” must end with “</xen:set>”

    6. "<xen:if>{<xen:else />}</xen:if>"
    The “<xen:else />” property is only optional.
    The “<xen:if>” syntax is:
    Mã:
    <xen:if <type>=”<condition>”>
    true statments
      {
      <xen:else />
    false statments
      }
      </xen:if>
    Brackets mean optional code.
    The type can be: hasconent(I will explain later) and is.
    The usage of is:
    Mã:
    <xen:ifis=”{$variable)”>
      the variable “variable” isexist
      <xen:else />
      The variable “variabledoesn't exist
      </xen:if>
    You can get a condition of multiple check with “OR” and “AND” operators, To check a value of the variable we use “{$variable} <operator> '<value>'”, operator can be: ==, !=, <=, <. >=. >, <>. value can be numeric and string.

    7. "<xen:foreach></xen:foreach>"
    The “<xen:foreach>” is the equivalent of the foreach loop in PHP. Her attributes are:
    loop, and value. Loop is the similar as “$foo” in the php foreach and the value is the item in the php foreach. Example:
    Mã:
    <xen:foreach loop="$foo"value="$item">
    statmentblock
    </xen:foreach>
    is the same as
    PHP:
    foreach( $foo as $item ) {
    statment    block
    }
    8. "<xen:title></xen:title>"
    The “<xen:title>” function determine the “Title” of the page. By saying title I mean:
    The thing is yellow marked is the “title” to set your own title you can use:
    Mã:
    <xen:title>My new title</xen:title>
    9. The security token
    XF programers created an automaticly secuirity token to handle “CSRF” attacks. To use this “security token” in your template use the next expression:
    Mã:
    {$visitor.csrf_token_page}
    If you are creating your own form you must add the next line to avoid errors:
    HTML:
    <input type="hidden" name="_xfToken" value="{$visitor.csrf_token_page}" />
    I hope that everything is clear, if not your are always welcome to contact me in a conversation or in my profile page.
     
  3. Logi

    Logi Well-Known Member

    Bài viết:
    1,087
    Likes :
    456
    Thanks bài viết rất hữu ích
     
    vanda thích bài này.
  4. closeup

    closeup New Member

    Bài viết:
    52
    Likes :
    3
    hay quá admin ơi, để bookmark thi xong về nghiên cứu
     
  5. maianhden

    maianhden Active Member

    Bài viết:
    244
    Likes :
    115
    Em xin bổ sung thêm cú pháp link đăng ký và đăng nhập trong xenforo
    {xen:link 'register'}
    {xen:link 'login/login'}
     
  6. Thái Sơn Nguyễn

    Thái Sơn Nguyễn Member

    Bài viết:
    154
    Likes :
    56
    Anh em cho mình hỏi biến của KHÁCH là gì vậy?
     
  7. hieucocc

    hieucocc Active Member

    Bài viết:
    408
    Likes :
    223
    Là sao bạn, để xác định visitor là khách hả?
     
  8. Thái Sơn Nguyễn

    Thái Sơn Nguyễn Member

    Bài viết:
    154
    Likes :
    56
    Mình tìm thấy rồi :) $visitor.user_id
     
  9. Kid

    Kid Administrator

    Bài viết:
    863
    Likes :
    947
    Anh cho em hỏi, em có thể dùng
    <xen:include template="abcd"/>
    để lấy nội dung của template abcd nhưng đối với một số template ví dụ
    <xen:include template="news_feed"/>
    thì chỉ ra trang trắng

    Em đọc tempate news_feed thì thấy là
    Mã:
    <xen:require css="events.css" />
    <xen:require css="news_feed.css" />
    <xen:require js="js/xenforo/news_feed.js" />
     
    <xen:if is="{$newsFeed}">
        <ol class="eventList">
            <xen:foreach loop="$newsFeed" value="$item">     
                <xen:include template="news_feed_item">
                    <xen:set var="$itemTemplate">{xen:raw $item.template}</xen:set>
                    <xen:set var="$itemDate">{$item.event_date}</xen:set>
                </xen:include>
            </xen:foreach>
        </ol>
    <xen:else />
        {xen:raw $noContentHtml}
    </xen:if>
    Mà vẫn ko include đc làm ntn để có thể include template này ạ
     
  10. killall

    killall New Member

    Bài viết:
    43
    Likes :
    5
    hú hù. không biết còn bao nhiêu biến nữa :)
     
  11. nttruong

    nttruong Well-Known Member

    Bài viết:
    1,518
    Likes :
    776
    Cho mình hỏi biến thế nào thì sẽ ra được là 'AND'? Cảm ơn!
     
  12. Mr.iCoder

    Mr.iCoder VIP Member

    Bài viết:
    523
    Likes :
    497
    Em thấy mấy cái này ngồi mày mò tự nhớ sẽ dễ hơn đọc bài hướng dẫn đó anh. Xenforo hay các mã nguồn khác. Nhiều lúc đọc bài hướng dẫn sẽ khó nhớ và khó hiểu hơn là tự mày mò và tự nhớ. Đó là cách của em ko biết các bác khác thì sao :D
     
    nttruong thích bài này.
  13. nttruong

    nttruong Well-Known Member

    Bài viết:
    1,518
    Likes :
    776
    Mới được Ku Hieu hướng dẫn! Cảm ơn các bạn! Ý tưởng mình là mỗi forum_view sẽ thể hiện một thread_list khác nhau nên cần tìm hiểu biến này!
     
    Mr.iCoder thích bài này.
  14. Dyn

    Dyn Member

    Bài viết:
    342
    Likes :
    68
    cho hỏi là muốn gọi title của bài viết thì làm thế nào?
     
    Fox Of Dark thích bài này.
  15. thong100

    thong100 Member

    Bài viết:
    77
    Likes :
    11
    Cao nhân xem giúp câu lệnh sau:
    <xen:if is="{$i} != 1">

    <xen:elseif is="{$i} != 2"/>

    <xen:else/>

    </xen:if>
    Sau khi thêm vào yếu tố để định dạng CSS thì kết quả trả về ở trình duyệt yếu tố này bị đảo như sau:
    <xen:if is="{$i} != 1">
    <div class= "type1" >...</div>
    <xen:elseif is="{$i} != 2"/>
    <div class= "type2" >...</div>
    <xen:else/>
    <div class= "type3 ">...</div>
    </xen:if>
    Kết quả trả về trên trình duyệt là:
    <div class= "type1" > biến thành <div class= "type3 ">
    <div class= "type2 ">biến thành <div class= "type1 ">
    <div class= "type3 ">biến thành <div class= "type1" >
    Kết quả là không thể nào định dạng được CSS. Bó tay help me. Thanks!

    Trong trường hợp thêm biến {$i} vào div như sau: <div class= "type {$i}" >...</div> thi kết quả view trên trinh duyệt dĩ nhiên đúng là 1.2.3.4.5... Tuy nhiên cũng không định dạng được CSS không tham chiếu tới được hay là CSS không hiểu được.
     
  16. vanhoa8989

    vanhoa8989 New Member

    Bài viết:
    2
    Likes :
    0
    <xen:require js="js/xenforo/news_feed.js" />
    cái này bạn biết trong core php nó nằm chỗ nào ko?
    Ý mình hỏi cái hàm <xen:require js .../> nó chạy như thế nào ấy.
     
  17. Bcat9505

    Bcat9505 Moderator Staff Member

    Bài viết:
    1,335
    Likes :
    494
    <xen:set var="$True">1</xen:set>
    <xen:set var="$False">0</xen:set>

    Làm sao để cộng or trừ trong xenforo vậy admin?
    {$True}++
    hay là sao a?
     
  18. luckybidan

    luckybidan New Member

    Bài viết:
    10
    Likes :
    2
    Để viết hàm And để hiển thị kèm trong các Forum mình muốn hiển thị tại Conditional thì làm thế nào nhỉ? em muốn cho hiện trong các forum có id: 31, 57, 58

    với mã đang dán trong Conditional của widget :
    {$forum.node_id}=='31' hiển thị tốt, nhưng thêm thao dạng {$forum.node_id}=='31, 57, 58' không được
    mà theo kiểu
    {$forum.node_id}=='31'
    {$forum.node_id}=='57'
    {$forum.node_id}=='58'
    cũng không được, loay hoay mãi không biết viết hàm sao !!!
    BÁC NÀO RÀNH CHỈ EM VỚI Ạ !!! ???
     
    thanhdv193 thích bài này.
  19. 4uandme

    4uandme New Member

    Bài viết:
    13
    Likes :
    1
    cộng trừ thì dùng cái này nhé các bạn
    <xen:calc '$abc+ số' />
     
  20. spc

    spc New Member

    Bài viết:
    8
    Likes :
    2
    Làm sao hiển thị Sidebar bên phải của tran chi tiết vậy các bác, mong cao nhân giúp đỡ!

    Trang chi tiết của mình không có sidebar bên phải:
    diendan.suaphancung.com/chu-de/laptop-dell-bi-liet-phim.12.html#post-54
     
comments powered by Disqus

Chia sẻ trang này

Đang tải...