Nội quy chuyên mục: - Chuyên mục này chỉ dành để viết các bài viết hướng dẫn sử dụng NukeViet 3.x. Vui lòng không mở các chủ đề mới nhằm thảo luận, hỏi đáp... tại đây. Các thảo luận và hỏi đáp liên quan đến các hướng dẫn vui lòng trả lời vào các chủ đề có hướng dẫn đó.
- Ban Quản Trị cũng khuyến khích tất cả các thành viên hoàn thiện các bài viết bổ ích của mình và đưa lên Thư viện tài liệu mở về NukeViet tại địa chỉ http//wiki.nukeviet.vn
#85892 gửi bởi hoaquynhtim99
Ngày 08 Tháng 05 2011 , 09:34
Tiếp tục nào các bạn.
Ở phần này mình sẽ giới thiệu với các bạn cách phân trang trong nukeviet.
Ví dụ:
Hinh01.jpg


Giả sử mình có một module thế này:
nv3_module_samples.zip


Module này các bạn down về cài đặt lên và xem, nội dung đã có sẵn. Ở đây mình giải thích cách hoạt động như thế này:

Ở đây mình giả sử các bạn đã biết viết module (biết cấu trúc module, xtemplate....). Các bạn chưa biết có thể tìm hiểu thêm tại đây: viewtopic.php?f=117&t=15405
Các bạn quan tâm đến file main.php trong thư mục admin của module.

Bắt đầu tìm hiểu nào :D

Mã: Chọn hết
$sql = "FROM `" . NV_PREFIXLANG . "_" . $module_data . "`";
câu này có nhiệm vụ lấy tất cả các dữ liệu trong bảng của module

Mã: Chọn hết
$base_url = NV_BASE_ADMINURL . "index.php?" . NV_NAME_VARIABLE . "=" . $module_name;


Đây là link cơ bản khi bạn ấn vô một nút phân trang. Ví dụ ta có link cơ bản là http://localhost/nukeviet/admin/index.php?nv=samples thì khi ấn vô một nút phân trang sẽ có dạng http://localhost/nukeviet/admin/index.p ... es&page=30

Mã: Chọn hết
$sql1 = "SELECT COUNT(*) " . $sql;
$result1 = $db->sql_query( $sql1 );
list( $all_page ) = $db->sql_fetchrow( $result1 );

tiếp theo ta tính tổng số kết quả thu được. Ở module ví dụ thì kết quả này sẽ là 1000

Mã: Chọn hết
$sql .= " ORDER BY `id` DESC";


cái này là câu lệnh thêm các bạn có thể bỏ đi. Ở ví dụ này câu đó các tác dụng lấy dữ liệu theo thứ tự có id từ lớn đến nhỏ

Mã: Chọn hết
$page = $nv_Request->get_int( 'page', 'get', 0 );


Cái này là lệnh lấy thông tin về trang hiện tại. ở trên ta có http://localhost/nukeviet/admin/index.p ... es&page=30 thì suy ra $page=30;

Mã: Chọn hết
$per_page = 30;
Số kết quả hiển thị trên một trang

Mã: Chọn hết
$sql2 = "SELECT * " . $sql . " LIMIT " . $page . ", " . $per_page;
$query2 = $db->sql_query( $sql2 );

Đoạn này nhiêm vụ lấy những kết quả cần thiết. Ở đây chú ý LIMIT " . $page . ", " . $per_page; có nghĩa là giới hạn vị trí thứ $page và lấy $per_page kết quả. Ví dụ LIMIT 0,10 có nghĩa lấy ra bắt đầu từ kết quả thứ nhất và lấy tổng cộng 10 kết quả

Tiếp theo là phần quan trọng:

Mã: Chọn hết
$generate_page = nv_generate_page( $base_url, $all_page, $per_page, $page );


Đây là một hàm được xây dựng sẵn kết quả của nó sẽ xuất ra một đoạn mã HTML trong ví dụ trên nó sẽ xuất ra đoạn mã này
Mã: Chọn hết
<strong>1</strong>,
<a href="/nukeviet/admin/index.php?nv=samples&amp;page=30">2</a>,
<a href="/nukeviet/admin/index.php?nv=samples&amp;page=60">3</a> ...
<a href="/nukeviet/admin/index.php?nv=samples&amp;page=930">32</a>,
<a href="/nukeviet/admin/index.php?nv=samples&amp;page=960">33</a>,
<a href="/nukeviet/admin/index.php?nv=samples&amp;page=990">34</a>&nbsp;&nbsp;
<span><a href="/nukeviet/admin/index.php?nv=samples&amp;page=30">Trang sau</a></span>


Như vậy tóm lại cốt lõi ở hàm nv_generate_page và các thông số truyền vào
Các bạn có thể làm nhiều cách miến đảm bảo được các yếu tố sau:

Đính kèm
(13.74 KB) Đã tải về 563 lần
(11.17 KB) Đã tải về 207 lần

Hãy sống là chính mình, bình thường nhưng không tầm thường.
#89417 gửi bởi comein2003c
Ngày 24 Tháng 06 2011 , 07:47
Đang định xây dựng cái phân trang, vậy mà đã có sẵn trên diễn đàn rồi. Xin cảm ơn rất nhiều.

-------------------------------- Nguyễn Văn Tuyến. Đơn vị: Trường THCS & THPT Nguyễn Bình http://thptnguyenbinhqn.edu.vn yahoo: Comein2003c Email: Comein2003c@gmail.com Phone:0973.07.07.00 - 01216.404.101
#91246 gửi bởi thangvn
Ngày 14 Tháng 07 2011 , 03:32
NgocLan đã viết:Mình là dân mù code, bạn có thể hướng dẫn kỹ hơn được không? rất cám ơn bạn!

mù code mà làm được mấy trang web xét về kỹ thuật thì hơi khó tin nha NgocLan.

Cám ơn bạn hoaquynhtim đã hướng dẫn.

SEO is not math, so if you do the equation right you will alway do it the same way and get it right - it just doesnt work like that SEO không phải là 1 bài toán,nếu bạn cứ giải nó theo cùng 1 cách và nó đúng,thì nó sẽ không bao giờ làm việc đúng với ý bạn.
#146223 gửi bởi thanlongweb
Ngày 23 Tháng 09 2013 , 12:52
cảm ơn bạn đã nhiệt tình hướng dẫn ,mà ko rành code kỹ ,,đầu tiên nhìn cái hình demo mừng mà đọc xong rối tung ,Tính làm cái phân trang cho bài viết mà kiểu này ko dc rồi :(
#167611 gửi bởi manhphan
Ngày 29 Tháng 03 2015 , 04:44
Anh hoaquynhtim99.
Anh có thể hướng dẫn rõ hơn ngắt trang, phân trang bài viết Tin tức dài module News được không ạ?
Em thấy cái này rất cần thiết vì nhiều khi có những văn bản dài mà cắt ra đăng làm nhiều lần thì không hay lắm.
Nếu được cám ơn anh nhiều. hii
#167636 gửi bởi manhphan
Ngày 30 Tháng 03 2015 , 04:51
Có thể dùng cách này để phân trang được không vậy? Xin chỉ giáo>>>>
http://nguyenhuuhuan.org/2010/?language ... eu-dai-227
Với các tài liệu, văn bản có nội dung hơi dài, việc phân trang là một nhu cầu hợp lý và rất cần thiết.
Ví dụ, để phân trang cho một văn bản trong module Laws, các bạn tiến hành các bước sau:

1. Mở file modules/laws/funcs/viewfile.php, tìm đến đọan:

if ( empty( $row['copyright'] ) )
{
$row['copyright'] = $lang_module['unknown'];
}

và thêm vào bên dưới đọan code này:

/**************************/
$page = $nv_Request->get_int ( 'page', 'post,get' );
$contentpages = explode( "[pagebreak]", $row['description']);
$pageno = count($contentpages);
if ( $page=="" || $page < 1 ) {
$page = 1;
}
if ( $page > $pageno )
$page = $pageno;
$arrayelement = (int)$page;
$arrayelement --;
$thetext = "";
$thetext .= $contentpages[$arrayelement];
if ($pageno != 1) {
$thetext .= "<hr>";
}
if($page >= $pageno) {
$next_page = "";
} else {
$next_pagenumber = $page + 1;
if ($page != 1) {
$next_page .= "- ";
}
$next_page .= "<a href=\"index.php?nv=laws&op=" . $list_cats[$row['catid']]['alias'] . "/" . $row['alias']. "&page=$next_pagenumber\"><b>".$lang_module['next']."</b> ($next_pagenumber/$pageno)</a> <a href=\"index.php?nv=laws&op=" . $list_cats[$row['catid']]['alias'] . "/" . $row['alias']. "&page=$next_pagenumber\"><img src=\"/images/next_page.gif\" border=\"0\" alt=\"".$lang_module['next']."\" title=\"".$lang_module['next']."\"></a>";
}
if($page <= 1) {
$previous_page = "";
} else {
$previous_pagenumber = $page - 1;
$previous_page = "<a href=\"index.php?nv=laws&op=" . $list_cats[$row['catid']]['alias'] . "/" . $row['alias']. "&page=$previous_pagenumber\"><img src=\"/images/prev_page.gif\" border=\"0\" alt=\"".$lang_module['prev']."\" title=\"".$lang_module['prev']."\"></a> <a href=\"index.php?nv=laws&op=" . $list_cats[$row['catid']]['alias'] . "/" . $row['alias']. "&page=$previous_pagenumber\"><b>".$lang_module['prev']."</b> ($previous_pagenumber/$pageno)</a>";
}
$thetext .= "<center>$previous_page $next_page</center>";
$row['description'] = $thetext;
/**************************/

(Các bạn làm tương tự thế với các module khác, nếu muốn)

2. Mở file modules/laws/language/vi.php và thêm vào cuối trước dấu ?> 2 dòng sau:

$lang_module['next'] = "Trang sau";
$lang_module['prev'] = "Trang trước";

3. Chép các file prev_page.gif (mũi tên trái), và next_page.gif (mũi tên phải) vào /images

Vậy là xong, bây giờ khi tạo nội dung văn bản mới, chỗ nào cần ngắt trang, bạn cứ thêm vào [pagebreak].
#170907 gửi bởi hongoctrien
Ngày 20 Tháng 07 2015 , 06:19
http://mynukeviet.net/Kien-thuc-lap-tri ... et-69.html
Ở đây mình có giới thiệu về phân trang ajax, mọi người tham khảo nhé,

Hỏi nhanh đáp gọn tất tần tật mọi thứ liên quan đến NukeViet ==> https://mynukeviet.net/hoi-dap/