Các hàm, cú pháp cần phải nhớ trong Xenforo

nttruong

MasterCorporal
Tham gia
25/02/2015
Bài viết
368
Được Like
614
Hôm nay, bỗng nhiên quên mất là phải mở lớp Xenforo:). Sáng đành phải ngồi vậy tìm ý tưởng để hướng dẫn các bạn từ cơ bản nhất!

Đầu tiên, để vận hành và sử dụng Xenforo 1 cách căn bản nhất. Các bạn phải thuộc nằm lòng (nhớ cũng được, miễn sao là phải hiểu) các hàm, cú pháp và câu lệnh trong Xenforo. Từ đó các bạn mới có thể tùy biến, gọi các thành phần các bạn muốn hiện ra ở bất cứ nơi nào các bạn muốn! Bài viết này , lúc trước mình cũng đã từng tham khảo trên vxf, vì vậy content mình cũng xin lấy từ bên đó để chia sẽ với các bạn!

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ụ

Mã:
$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)
 

nttruong

MasterCorporal
Tham gia
25/02/2015
Bài viết
368
Được Like
614
Bài tham khảo nhé!

Những điều cần biết khi bắt đầu đọc bài viết:
- 1 template là gì?
Để dễ hiểu thì xin mời bạn làm việc sau
Vào admin.php?templates/ ở ô Filter Item gõ vào forum_list
Ấn vào forum_list sau đó Ctrl A để chọn tất cả rồi Ctrl X để cắt hết chúng đi, trang của chúng ta sẽ không có gì nữa. Ấn Lưu lại và ra /index.php?forum (trang diễn đàn) của bạn
Tất nhiên trang của bạn sẽ chỉ còn mỗi phần đầu (header) và đuôi (footer) mà phần thân không có gì. Là vì bạn vừa xóa trắngforum_list
Vậy hiểu ngắn gọn, template là cái khung hiển thị mọi thứ lên trang theo cách mà admin chỉnh sửa. Admin mà xóa trắng nó đi thì bên ngoài cũng chỉ có trắng thôi. ^^!
Và forum_list ở đây được gọi là một template.

Tiếp theo bạn lại quay về trang sửa template vừa rồi, Ctrl V để paste lại đoạn code vừa cắt và tìm một vị trí bất kì ví dụ như dòng đầu tiên của template đó thêm vào dòng chữ.
Xin chào tôi là Kid
Sau đó ấn Lưu lại và lại F5 trang diễn đàn của bạn sẽ thấy nội dung Xin chào tôi là Kid hiện lên.

Không định nghĩa nào chính xác hơn thực nghiệm. Vì vậy trò nhỏ nhỏ vừa rồi bạn đã biết đâu là template, template ở đâu và sửa nó thì có tác dụng gì.

Mình biết có bạn đọc tới đây sẽ hỏi tại sao lại biết trang chủ sử dụng template tên là forum_list để mà sửa?
Xin trả lời: Các tên template đều có ý nghĩa gợi nhớ và có quy tắc đặt nhất định.
Các bạn thấy đó, mỗi template được đặt tên đều mang tính gợi nhớ. Trang chủ là trang hiển thị các forum (chúng ta thường gọi nó là box) vì vậy trang chủ là danh sách các box và có tên template được đặt là forum_list

Tương tự như vậy, để sửa nội dung của trang xem (view) chủ đề (thread) các bạn hãy tìm đến template tên là thread_view

2. UserID
ID là số thứ tự của mỗi thành viên bắt đầu từ 1. Thành viên đầu tiên bao giờ cũng là Admin có ID =1 và cứ tăng dần theo thứ tự đăng kí. Đây là giá trị được dùng nhiều nhất và là cái mấu chốt quan trọng nhất của mọi vấn đề.

Xenforo có tính tùy biến rất cao. Đối với quan niệm các bạn thường nghĩ thì giao diện chỉ gồm HTML và CSS nhưng thực chất thiết kế giao diện cụ thể là thiết kế giao diện của Xenforo còn có thể làm những nhiệm vụ như một trang PHP đơn giản dựa trên nền tảng vững chắc mà Xenforo đã có từ trước.

Thật vậy
I. Ví dụ đầu tiên mình sẽ đưa ra cho các bạn thấy việc sử dụng câu lệnh điều kiện trong template Xenforo
Ý tưởng mà bạn muốn thực hiện:
- Nếu đã đăng nhập thì hiện chữ Xin chào bạn ABC
(Trong đó ABC là tên người đã đăng nhập)
- Nếu chưa đăng nhập thì hiện chữ Xin chào khách

