Tìm kiếm nhanh

Thêm bình luận vào func bất kỳ trong NukeViet 4.x

Thảo luận trong 'Coding' đăng bởi nhimthulinh, 22/06/2016 08:09.

  • nhimthulinh

    nhimthulinh

    Điều hành viên Quản trị diễn đàn

    Module Comment trên NukeViet 4.x được tách làm module hệ thống, có chức năng quản lý bình luận chung cho các module. Tận dụng tính năng này, ta có thể thêm các ô comment vào khu vực tuỳ chọn trên giao diện NukeViet.
    Bài viết sau giúp bạn thêm ô bình luận (comment) vào chức năng (func) tuỳ ý trên một module của NukeViet 4.x. Bài viết dựa trên code tham chiếu mặc định của modules news trên NukeViet 4.x.
    1) Xóa comment của module cũ đi nếu có
    2) Thêm đoạn sau vào file modules\module_name\funcs\module_op.php
    // comment
    if( isset( $site_mods['comment'] ) and isset( $module_config[$module_name]['activecomm'] ) )
    {
    define( 'NV_COMM_ID', $id ); //ID bài viết
    define( 'NV_COMM_AREA', $module_info['funcs'][$op]['func_id'] );//để đáp ứng comment ở bất cứ đâu không cứ là bài viết
    //check allow comemnt
    $allowed = $module_config[$module_name]['allowed_comm'];//tuy vào module để lấy cấu hình. Nếu là module news thì có cấu hình theo bài viết
    if( $allowed == '-1' )
    {
    $allowed = $news_contents['allowed_comm'];
    }
    define( 'NV_PER_PAGE_COMMENT', 5 ); //Số bản ghi hiển thị bình luận
    require_once NV_ROOTDIR . '/modules/comment/comment.php';
    $area = ( defined( 'NV_COMM_AREA' ) ) ? NV_COMM_AREA : 0;
    $checkss = md5( $module_name . '-' . $area . '-' . NV_COMM_ID . '-' . $allowed . '-' . NV_CACHE_PREFIX );
    //get url comment
    $url_info = parse_url( $client_info['selfurl'] );
    $content_comment = nv_comment_module( $module_name, $checkss, $area, NV_COMM_ID, $allowed, 1 );
    }
    else
    {
    $content_comment = '';
    }

    Trong đó, bạn cần lưu ý:
    1. define( 'NV_COMM_ID', $id ): $id là ID của bài viết, chủ đề,... (ID xác định trang)
    2. Nếu module bạn có cấu hình hiển thị comment theo “từng bài viết cụ thể” thì thêm đoạn này (Xem code mẫu bên trên) để xác định cấu hình từ bài viết. Ngược lại, bỏ đoạn này đi, thì module nhận cấu hình từ Cấu hình module comment.
    if( $allowed == '-1' ){   
    $allowed = $news_contents['allowed_comm'];
    }
    $news_contents['allowed_comm'] là ID nhóm được phân quyền comment tại bài viết, thay bằng tham số tương ứng với module của bạn.
    3) Truyền biến $content_comment sang file xử lý giao diện (theme.php, nếu có)
     
    Cấu trúc truyền biến bạn có thể tham khảo dưới đây :
     
    $contents = detail_theme( $news_contents, $array_keyword, $related_new_array, $related_array, $topic_array, $content_comment );
    4) Tại function xử lý giao diện ( theme.php), gọi hiển thị nội dung form bình luận.
    if( !empty( $content_comment ) ){        $xtpl->assign( 'CONTENT_COMMENT', $content_comment );        $xtpl->parse( 'main.comment' );}
    5) Tại file giao diện (*.tpl), thêm HTML hiển thị nội dung bình luận.
    <!-- BEGIN: comment -->{CONTENT_COMMENT}<!-- END: comment -->
    6) Trong file action tạo CSDL (modules/ten-module/action_mysql.php) của module cần thêm đoạn code sau để tạo dữ liệu cài đặt cho module
    Tìm
    $sql_create_module = $sql_drop_module;
    Thêm lên trên
    $result = $db->query( "SHOW TABLE STATUS LIKE '" . $db_config['prefix'] . "\_" . $lang . "\_comment'" );$rows = $result->fetchAll();if( sizeof( $rows ) ){        $sql_drop_module[] = "DELETE FROM " . $db_config['prefix'] . "_" . $lang . "_comment WHERE module='" . $module_name . "'";}
    Thêm xuống cuối file
     
    // Comments
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . NV_LANG_DATA . "', '" . $module_name . "', 'auto_postcomm', '1')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . NV_LANG_DATA . "', '" . $module_name . "', 'allowed_comm', '6')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . NV_LANG_DATA . "', '" . $module_name . "', 'view_comm', '6')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . NV_LANG_DATA . "', '" . $module_name . "', 'setcomm', '4')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . NV_LANG_DATA . "', '" . $module_name . "', 'activecomm', '1')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . NV_LANG_DATA . "', '" . $module_name . "', 'emailcomm', '0')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . NV_LANG_DATA . "', '" . $module_name . "', 'adminscomm', '')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . NV_LANG_DATA . "', '" . $module_name . "', 'sortcomm', '0')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . NV_LANG_DATA . "', '" . $module_name . "', 'captcha', '1')";
    7) Nếu module bạn họat động trước đó và đã có dữ liệu, thực hiện bước này để nâng cấp CSDL, ngược lại, bỏ qua bước này.
    Tạo file update-comment.php với nội dung bên dưới, đặt ngang hàng với file index.php
     
    <?php
    /**
    * @Project NUKEVIET 4.x
    * @Author VINADES.,JSC (contact@vinades.vn)
    * @Copyright (C) 2014 VINADES.,JSC. All rights reserved
    * @License GNU/GPL version 2 or any later version
    * @Createdate Sat, 08 Feb 2014 06:33:39 GMT
    */
    define('NV_SYSTEM', true);
    require str_replace(DIRECTORY_SEPARATOR, '/', dirname(__file__)) . '/mainfile.php';
    require NV_ROOTDIR . '/includes/core/user_functions.php';
    if ( defined( 'NV_IS_SPADMIN' ) )
    {
    // Comments
    $module_name = 'page';// Sửa ứng với module
    $sql_create_module = array();
    // Comments
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . $lang . "', '" . $module_name . "', 'auto_postcomm', '1')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . $lang . "', '" . $module_name . "', 'allowed_comm', '-1')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . $lang . "', '" . $module_name . "', 'view_comm', '6')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . $lang . "', '" . $module_name . "', 'setcomm', '4')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . $lang . "', '" . $module_name . "', 'activecomm', '1')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . $lang . "', '" . $module_name . "', 'emailcomm', '0')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . $lang . "', '" . $module_name . "', 'adminscomm', '')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . $lang . "', '" . $module_name . "', 'sortcomm', '0')";
    $sql_create_module[] = "INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . $lang . "', '" . $module_name . "', 'captcha', '1')";
    foreach( $sql_create_module as $_sql )
    {
    $db->query( $_sql );
    }
    die( 'Thuc hien nang cap xong, hay xoa file nay ngay' );
    }
    else
    {
    die( 'Can thuc hien voi quyen admin toi cao' );
    }
    8/ Chức năng cập nhật số lượt comment
    Trong trường hợp bạn muốn thao tác dữ liệu trên module nhận chức năng comment
    Chức năng này yêu cầu bạn tạo thêm một file với tên là comment.php đặt vào thư mục modules/ten-module/. Có thể tham khảo nội dung dưới đây, được lấy từ modules/news/comment.php.
     
    <?php
    
    /**
     * @Project NUKEVIET 4.x
     * @Author VINADES.,JSC (contact@vinades.vn)
     * @Copyright (C) 2014 VINADES.,JSC. All rights reserved
     * @License GNU/GPL version 2 or any later version
     * @Createdate Tue, 21 Jan 2014 01:32:02 GMT
     */
    
    if( ! defined( 'NV_MAINFILE' ) )	die( 'Stop!!!' );
    
    $sql = 'SELECT listcatid FROM ' . NV_PREFIXLANG . '_' . $mod_info['module_data'] . '_rows WHERE id=' . $row['id'];
    list( $listcatid ) = $db->query( $sql )->fetch( 3 );
    
    // Cap nhat lai so luong comment duoc kich hoat
    $array_catid = explode( ',', $listcatid );
    $numf = $db->query( 'SELECT COUNT(*) FROM ' . NV_PREFIXLANG . '_comment where module= ' . $db->quote( $row['module'] ) . ' AND id= ' . $row['id'] . ' AND status=1' )->fetchColumn();
    
    $query = 'UPDATE ' . NV_PREFIXLANG . '_' . $mod_info['module_data'] . '_rows SET hitscm=' . $numf . ' WHERE id=' . $row['id'];
    $db->query( $query );
    foreach( $array_catid as $catid_i )
    {
    	$query = 'UPDATE ' . NV_PREFIXLANG . '_' . $mod_info['module_data'] . '_' . $catid_i . ' SET hitscm=' . $numf . ' WHERE id=' . $row['id'];
    	$db->query( $query );
    }
    // Het Cap nhat lai so luong comment duoc kich hoat
    9/ Chức năng chuyển đến URL có comment trong admin
    Chức năng này giúp bạn khi duyệt bình luận trong ACP có thể click vào link bình luận và được chuyển tiếp đến bài viết chứa comment muốn xem. Để làm được điều này, bạn cần tạo file view.php và đặt trong modules\tên-module\admin\
    Cấu trúc file PHP có thể tham khảo dưới đây :
     
    <?php
    
    /**
     * @Project NUKEVIET 4.x
     * @Author VINADES.,JSC (contact@vinades.vn)
     * @Copyright (C) 2014 VINADES.,JSC. All rights reserved
     * @License GNU/GPL version 2 or any later version
     * @Createdate 2-9-2010 14:43
     */
    
    if( ! defined( 'NV_IS_FILE_ADMIN' ) ) die( 'Stop!!!' );
    
    $check_permission = false;
    $rowcontent['id'] = $nv_Request->get_int( 'id', 'get,post', 0 );
    if( $rowcontent['id'] > 0 )
    {
    	$rowcontent = $db->query( 'SELECT * FROM ' . NV_PREFIXLANG . '_' . $module_data . '_rows where id=' . $rowcontent['id'] )->fetch();
    	if( ! empty( $rowcontent['id'] ) )
    	{
    		$arr_catid = explode( ',', $rowcontent['listcatid'] );
    		if( defined( 'NV_IS_ADMIN_MODULE' ) )
    		{
    			$check_permission = true;
    		}
    		else
    		{
    			$check_comments = 0;
    			$status = $rowcontent['status'];
    			foreach( $arr_catid as $catid_i )
    			{
    				if( isset( $array_cat_admin[$admin_id][$catid_i] ) )
    				{
    					if( $array_cat_admin[$admin_id][$catid_i]['admin'] == 1 )
    					{
    						++$check_comments;
    					}
    					else
    					{
    						if( $array_cat_admin[$admin_id][$catid_i]['comments'] == 1 )
    						{
    							++$check_comments;
    						}
    					}
    				}
    			}
    			if( $check_comments == sizeof( $arr_catid ) )
    			{
    				$check_permission = true;
    			}
    		}
    	}
    }
    if( $check_permission )
    {
    	Header( 'Location: ' . nv_url_rewrite( NV_BASE_SITEURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $module_name . '&' . NV_OP_VARIABLE . '=' . $global_array_cat[$rowcontent['catid']]['alias'] . '/' . $rowcontent['alias'] . '-' . $rowcontent['id'] . $global_config['rewrite_exturl'], true ) );
    	die();
    }
    else
    {
    	nv_info_die( $lang_global['error_404_title'], $lang_global['error_404_title'], $lang_global['admin_no_allow_func'] );
    }
    Tuỳ theo func mà bạn dự định thêm chức năng comment mà bạn cần điều chỉnh các truy vấn SQL cho chính xác để link được chuyển tiếp một cách phù hợp.

    Chúc bạn thành công !
    Nguồn tin: Biên tập bởi seoera.info

     

Chia sẻ trang này

Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây