Tutorial 2x Identifying and using variables in templates - Xác định và sử dụng các biến trong template XenForo 2

PVS

Cộng Sự Đặc Biệt
Thành viên BQT
Tham gia
28/02/2015
Bài viết
12,581
Được Like
8,108
Identifying and using variables in templates - Xác định và sử dụng các biến trong template XenForo 2

Biến là gì?

Nói một cách đơn giản, biến là tên chứa các giá trị.
Các giá trị này được lưu trữ trong cơ sở dữ liệu và được sử dụng trong các template để đánh giá và trình bày nội dung và dữ liệu.

Sử dụng các biến trong các template mở ra rất nhiều khả năng tùy chỉnh và sửa đổi giao diện và hành vi của cài đặt XF.

Hầu hết các bạn có lẽ đã biết về việc sử dụng các biến theo cách này hay cách khác, ví dụ: thông qua các câu lệnh điều kiện - <xf:if is="$xf.visitor.user_id"> , hoặc điều kiện hiển thị widget - $xf.reply.containerKey == 'node-1' .

Tuy nhiên, có nhiều cách sử dụng cho các biến, một khi bạn biết cách xác định và sử dụng chúng.

Hướng dẫn này nhằm giải thích cách thực hiện điều đó.

Kiểm tra các biến có sẵn trong template
Bước đầu tiên là kết xuất các biến trong template mà bạn muốn truy cập vào chúng.

Nếu bạn không biết tên của biến hoặc muốn kiểm tra tất cả các biến có sẵn cho một template cụ thể, điều đó được thực hiện bằng cách thêm code sau vào template:
HTML:
{{ dump(vars()) }}

Ví dụ: đối với template thread_view, bạn sẽ chỉnh sửa template như sau:
HTML:
{{ dump(vars()) }}

<xf:title page="{$page}">{{ prefix('thread', $thread, 'escaped') }}{$thread.title}</xf:title>
<xf:h1>{{ prefix('thread', $thread) }}{$thread.title}</xf:h1>

<xf:if is="!$thread.isSearchEngineIndexable()">
    <xf:head option="metaNoindex"><meta name="robots" content="noindex" /></xf:head>
</xf:if>

dump_vars.png

Xác định một biến cụ thể
Khi điều hướng đến một chủ đề, một block code sẽ xuất hiện ở đầu chủ đề, block này chứa tất cả các biến có sẵn cho template.

thread_view_vars.png

Nếu bạn quan tâm đến một biến cụ thể, bạn có thể đi sâu để xem cú pháp chính xác.

Bất kỳ mục nhập nào có giá trị # và / hoặc ▶ trong dấu ngoặc cho biết rằng nó có thể được mở rộng để xem nội dung mảng.

vars_array.png

Như tooltip giải thích , nhấn CTRL+click sẽ mở rộng mọi thứ trong một lần.

Trong ví dụ này, chúng ta muốn xem liệu có bất kỳ biến tác giả chủ đề nào không và định dạng là gì.
Vì vậy, trước tiên chúng ta mở rộng thread:

thread_view_vars_thread.png

Sau đó _values, cung cấp cho chúng ta:

thread_view_vars_thread_values.png

Vì vậy, bây giờ chúng ta có thể thấy rằng các khóa liên quan đến tác giả chủ đề là user_idusername.

thread_view_thread_author_vars.png

Điều này tạo nên các biến $thread.user_id$thread.username.

Chúng ta có thể xác nhận điều đó bằng cách kết xuất các biến chính xác đó trong template, như sau:

thread_view_dump_thread_vars.png

Nếu các biến hợp lệ, chúng sẽ trả về các giá trị tương ứng với các biến đó, trong trường hợp này là user ID là 1 và tên người dùng của thành viên là Test.

thread_view_dump_thread_author_vars.png

Nếu các biến không hợp lệ, chẳng hạn như nếu chúng ta cố gắng kết xuất thread.userid (lưu ý rằng thiếu dấu _ giữa userid), thì giá trị null sẽ được trả về.

thread_view_null_var.png

Ngoài ra, nếu bạn đã bật chế debug hoặc development, thì không có ai trên trang web sản xuất của họ, phải không? Đúng!?
Sau đó, sẽ có một thông báo lỗi hiển thị liên quan đến biến không hợp lệ.

error.png

Sử dụng một biến
Tất cả những thứ đó đều tốt, nhưng nó có công dụng gì và nó có thể được sử dụng như thế nào?
Chúng ta hãy xem, chúng ta sẽ?

Với mục đích của hướng dẫn này, bây giờ chúng ta đã có biến tác giả chủ đề, chúng ta có thể sử dụng biến đó để xác định và đánh dấu các bài đăng của tác giả trong một chủ đề.

Nhìn sâu hơn xuống template chủ đề, chúng ta có thể thấy rằng các bài đăng được xuất bằng code sau:
Mã:
<xf:foreach loop="$posts" value="$post">

    <xf:extension name="messages_block_body_before_post"></xf:extension>

    <xf:if is="$post.message_state == 'deleted'">
        <xf:macro name="{{ $templateOverrides.post_deleted_macro ?: 'post_macros::post_deleted' }}"
            arg-post="{$post}"
            arg-thread="{$thread}"
            args="{$templateOverrides.post_deleted_macro_args}" />
    <xf:else />
        <xf:macro name="{{ $templateOverrides.post_macro ?: 'post_macros::post' }}"
            arg-post="{$post}"
            arg-thread="{$thread}"
            arg-highlightedPosts="{$highlightedPosts}"
            args="{$templateOverrides.post_macro_args}" />
    </xf:if>

    <xf:extension name="messages_block_body_after_post"></xf:extension>

</xf:foreach>

Như trước đây, chúng ta có thể kết xuất các biến áp dụng cho phần này của template và khi chúng ta quan tâm đến các bài đăng, chúng ta có thể giả định rằng $post.user_id là một trong số chúng, vì vậy chúng ta thực hiện:

thread_view_dump_post_author.png

Để làm cho mọi thứ rõ ràng hơn, bạn cũng có thể thêm một số văn bản cho mỗi biến mà bạn đang kết xuất.

Kết quả là bây giờ chúng ta có thể thấy ID tác giả chủ đề và ID tác giả bài đăng cá nhân.

thread_view_thread_post_author_vars.png

Bây giờ chúng ta có thể chỉnh sửa template thread_view bằng câu lệnh có điều kiện để đánh giá ID người dùng bài đăng so với ID người dùng chủ đề, như sau:

thread_view_conditional_statement.png

Kết quả là Thread Author được hiển thị phía trên mỗi bài đăng được tạo bởi người tạo chủ đề.

thread_author.png

Rõ ràng đây chỉ là cho các mục đích của hướng dẫn này và nó sẽ không thực sự được thực hiện theo cách đó.
Tuy nhiên, nó hy vọng giải thích cách truy cập và sử dụng các biến trong các template.

Chúc các bạn thành công.


Nguồn: xenforo.com​
 

Hướng dẫn sử dụng

XenForo 1 XenForo 2
Translate by PVS

Top Bottom