Phương pháp:
Kiểm tra xem nếu tồn lại ID thì có nghĩa là người ấy đã đăng nhập, nếu không sẽ là khách.

Thực hiện:
Mở template forum_list
Thêm vào dòng đầu tiên đoạn code

Mã:
<xen:if is="{$visitor.user_id}">Xin chào {$visitor.username}
<xen:else/>Bạn là khách</xen:if>

Giải thích:
Trong đời thường bạn dùng nếu ... thì... Trong lập trình bạn dùng if thì trong Xenforo chúng ta dùng

Mã:
<xen:if is="điều kiện"> // Nếu thỏa mãn điều kiện
...các dòng lệnh // Thì thực hiện các dòng lệnh
</xen:if> // Kết thúc

Giải thích code ở ví dụ:

Mã:
<xen:if is="{$visitor.user_id}"> // Nếu tồn tại user_id của visitorXin chào {$visitor.username} // Thì hiển thị xin chào Tên người ấy<xen:else/> // xen:else tức là : ngược lại thìBạn là khách // Hiện lên chào khách</xen:if>// Kết thúc

Mở rộng:

Như các bạn thấy ở trên mình sử dụng {$visitor.user_id} và {$visitor.username}
Vậy 2 giá trị này từ đâu mà có?
Thực chất $visitor[] là một mảng bao gồm các phần tử
$visitor['user_id'] , $visitor['username'] và tất cả các giá trị khác liên quan đến thông tin thành viên. Nó đc lấy ra từ bảng xf_user trong cơ sở dữ liệu

Để hiểu thêm bạn vui lòng mở phpMyadmin và mở table xf_user để biết
ctber.net-a.jpg

Xenforo đã làm giúp chúng ta phần việc quan trọng nhất đó là lấy toàn bộ thông tin của thành viên để đưa vào mảng $visitor[] và cách sử dụng thì như bạn thấy ở trên:

{$visitor.user_id}
{$visitor.username}

Nếu như trong PHP bạn dùng $visitor['username'] thì với template xenforo chỉ cần dùng dấu chấm. $visitor.username

Quẩn quanh với 2 cái $visitor.username và $visitor.user_id nhưng kèm cái hình bên trên chắc bạn cũng hiểu rồi nhỉ? Nếu bạn muốn timezone của người ta hiện lên thì làm sao?

Đơn giản với bạn đúng ko? Sẽ là {$visitor.timezone}
Và vậy muốn hiện số like của người ta đang có thì sao? {$visitor.like_count} chính là điều bạn cần ^^!

Như vậy là mình đã giải thích xong cách hiện toàn bộ thông tin người đang truy cập và hiển thị ở một template bất kì nào đó.

Code tổng kết

Mã:
<xen:if is="{$visitor.user_id}">Xin chào {$visitor.username}<br/>Bạn đang có {$visitor.like_count} like(s) và<xen:if is="{$visitor.alerts_unread}==0">không có thông báo nào<xen:else/>có tới {$visitor.alerts_unread} thông báo chưa đọc</xen:if>

<xen:if is="{$visitor.visible}<1">À bạn ơi, bạn cứ đăng nhập ẩn thế mọi người nhớ bạn lắm, bật nick sáng lên nào bạn trẻ</xen:if>

<xen:else/>Bạn là khách</xen:if>

Nếu là thành viên thì hiện thông báo chào, sau đó hiện ra số like của người ấy
Nếu trạng thái đăng nhập ẩn sẽ hiện lời khuyên À bạn ơi, bạn cứ đăng nhập ẩn thế mọi người nhớ bạn lắm, bật nick sáng lên nào bạn trẻ
Nếu số thông báo chưa đọc là 0 thì hiện ra Bạn đang có x like và không có thông báo nào
Ngược lại thì hiện : Bạn có tới ... thông báo chưa đọc
 

zmanly

Gefreiter
Tham gia
15/10/2015
Bài viết
60
Được Like
41
Hỏi ngu tí
Mở phpMyadmin ở chỗ nào vậy bạn ?
 

ptvinhdtk

MasterCorporal
Tham gia
21/07/2015
Bài viết
202
Được Like
122
Trong xen muốn đưa template của addon nào đó ra ngoài PAGE_CONTAINER dùng cách nào?
Mình dùng hàm <xen:include template="ten_addon_template"></xen:include> nhưng nó không hiểu và hiện biến thì phải, chắc phải thêm mắm muối gì đó nữa. ai biết chỉ giáo
 

Top Bottom