- Tham gia
- 28/02/2015
- Bài viết
- 17,142
- Được Like
- 12,745
Tổng hợp cấu trúc khai báo điều kiện IF trong Xenforo mà bạn cần biết
Các khai báo điều kiện dưới đây sẽ chỉ làm việc ở các template có hỗ trợ đối số và tham số.
Khai báo có thể mở rộng thêm bằng cách sử dụng AND, OR và <xen:else />
Thay thế dấu == với != ở Ví dụ dưới đây sẽ thay đổi điều kiện từ true sang false.
Ví dụ: <xen:if is="{$visitor.user_id} == x"> là true, <xen:if is="{$visitor.user_id} != x"> là false.
Trong trường hợp 1 đối số chỉ chứa 1 tham số thì ta chèn dấu! trước tham số để có tác dụng tương như trên
Ví dụ: <xen:if is="{$visitor.user_id}"> là true, <xen:if is="!{$visitor.user_id}"> là false.
Khi thao tác với “arrays” thì ! sẽ được đặt trước đối số.
Ví dụ, <xen:if is="in_array({$forum.node_id}, array(x, y, z))"> là true, <xen:if is="!in_array({$forum.node_id}, array(x, y, z))"> là false.
Tùy thuộc vào template đang thao tác, bạn có thể phải sử dụng $user thay vì $visitor; $visitor luôn thể hiện các user đang đăng nhập, $user là thể hiện các user đang được xử lý (ví dụ: message author, member list, list of online users,…)
Khi bạn thao tác vào template PAGE_CONTAINER, bạn có thể bỏ qua các biến của các template view (như:category_view, forum_view, thread_view,...) bằng cách sử dụng xen:container. Nó sẽ có tác dụng đối với bất kỳ template nào có chứa hoặc hiển thị template PAGE_CONTAINER; ví dụ như header hay ad_header.
Ví dụ như để sử dụng biến $forum.node_id bạn cần phải add vào template PAGE_CONTAINER đoạn code
<xen:container var="$forumId">{$forum.node_id}</xen:container>.
Tương tự với biến $threadId, bạn sẽ thêm vào đoạn: <xen:container var="$threadId">{$thread.thread_id}</xen:container>.
Các biến số x, y, z ở các ví dụ dưới đây cần phải thay thế bằng các con số với giá trị thực.
Làm sao để ẩn nội dung đối với khách, chỉ áp dụng cho thành viên đăng nhập?
Bạn thêm vào trong template cần áp dụng đoạn code sau
<xen:if is="{$visitor.user_id}">
Đoạn hiện thị cho thành viên đăng nhập
</xen:if>
Làm sao để hiển thị nội dung với khách và ẩn với thành viên đăng nhập?
<xen:if is="!{$visitor.user_id}">
Nội dung dành cho khách
</xen:if>
Làm sao để hiển thị đồng thời các nội dung khác nhau dành cho khách và cho thành viên?
<xen:if is="{$visitor.user_id}">
Nội dung cho thành viên
<xen:else />
Nội dung cho khách
</xen:if>
Làm sao để hiển thị nội dung cho nhóm user cụ thể?
<xen:if is="{xen:helper ismemberof, $visitor, x}">
Nội dung dành cho nhóm user có ID là x
</xen:if>
Làm sao để ẩn nội dung cho nhóm user cụ thể?
<xen:if is="!{xen:helper ismemberof, $visitor, x}">
Ẩn nội dung này với nhóm ID x
</xen:if>
Làm cách nào để hiển thị / ẩn nội dung cho nhiều nhóm user riêng biệt?
<xen:if is="{xen:helper ismemberof, $visitor, x, y}">
Nội dung này dành cho các nhóm có ID là x hoặc y
</xen:if>
<xen:if is="!{xen:helper ismemberof, $visitor, x, y}">
Ẩn nội dung này với nhóm x hay y
</xen:if>
Làm sao để hiển thị nội dung cho Admin?
<xen:if is="{$visitor.is_admin}">
Nội dung này chỉ dành cho Admin
</xen:if>
Làm sao để hiển thị nội dung cho nhóm Mod?
<xen:if is="{$visitor.is_moderator}">
Nội dung này dành cho Mod
</xen:if>
Làm sao để hiển thị nội dung cho cả Admin và Mod?
<xen:if is="{$visitor.is_admin} OR {$visitor.is_moderator}">
Nội dung này dành cho cả Admin và Mod
</xen:if>
Làm sao để hiển thị nội dung cho 1 mem cụ thể nào đó?
<xen:if is="{$visitor.user_id} == x">
Nội dung này chỉ dành cho member có ID là x
</xen:if>
Làm sao để hiển thị nội dung cho nhiều thành viên cụ thể?
<xen:if is="in_array({$visitor.user_id}, array(x, y, z))">
Nội dung này chỉ dành cho các thành viên x, y và z
</xen:if>
Làm sao để hiển thị nội dung sau bài viết đầu tiên trong mỗi chủ đề?
<xen:if is="{$post.position} == 0 AND !{$message.conversation_id}">
Nội dung này hiển thị ngay sau bài viết đầu tiên
</xen:if>
Nếu bạn muốn hiển thị cả trong các phần hội thoại riêng thì sử dụng đoạn code sau:
<xen:if is="{$post.position} == 0">
Nội dung này hiển thị sau bài viết đầu tiên ở cả chủ đề và hội thoại
</xen:if>
Làm sao để hiển thị nội dung ngay sau bài viết x ở mọi trang trong cùng 1 chủ đề?
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == x AND !{$message.conversation_id}">
Nội dung này sẽ hiển thị sau bài viết x ở mỗi trang trong 1 chủ đề
</xen:if>
Nếu bạn muốn hiển thị cả trong các phần hội thoại riêng thì sử dụng đoạn code sau:
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == x">
Nội dung này sẽ hiển thị sau bài viết x ở mỗi trang trong 1 chủ đề và hội thoại
</xen:if>
Làm sao để hiển thị nội dung sau bài x ở mọi trang nhưng chỉ trong forum y hoặc z?
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == x AND in_array({$thread.node_id}, array(y, z))">
Nội dung này sẽ hiển thị sau bài viết x ở mỗi trang trong 1 chủ đề nhưng chỉ áp dung cho forum y hoặc z
</xen:if>
Làm sao để hiển thị nội dung sau bài x trên mọi trang ngoại trừ forum y hoặc z?
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == x AND !in_array({$thread.node_id}, array(y, z))">
Nội dung này sẽ hiển thị sau bài viết x ở mỗi trang tronddeef1 chủ đề ngoài trừ forum y hoặc z
</xen:if>
Làm sao để hiển thị nội dung ở 1 trang cụ thể?
<xen:if is="{$contentTemplate} == 'xyz'">
Nội dung này hiển thị ở template xyz
</xen:if>
Làm sao để hiển thị nội dung ở 1 category cụ thể ?
<xen:if is="{$category.node_id} == x">
Nội dung này hiển thị ở category ID = x
</xen:if>
Chú ý rằng để làm được việc này, bạn phải có category set như một Page tại ACP -> Options -> Node & Forum List: Create Pages for Categories.
Làm sao để hiển thị nội dung ở 1 forum cụ thể ?
<xen:if is="{$forum.node_id} == x">
Nội dung này chỉ có ở forum x
</xen:if>
Nếu muốn thêm forum thì bạn áp dụng:
<xen:if is="in_array({$forum.node_id}, array(x, y, z))">
Nội dung này chỉ có ở forum x , y, và z
</xen:if>
Làm sao để hiển thị nội dugn ở 1 chủ đề cụ thể?
<xen:if is="{$threadId} == x">
Nội dung này chỉ hiển thị ở chủ đề x
</xen:if>
Nếu muốn thêm chủ đề thì bạn áp dụng:
<xen:if is="in_array({$threadId}, array(x, y, z))">
Nội dung này chỉ hiển thị ở chủ đề x, y, và z
</xen:if>
Làm sao để hiển thị nội dung ở 1 bài post cụ thể?
<xen:if is="{$postId} == x">
Nội dung này chỉ hiện thị ở bài post x
</xen:if>
Nếu muốn thêm bài viết khác thì bạn áp dụng:
<xen:if is="in_array({$postId}, array(x, y, z))">
Nội dung này chỉ hiện thị ở bài post x, y, và z
</xen:if>
Làm sao để hiển thị nội dung nếu tác giả bài post cùng chính là tác giả của chủ đề?
<xen:if is="{$post.user_id} == {$thread.user_id}">
Nội dung cần hiển thị
</xen:if>
Làm sao để hiển thị nội dung với thành viên có số bài viết =0?
<xen:if is="{$visitor.message_count} == 0">
Nội dung cần hiển thị
</xen:if>
Làm sao để hiển thị nội dung với thành viên có nhiều hơn x bài?
<xen:if is="{$visitor.message_count} > x">
Nội dung cần hiển thị
</xen:if>
Làm sao để hiển thị nội dung với thành viên có ít hơn x bài
<xen:if is="{$visitor.message_count} < x">
Nội dung cần hiển thị
</xen:if>
Làm sao để hiển thị nội dung với khách truy cập từ các máy tìm kiếm?
<xen:if is="{$visitor.from_search}">
Nội dung cần hiển thị
</xen:if>
Chúc các bạn thành công.
Các khai báo điều kiện dưới đây sẽ chỉ làm việc ở các template có hỗ trợ đối số và tham số.
Khai báo có thể mở rộng thêm bằng cách sử dụng AND, OR và <xen:else />
Thay thế dấu == với != ở Ví dụ dưới đây sẽ thay đổi điều kiện từ true sang false.
Ví dụ: <xen:if is="{$visitor.user_id} == x"> là true, <xen:if is="{$visitor.user_id} != x"> là false.
Trong trường hợp 1 đối số chỉ chứa 1 tham số thì ta chèn dấu! trước tham số để có tác dụng tương như trên
Ví dụ: <xen:if is="{$visitor.user_id}"> là true, <xen:if is="!{$visitor.user_id}"> là false.
Khi thao tác với “arrays” thì ! sẽ được đặt trước đối số.
Ví dụ, <xen:if is="in_array({$forum.node_id}, array(x, y, z))"> là true, <xen:if is="!in_array({$forum.node_id}, array(x, y, z))"> là false.
Tùy thuộc vào template đang thao tác, bạn có thể phải sử dụng $user thay vì $visitor; $visitor luôn thể hiện các user đang đăng nhập, $user là thể hiện các user đang được xử lý (ví dụ: message author, member list, list of online users,…)
Khi bạn thao tác vào template PAGE_CONTAINER, bạn có thể bỏ qua các biến của các template view (như:category_view, forum_view, thread_view,...) bằng cách sử dụng xen:container. Nó sẽ có tác dụng đối với bất kỳ template nào có chứa hoặc hiển thị template PAGE_CONTAINER; ví dụ như header hay ad_header.
Ví dụ như để sử dụng biến $forum.node_id bạn cần phải add vào template PAGE_CONTAINER đoạn code
<xen:container var="$forumId">{$forum.node_id}</xen:container>.
Tương tự với biến $threadId, bạn sẽ thêm vào đoạn: <xen:container var="$threadId">{$thread.thread_id}</xen:container>.
Các biến số x, y, z ở các ví dụ dưới đây cần phải thay thế bằng các con số với giá trị thực.
Làm sao để ẩn nội dung đối với khách, chỉ áp dụng cho thành viên đăng nhập?
Bạn thêm vào trong template cần áp dụng đoạn code sau
<xen:if is="{$visitor.user_id}">
Đoạn hiện thị cho thành viên đăng nhập
</xen:if>
Làm sao để hiển thị nội dung với khách và ẩn với thành viên đăng nhập?
<xen:if is="!{$visitor.user_id}">
Nội dung dành cho khách
</xen:if>
Làm sao để hiển thị đồng thời các nội dung khác nhau dành cho khách và cho thành viên?
<xen:if is="{$visitor.user_id}">
Nội dung cho thành viên
<xen:else />
Nội dung cho khách
</xen:if>
Làm sao để hiển thị nội dung cho nhóm user cụ thể?
<xen:if is="{xen:helper ismemberof, $visitor, x}">
Nội dung dành cho nhóm user có ID là x
</xen:if>
Làm sao để ẩn nội dung cho nhóm user cụ thể?
<xen:if is="!{xen:helper ismemberof, $visitor, x}">
Ẩn nội dung này với nhóm ID x
</xen:if>
Làm cách nào để hiển thị / ẩn nội dung cho nhiều nhóm user riêng biệt?
<xen:if is="{xen:helper ismemberof, $visitor, x, y}">
Nội dung này dành cho các nhóm có ID là x hoặc y
</xen:if>
<xen:if is="!{xen:helper ismemberof, $visitor, x, y}">
Ẩn nội dung này với nhóm x hay y
</xen:if>
Làm sao để hiển thị nội dung cho Admin?
<xen:if is="{$visitor.is_admin}">
Nội dung này chỉ dành cho Admin
</xen:if>
Làm sao để hiển thị nội dung cho nhóm Mod?
<xen:if is="{$visitor.is_moderator}">
Nội dung này dành cho Mod
</xen:if>
Làm sao để hiển thị nội dung cho cả Admin và Mod?
<xen:if is="{$visitor.is_admin} OR {$visitor.is_moderator}">
Nội dung này dành cho cả Admin và Mod
</xen:if>
Làm sao để hiển thị nội dung cho 1 mem cụ thể nào đó?
<xen:if is="{$visitor.user_id} == x">
Nội dung này chỉ dành cho member có ID là x
</xen:if>
Làm sao để hiển thị nội dung cho nhiều thành viên cụ thể?
<xen:if is="in_array({$visitor.user_id}, array(x, y, z))">
Nội dung này chỉ dành cho các thành viên x, y và z
</xen:if>
Làm sao để hiển thị nội dung sau bài viết đầu tiên trong mỗi chủ đề?
<xen:if is="{$post.position} == 0 AND !{$message.conversation_id}">
Nội dung này hiển thị ngay sau bài viết đầu tiên
</xen:if>
Nếu bạn muốn hiển thị cả trong các phần hội thoại riêng thì sử dụng đoạn code sau:
<xen:if is="{$post.position} == 0">
Nội dung này hiển thị sau bài viết đầu tiên ở cả chủ đề và hội thoại
</xen:if>
Làm sao để hiển thị nội dung ngay sau bài viết x ở mọi trang trong cùng 1 chủ đề?
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == x AND !{$message.conversation_id}">
Nội dung này sẽ hiển thị sau bài viết x ở mỗi trang trong 1 chủ đề
</xen:if>
Nếu bạn muốn hiển thị cả trong các phần hội thoại riêng thì sử dụng đoạn code sau:
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == x">
Nội dung này sẽ hiển thị sau bài viết x ở mỗi trang trong 1 chủ đề và hội thoại
</xen:if>
Làm sao để hiển thị nội dung sau bài x ở mọi trang nhưng chỉ trong forum y hoặc z?
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == x AND in_array({$thread.node_id}, array(y, z))">
Nội dung này sẽ hiển thị sau bài viết x ở mỗi trang trong 1 chủ đề nhưng chỉ áp dung cho forum y hoặc z
</xen:if>
Làm sao để hiển thị nội dung sau bài x trên mọi trang ngoại trừ forum y hoặc z?
<xen:if is="{$post.position} % {$xenOptions.messagesPerPage} == x AND !in_array({$thread.node_id}, array(y, z))">
Nội dung này sẽ hiển thị sau bài viết x ở mỗi trang tronddeef1 chủ đề ngoài trừ forum y hoặc z
</xen:if>
Làm sao để hiển thị nội dung ở 1 trang cụ thể?
<xen:if is="{$contentTemplate} == 'xyz'">
Nội dung này hiển thị ở template xyz
</xen:if>
Làm sao để hiển thị nội dung ở 1 category cụ thể ?
<xen:if is="{$category.node_id} == x">
Nội dung này hiển thị ở category ID = x
</xen:if>
Chú ý rằng để làm được việc này, bạn phải có category set như một Page tại ACP -> Options -> Node & Forum List: Create Pages for Categories.
Làm sao để hiển thị nội dung ở 1 forum cụ thể ?
<xen:if is="{$forum.node_id} == x">
Nội dung này chỉ có ở forum x
</xen:if>
Nếu muốn thêm forum thì bạn áp dụng:
<xen:if is="in_array({$forum.node_id}, array(x, y, z))">
Nội dung này chỉ có ở forum x , y, và z
</xen:if>
Làm sao để hiển thị nội dugn ở 1 chủ đề cụ thể?
<xen:if is="{$threadId} == x">
Nội dung này chỉ hiển thị ở chủ đề x
</xen:if>
Nếu muốn thêm chủ đề thì bạn áp dụng:
<xen:if is="in_array({$threadId}, array(x, y, z))">
Nội dung này chỉ hiển thị ở chủ đề x, y, và z
</xen:if>
Làm sao để hiển thị nội dung ở 1 bài post cụ thể?
<xen:if is="{$postId} == x">
Nội dung này chỉ hiện thị ở bài post x
</xen:if>
Nếu muốn thêm bài viết khác thì bạn áp dụng:
<xen:if is="in_array({$postId}, array(x, y, z))">
Nội dung này chỉ hiện thị ở bài post x, y, và z
</xen:if>
Làm sao để hiển thị nội dung nếu tác giả bài post cùng chính là tác giả của chủ đề?
<xen:if is="{$post.user_id} == {$thread.user_id}">
Nội dung cần hiển thị
</xen:if>
Làm sao để hiển thị nội dung với thành viên có số bài viết =0?
<xen:if is="{$visitor.message_count} == 0">
Nội dung cần hiển thị
</xen:if>
Làm sao để hiển thị nội dung với thành viên có nhiều hơn x bài?
<xen:if is="{$visitor.message_count} > x">
Nội dung cần hiển thị
</xen:if>
Làm sao để hiển thị nội dung với thành viên có ít hơn x bài
<xen:if is="{$visitor.message_count} < x">
Nội dung cần hiển thị
</xen:if>
Làm sao để hiển thị nội dung với khách truy cập từ các máy tìm kiếm?
<xen:if is="{$visitor.from_search}">
Nội dung cần hiển thị
</xen:if>
Chúc các bạn thành công.
Nguồn: vxf.vn
Bài viết liên quan
Bài viết mới