- Tham gia
- 28/02/2015
- Bài viết
- 17,149
- Được Like
- 12,745
How to show a forum in a page - Cách hiển thị forum trong trang
Hướng dẫn này sẽ giải thích làm thế nào để hiển thị một diễn đàn (danh sách chủ đề) bên trong một trang.
Và đây là kết quả cuối cùng:
Bước 1 - Tạo mã
Các mã sau đây sẽ là responsable cho thực hiện một yêu cầu đến một hành động của controller gọi XenForo_ControllerPublic_Forum. Hành động này là actionIndex và bạn có thể có một cái nhìn vào nó và xem những gì nó mở tập tin library/XenForo/ControllerPublic/Forum.php và đi đến chức năng actionIndex.
Các hành động có được một danh sách các chủ đề trong diễn đàn cụ thể, và làm nhiều thứ khác như kiểm tra quyền truy cập, thứ tự chủ đề và vv
Tạo một file mới trong your_forum_root/library và đặt tên nó là ShowAForum.php.
Mở tập tin này và dán đoạn mã sau:
Chức năng showAForumInPage này sử dụng hai tham số: $controller (bộ điều khiển của trang) và $response (phản ứng của trang). Chúng ta sẽ chỉ sử dụng $response, để thiết lập một số tùy chỉnh. Nhưng làm thế nào để có được một danh sách các chủ đề?
Khi XenForo đã làm điều đó (bạn có thể thấy rằng khách đến thăm bất kỳ diễn đàn, bạn sẽ nhận được một danh sách các chủ đề), chúng ta sẽ gọi cho controller hiện có và hành động để có được tất cả các chủ đề mà chúng ta muốn hiển thị. Sau đó chúng ta chỉ cần thiết lập số lượng các chủ đề mà chúng ta muốn hiển thị (nếu chúng ta muốn giới hạn) và thiết lập nhiều thứ khác như không hiển thị tổng số bài trong template (XenForo nào đó trong template thread_list).
Chúng ta thiết lập diễn đàn mà chúng ta muốn bằng cách sử dụng đoạn mã này:
Số 2 là ID của diễn đàn.
Lưu tập tin.
Bước 2 - Tạo trang
Để tạo một trang mới vào AdminCP -> Applications -> Node Tree -> Create New Page. Điền với thông tin dưới đây (Hoặc bất cứ điều gì bạn muốn. Các mục có màu đỏ là cần thiết để được chính xác giống như tôi đã viết ở đây, vì vậy hướng dẫn này sẽ làm việc cho bạn):
Tab - Basic Information
URL Portion:: showsaforum
Title: Showing a Forum
Description: This page shows a forum.
Parent Node: (root node)
Display Order: 1
Display in the node list: 1
Override user style choice: Unchecked
Tab - Page options
Template HTML:
Giải thích: Bạn sẽ có thể không hiểu điều này, nhưng những gì chúng ta đang làm là yêu cầu các tập tin .css cho danh sách chủ đề, và bên trong một div chúng ta raw tham số $forum. Sau khi gọi chức năng, chúng ta nhận được phản ứng và sử dụng phản ứng này để tạo ra một template mới. Template này sẽ được thiết lập như là tham số $forum.
Optional Components: Bạn không cần phải check bất cứ điều gì.
Tab - PHP Callback
PHP Callback: ShowAForum::showAForumInPage
Lưu lại.
Bước 3 - Kiểm tra
Để kiểm tra, hãy vào danh sách diễn đàn của bạn và tìm kiếm trang mới tạo ra. Nó sẽ ở đó:
Click vào nó và các diễn đàn mà bạn chọn sẽ được hiển thị trên trang:
Mẹo:
1: Bạn có thể thiết lập danh sách chủ đề để chỉ hiển thị chủ đề của một tiền tố cụ thể sử dụng điều này:
Trong đó 1 là ID của tiền tố.
2: Nếu bạn chỉ muốn hiển thị chủ đề sticky thêm mã này:
3: Nếu bạn chỉ muốn hiển thị chủ đề bình thường (không sticky) thêm mã này:
Chúc các bạn thành công.
Hướng dẫn này sẽ giải thích làm thế nào để hiển thị một diễn đàn (danh sách chủ đề) bên trong một trang.
Và đây là kết quả cuối cùng:
Các mã sau đây sẽ là responsable cho thực hiện một yêu cầu đến một hành động của controller gọi XenForo_ControllerPublic_Forum. Hành động này là actionIndex và bạn có thể có một cái nhìn vào nó và xem những gì nó mở tập tin library/XenForo/ControllerPublic/Forum.php và đi đến chức năng actionIndex.
Các hành động có được một danh sách các chủ đề trong diễn đàn cụ thể, và làm nhiều thứ khác như kiểm tra quyền truy cập, thứ tự chủ đề và vv
Tạo một file mới trong your_forum_root/library và đặt tên nó là ShowAForum.php.
Mở tập tin này và dán đoạn mã sau:
Mã:
<?php
class ShowAForum
{
public static function showAForumInPage(XenForo_ControllerPublic_Abstract $controller, XenForo_ControllerResponse_Abstract &$response)
{
/* Get the visitor param */
$visitor = XenForo_Visitor::getInstance();
/* Create a new request */
$request = new Zend_Controller_Request_Http();
/* The ID of the forum to show. In this example, we'll show the forum with the ID 2*/
$request->setParam('node_id', 2);
/* Create a new response */
$responseForum = new Zend_Controller_Response_Http();
/* New RouteMatch to use when instance the new ControllerPublic */
$routeMatch = new XenForo_RouteMatch();
/* The controller that holds the action that we want to call: XenForo_ControllerPublic_Forum */
$controllerForum = new XenForo_ControllerPublic_Forum($request, $responseForum, $routeMatch);
/* Pre Dispatch the controller with the actionIndex */
$controllerForum->preDispatch('forum', get_class($controllerForum));
/* Call the actionIndex in the Controller. This action show a list of threads. (that's what we want) */
$controllerResponse = $controllerForum->{'actionForum'}();
/* Set the param called 'visitor' in the controller response. This param is used in the thread_list template. */
$controllerResponse->params['visitor'] = $visitor->toArray();
/*
Limit the numbers of thread. In this example we set to onyl show 4 threads: 0,1,2,3,4
The actionIndex in the XenForo_ControllerPublic_Forum will get all threads that it have to get, but now we can limit
*/
$threadsToShow = 4;
$controllerResponse->params['threads'] = array_slice($controllerResponse->params['threads'], 0, $threadsToShow - 1);
/* Unset the param 'totalThreads' so the numbers of totalThreads will not show in the template */
unset($controllerResponse->params['totalThreads']);
/* Create the template to show the threads, with all the params requireds */
$threadList = new XenForo_Template_Public('thread_list', $controllerResponse->params);
/* Set the param 'forum' with the rendered template so we can use in our page */
$response->params['forum'] = $threadList;
/* return the original response to the page, with the new param 'forum' */
return $response;
}
}
?>
Chức năng showAForumInPage này sử dụng hai tham số: $controller (bộ điều khiển của trang) và $response (phản ứng của trang). Chúng ta sẽ chỉ sử dụng $response, để thiết lập một số tùy chỉnh. Nhưng làm thế nào để có được một danh sách các chủ đề?
Khi XenForo đã làm điều đó (bạn có thể thấy rằng khách đến thăm bất kỳ diễn đàn, bạn sẽ nhận được một danh sách các chủ đề), chúng ta sẽ gọi cho controller hiện có và hành động để có được tất cả các chủ đề mà chúng ta muốn hiển thị. Sau đó chúng ta chỉ cần thiết lập số lượng các chủ đề mà chúng ta muốn hiển thị (nếu chúng ta muốn giới hạn) và thiết lập nhiều thứ khác như không hiển thị tổng số bài trong template (XenForo nào đó trong template thread_list).
Chúng ta thiết lập diễn đàn mà chúng ta muốn bằng cách sử dụng đoạn mã này:
Mã:
$request->setParam('node_id', 2);
Số 2 là ID của diễn đàn.
Lưu tập tin.
Bước 2 - Tạo trang
Để tạo một trang mới vào AdminCP -> Applications -> Node Tree -> Create New Page. Điền với thông tin dưới đây (Hoặc bất cứ điều gì bạn muốn. Các mục có màu đỏ là cần thiết để được chính xác giống như tôi đã viết ở đây, vì vậy hướng dẫn này sẽ làm việc cho bạn):
Tab - Basic Information
URL Portion:: showsaforum
Title: Showing a Forum
Description: This page shows a forum.
Parent Node: (root node)
Display Order: 1
Display in the node list: 1
Override user style choice: Unchecked
Tab - Page options
Template HTML:
Mã:
<xen:require css="discussion_list.css" />
<div class="discussionList">
{xen:raw $forum}
</div>
Giải thích: Bạn sẽ có thể không hiểu điều này, nhưng những gì chúng ta đang làm là yêu cầu các tập tin .css cho danh sách chủ đề, và bên trong một div chúng ta raw tham số $forum. Sau khi gọi chức năng, chúng ta nhận được phản ứng và sử dụng phản ứng này để tạo ra một template mới. Template này sẽ được thiết lập như là tham số $forum.
Optional Components: Bạn không cần phải check bất cứ điều gì.
Tab - PHP Callback
PHP Callback: ShowAForum::showAForumInPage
Lưu lại.
Bước 3 - Kiểm tra
Để kiểm tra, hãy vào danh sách diễn đàn của bạn và tìm kiếm trang mới tạo ra. Nó sẽ ở đó:
1: Bạn có thể thiết lập danh sách chủ đề để chỉ hiển thị chủ đề của một tiền tố cụ thể sử dụng điều này:
Mã:
$request->setParam('prefix_id', 1);
Trong đó 1 là ID của tiền tố.
2: Nếu bạn chỉ muốn hiển thị chủ đề sticky thêm mã này:
Mã:
$controllerResponse->params['threads'] = array();
3: Nếu bạn chỉ muốn hiển thị chủ đề bình thường (không sticky) thêm mã này:
Mã:
$controllerResponse->params['stickyThreads'] = array();
Chúc các bạn thành công.
Nguồn: xenforo.com
Bài viết liên quan
Bị lỗi data
bởi bloghocpiano,
Bài viết mới
Bị lỗi data
bởi bloghocpiano,