";
$content .= "Hà Nội
";
$content .= "";
$content .= "Hải Phòng
";
$content .= "";
$content .= "TP.HCM
";
$content .= "";
$content .= "";
?>
Nâng cấp lên NukeViet 3.x chỉ cần xóa đi đoạn
if( ( ! defined( 'NV_SYSTEM' ) ) and ( ! defined( 'NV_ADMIN' ) ) )
{
Header( "Location: ../index.php" );
exit;
}
Và thay vào đó đoạn
if ( ! defined( 'NV_SYSTEM' ) ) die( 'Stop!!!' );
Được đoạn code
";
$content .= "Hà Nội
";
$content .= "";
$content .= "Hải Phòng
";
$content .= "";
$content .= "TP.HCM
";
$content .= "";
$content .= "";
?>
Sau đó lưu lại file này với tên global.thoitiet_hn_hp_hcm.php và đặt nó tại \includes\blocks\
Cuối cùng tôi chỉ việc vào Admin Control Panel của NukeViet 3.x, tạo block mới kiểu file và trỏ tới block này.
Chú ý:
* Block có ảnh hưởng trực tiếp đến giao diện site. NukeViet 3 sử dụng chuẩn xHTML 1.0 và CSS 1.1 vì vậy bạn cần kiểm tra để hợp chuẩn bằng cách click vào nút valid xHTML và CSS có ở theme mặc định, tránh vì một vài block mà phá vỡ chuẩn mực giao diện của site.
* Vì NukeViet 3.x có hỗ trợ rewrite nên nếu trong block sử dụng các tệp tin từ website hoặc có link là đường dẫn tương đối thì phải chèn vào đầu mỗi đường dẫn tương đối đoạn code: {NV_BASE_SITEURL}
{NV_BASE_SITEURL} sẽ chỉ ra địa chỉ đường dẫn một cách chính xác khi bạn phải duyệt qua URL ảo do rewrite tạo ra. Lưu ý là đằng sau {NV_BASE_SITEURL} không có gạch chéo nào cả, ví dụ cài NukeViet 3 tại thư mục gốc của tên miền http://nukeviet.vn, khi muốn chỉ đến trang chủ website (file index.php) tôi sẽ phải ghi địa chỉ link như sau:{NV_BASE_SITEURL}index.php
* NukeViet 3.1 trở đi cho phép sử dụng file cấu hình bổ sung cho block cũng như tách ngôn ngữ cho block, xem hướng dẫn bên dưới để biết chi tiết cách sử dụng.
===== Viết block module =====
Tạo một file mới cho block module, đặt vào thư mục blocks của module cần tạo block.
Để sử dụng các biến chung của hệ thống cần dùng lệnh global.
Ví dụ:
global $module_name, $lang_module, $module_data;
Block module sẽ dùng được các tài nguyên của module đó, do đó có thể sửa dụng Xtemplate, truy vấn CSDL…. Cho block.
Tất cả nội dung của block được hiển thị cần phải lưu vào biến $content.
Một block hoàn chỉnh sẽ có dạng:
assign( 'LANG', $lang_module );
$query = "SELECT catid, title, alias, uploadtime FROM `" . NV_PREFIXLANG . "_" . $module_data . "` WHERE `status`=1 ORDER BY uploadtime DESC LIMIT 5";
$result = $db->sql_query( $query );
while ( $row = $db->sql_fetchrow( $result ) )
{
$catalias = $list_cats[$row['catid']]['alias'];
$row['link'] = NV_BASE_SITEURL . "index.php?" . NV_LANG_VARIABLE . "=" . NV_LANG_DATA . "&" . NV_NAME_VARIABLE . "=" . $module_name . "&" . NV_OP_VARIABLE . "=" . $catalias . '/' . $row['alias'];
$row['updatetime'] = date( 'd.m.Y h:i', $row['uploadtime'] );
$xtpl->assign( 'loop', $row );
$xtpl->parse( 'main.loop' );
}
$xtpl->parse( 'main' );
$content = $xtpl->text( 'main' );
?>
===== Viết block global =====
Trước khi viết block blobal cần xác định đặt block ở đâu? Trong module hay trong thư mục ''includes/blocks''.
Tiếp theo cần xác định block có phần cấu hình hoặc ngôn ngữ block không?
Nếu block có phần cấu hình cần tạo thêm file ini, file này có dạng:
Block RSS
VinaDes.,Jsc
http://vinades.vn
1
5
1
nv_block_config_news_blocks
nv_block_config_news_blocks_submit
Trong đó cần quan tâm đến
1
5
1
Phần này là các biến để thiết lập block.
Trong đó biến $lang_translator không nên chỉnh sửa, biến $lang_block gồm nội dung của ngôn ngữ block.
Sau khi tạo thêm các thành phần trên, ta tiến hành viết nội dung chính của block.
Tạo file block và đặt vào vị trí thích hợp.
Vì block có thể dùng nhiều lần trên một trang do đó cần kiểm tra xem một block đã được dùng chưa? Việc kiểm tra sẽ tránh tình trạng lặp đi lặp lại các phần trong block.
Ví dụ:
if ( ! nv_function_exists( 'nv_news_blocks' ) )
{
function nv_news_blocks( $block_config )
{
}
}
Nội dung của block cần đặt trong một function, theo ví dụ trên đó là function nv_news_blocks.
Vì nội dung được đặt trong function nên để sử dụng các biến dùng chung cũng cần gọi biến global.
Nếu block có cấu hình, thêm tiếp hai function cấu hình block.
Ví dụ:
function nv_block_config_news_blocks ( $module, $data_block, $lang_block )
{
global $db, $language_array, $site_mods;
$html = "";
$html .= "";
$html .= " " . $lang_block['blockid'] . " ";
$html .= " \n";
$html .= " ";
$html .= "";
$html .= " " . $lang_block['numrow'] . " ";
$html .= " ";
$html .= " ";
return $html;
}
function nv_block_config_news_blocks_submit ( $module, $lang_block )
{
global $nv_Request;
$return = array();
$return['error'] = array();
$return['config'] = array();
$return['config']['blockid'] = $nv_Request->get_int( 'config_blockid', 'post', 0 );
$return['config']['numrow'] = $nv_Request->get_int( 'config_numrow', 'post', 0 );
return $return;
}
Tiếp theo thêm function chính (nội dung block)
Ví dụ:
function nv_news_blocks ( $block_config )
{
global $module_array_cat, $module_info, $lang_module, $site_mods;
$module = $block_config['module'];
$sql = "SELECT t1.id, t1.listcatid, t1.title, t1.alias, t1.homeimgthumb, t1.homeimgalt FROM `" . NV_PREFIXLANG . "_" . $site_mods[$module]['module_data'] . "_rows` as t1 INNER JOIN `" . NV_PREFIXLANG . "_" . $site_mods[$module]['module_data'] . "_block` AS t2 ON t1.id = t2.id WHERE t2.bid= " . $block_config['blockid'] . " AND t1.status= 1 AND t1.inhome='1' and t1.publtime < " . NV_CURRENTTIME . " AND (t1.exptime=0 OR t1.exptime >" . NV_CURRENTTIME . ") ORDER BY t2.weight ASC LIMIT 0 , " . $block_config['numrow'];
$list = nv_db_cache( $sql, 'id', $module );
$html = "";
$i = 1;
if ( ! empty( $list ) )
{
if ( file_exists( NV_ROOTDIR . "/themes/" . $module_info['template'] . "/modules/news/block_blocknews.tpl" ) )
{
$block_theme = $module_info['template'];
}
else
{
$block_theme = "default";
}
$xtpl = new XTemplate( "block_blocknews.tpl", NV_ROOTDIR . "/themes/" . $block_theme . "/modules/news" );
foreach ( $list as $l )
{
$arr_catid = explode( ',', $l['listcatid'] );
$link = NV_BASE_SITEURL . "index.php?" . NV_LANG_VARIABLE . "=" . NV_LANG_DATA . "&" . NV_NAME_VARIABLE . "=" . $module . "&" . NV_OP_VARIABLE . "=" . $module_array_cat[$arr_catid[0]]['alias'] . "/" . $l['alias'] . "-" . $l['id'];
$l['link'] = $link;
$l['thumb'] = "";
if ( ! empty( $l['homeimgthumb'] ) )
{
$array_img = array();
$array_img = explode( "|", $l['homeimgthumb'] );
if ( $array_img[0] != "" and file_exists( NV_ROOTDIR . '/' . NV_FILES_DIR . '/' . $module . '/' . $array_img[0] ) )
{
$imgurl = NV_BASE_SITEURL . NV_FILES_DIR . '/' . $module . '/' . $array_img[0];
$l['thumb'] = $imgurl;
}
}
$xtpl->assign( 'ROW', $l );
if ( ! empty( $l['thumb'] ) ) $xtpl->parse( 'main.loop.img' );
$bg = ( $i % 2 == 0 ) ? "bg" : "";
$xtpl->assign( 'bg', $bg );
$i ++;
$xtpl->parse( 'main.loop' );
}
$xtpl->assign( 'HTML_CONTENT', $html );
$xtpl->parse( 'main' );
return $xtpl->text( 'main' );
}
}
Lưu ý:
* Đối với block global cần chú ý biến $block_config đây là biến chứa cấu hình của block, tên module chứa block, tên block.
array (
'blockid' => 2,
'numrow' => 5,
'bid' => '120',
'module' => 'news',
'block_name' => 'global.block_blocknews',
)
* Cần chú ý đến biến ''$module_name, $module_data, $module_file''. Vì block global được dùng trên toàn bộ site, đó mỗi module giá trị các biến trên sẽ thay đổi. Cần thay ''$module_name'' bằng ''$block_config[‘module’], $site_mods[$block_config[‘module’]][‘module_data’], $site_mods[$block_config[‘module’]][‘module_file’]''.