Hướng dẫn viết Block cho Nukeviet 4.x - Phần 1. Hướng dẫn viết block theo theme

Hướng dẫn viết Block cho Nukeviet 4.x - Phần 1. Hướng dẫn viết block theo theme
Các biến có thể dùng trong khi viết block dùng chung cho các hướng dẫn bên dưới
$db : Dùng để truy vấn vào csdl
$db_config : Dùng để xác định tiền tố của các bảng CSDL mặc định khi cài sẽ là nv4
$module_info : Dùng để xác định tên theme đang dùng ví dụ (default) và nhiều thành phần của mảng trong bảng này các bạn có thể var_dump($module_info) để biết thêm các thành phần khác của nó
$global_config : Dùng để xác định tên thêm mặc định, tên site, ... các bạn có thể var_dump( $global_config ) để có thêm các thành phần khác của nó
$site_mods : Dùng đễ xác định quyền, tên module hiện thời truy cập, bao gồm cả module_data, module_file... các bạn có thể var_dump( $global_config ) để biết thêm chi tiết
$block_config : Dùng để xuất nội dung từ hàm cấu hình của block
$nv_Request : Dùng để lấy thông tin từ các Request submit form

Phần 1: Hướng dẫn viết block theo theme
Để viết một block theo theme bạn cần xác định đường dẫn chứa file block của nó như sau:

Root/themes/theme_ban/blocks/ten_block.php
Root/themes/theme_ban/blocks/ten_block.ini
Root/themes/theme_ban/blocks/ten_block.tpl


Trong đó Root là đường dẫn tới file index.php của bộ mã nguồn Nukeviet
theme_ban: Là tên theme bạn đang sử dụng
ten_block: là block bạn sẽ tạo ra để sử dụng

Bước một: Cấu trúc ten_block như sau
global.tenbandat.php
Nếu block bạn muốn sử dụng có chức năng cấu hình bạn cần thêm một file tương tự với tên đuôi file là .ini
global.tenbandat.ini
Như vậy cấu trúc của bạn sẽ gồm 2 file
global.tenbandat.php
global.tenbandat.ini
Bước hai: Tạo nội dung cho các file
a. file global.tenbandat.php

<?php

/**
* @Project Block Test
* @Author DANGDINHTU (dlinhvan@gmail.com)
* @Copyright (C) 2014 Webdep24.com
* @Createdate 16:58 11/11/2014
*/

if ( ! defined( 'NV_MAINFILE' ) ) die( 'Stop!!!' );

if ( ! nv_function_exists( 'nv_block_test' ) )
{

function nv_block_test ( )
{
$content ='Chào thế giới';

return $content;
}
}

if ( defined( 'NV_SYSTEM' ) )
{
$content = nv_block_test( );
}
Đoạn code này sẽ xuất ra dòng chữ "Chào thế giới" Đây là block đơn giản nhất sơ khai :D
Bây giờ mình sẽ tiến hành tạo một block có chứa phần cấu hình. Bạn cần thêm các fuction cấu hình vào để nó có thể nhận diện được

<?php

/**
* @Project Block Test
* @Author DANGDINHTU (dlinhvan@gmail.com)
* @Copyright (C) 2014 Webdep24.com
* @Createdate 16:58 11/11/2014
*/

if ( ! defined( 'NV_MAINFILE' ) ) die( 'Stop!!!' );

if ( ! nv_function_exists( 'nv_block_test' ) )
{
function nv_block_config_test ( $module, $data_block, $lang_block )
{
$html = "";

$html .= "<tr>";
$html .= " <td>" . $lang_block['year'] . "</td>";
$html .= " <td><input type=\"text\" name=\"config_year\" size=\"50\" value=\"" . $data_block['year'] . "\"/></td>";
$html .= "</tr>";

$html .= "<tr>";
$html .= " <td>" . $lang_block['name'] . "</td>";
$html .= " <td><input type=\"text\" name=\"config_name\" size=\"50\" value=\"" . $data_block['name'] . "\"/></td>";
$html .= "</tr>";


return $html;
}

function nv_block_config_test_submit ( $module, $lang_block )
{
global $nv_Request;
$return = array();
$return['error'] = array();
$return['config'] = array();
$return['config']['year'] = $nv_Request->get_int( 'config_year', 'post', 0 );
$return['config']['name'] = $nv_Request->get_string( 'config_name', 'post', '' );

return $return;
}

function nv_block_test ( $block_config )
{
$content ='Xin chào ' . $block_config['name'] . '<br>';
$content .='Tuổi của bạn là: ' . $block_config['year'];

return $content;
}
}

if ( defined( 'NV_SYSTEM' ) )
{
$content = nv_block_test( $block_config );
}
b. file global.tenbandat.ini
<?xml version="1.0" encoding="utf-8"?>
<block>
<info>
<name>Block Hello World</name>
<author>DANG DINH TU</author>
<website>http://webdep24.com</website>
<description>Block Hello World</description>
</info>
<config>
<year>30</year>
<name>Tứ</name>
</config>
<datafunction>nv_block_config_test</datafunction>
<submitfunction>nv_block_config_test_submit</submitfunction>
<language>
<en>
<year>Year</year>
<name>Your name</name>

</en>
<vi>
<year>Tuổi</year>
<name>Tên bạn</name>
</vi>
</language>
</block>
Tiếp theo mình sẽ hướng dẫn các bạn sử dụng thư viện Xtemplate để xuất code html và nội dung ra khỏi php để tiện các bạn chỉnh sửa nội dung
sửa file global.tenbandat.php function nv_block_test
<?php

/**
* @Project Block Test
* @Author DANGDINHTU (dlinhvan@gmail.com)
* @Copyright (C) 2014 Webdep24.com
* @Createdate 16:58 11/11/2014
*/

if ( ! defined( 'NV_MAINFILE' ) ) die( 'Stop!!!' );

if ( ! nv_function_exists( 'nv_block_test' ) )
{
function nv_block_config_test ( $module, $data_block, $lang_block )
{
$html = "";

$html .= "<tr>";
$html .= " <td>" . $lang_block['year'] . "</td>";
$html .= " <td><input type=\"text\" name=\"config_year\" size=\"50\" value=\"" . $data_block['year'] . "\"/></td>";
$html .= "</tr>";

$html .= "<tr>";
$html .= " <td>" . $lang_block['name'] . "</td>";
$html .= " <td><input type=\"text\" name=\"config_name\" size=\"50\" value=\"" . $data_block['name'] . "\"/></td>";
$html .= "</tr>";


return $html;
}

function nv_block_config_test_submit ( $module, $lang_block )
{
global $nv_Request;
$return = array();
$return['error'] = array();
$return['config'] = array();
$return['config']['year'] = $nv_Request->get_int( 'config_year', 'post', 0 );
$return['config']['name'] = $nv_Request->get_string( 'config_name', 'post', '' );

return $return;
}

function nv_block_test ( $block_config )
{
global $module_info;

$xtpl = new XTemplate( 'global.tenbandat.tpl', NV_ROOTDIR . '/themes/' . $module_info['template'] . '/blocks' );
$xtpl->assign( 'YEAR', $block_config['year'] );
$xtpl->assign( 'NAME', $block_config['name'] );

$xtpl->parse( 'main' );
return $xtpl->text( 'main' );
}
}

if ( defined( 'NV_SYSTEM' ) )
{
$content = nv_block_test( $block_config );
}
Tạo thêm file Root/themes/theme_ban/blocks/global.tenbandat.tpl
<!-- BEGIN: main -->
<div>
Chào bạn: <strong>{NAME}</strong><br>
Tuổi của bạn là: <strong>{YEAR}</strong>
</div>
<!-- END: main -->
Kết quả:
Hướng dẫn viết Block cho Nukeviet 4.x

Như vậy bạn đã có một block theo đúng chuẩn của Nukeviet vấn đề của bạn ở đây là tùy biến nội dung trong hàm nv_block_test để có được những sản phẩm theo ý bạn muốn

global.tenbandatv2.zip

Post a Comment

0 Comments