<!DOCTYPE html>
    <html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
    <head>
<title>Hướng dẫn nâng cấp module từ NukeViet 4.5.00 lên NukeViet 4.5.02</title>
<meta name="description" content="Hướng dẫn sử dụng lập trình Nukeviet">
<meta name="keywords" content="lập trình nukeviet">
<meta name="news_keywords" content="lập trình nukeviet">
<meta name="author" content="Thiết kế website Nukeviet 4.6 - Module Nukeviet - Giao Diện Nukeviet - Themes Nukeviet  - Block Nukeviet  - Diễn đàn Nukeviet">
<meta name="copyright" content="Thiết kế website Nukeviet 4.6 - Module Nukeviet - Giao Diện Nukeviet - Themes Nukeviet  - Block Nukeviet  - Diễn đàn Nukeviet [nukeviet@tms.vn]">
<meta name="generator" content="NukeViet v4.5">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Hướng dẫn nâng cấp module từ NukeViet 4.5.00 lên NukeViet 4.5.02">
<meta property="og:type" content="website">
<meta property="og:description" content="Hướng dẫn sử dụng lập trình Nukeviet">
<meta property="og:site_name" content="Thiết kế website Nukeviet 4.6 - Module Nukeviet - Giao Diện Nukeviet - Themes Nukeviet  - Block Nukeviet  - Diễn đàn Nukeviet">
<meta property="og:image" content="https://nukevietnam.com/uploads/web-designing-company-1407927.jpg">
<meta property="og:image:url" content="https://nukevietnam.com/uploads/web-designing-company-1407927.jpg">
<meta property="og:image:type" content="image/jpeg">
<meta property="og:image:width" content="1263">
<meta property="og:image:height" content="629">
<meta property="og:image:alt" content="Thiết kế website Nukeviet 4.6 - Module Nukeviet - Giao Diện Nukeviet - Themes Nukeviet  - Block Nukeviet  - Diễn đàn Nukeviet">
<meta property="og:url" content="https://nukevietnam.com/huong-dan/savefile/cai-dat-cap-nhat-nukeviet/huong-dan-nang-cap-module-tu-nukeviet-4-5-00-len-nukeviet-4-5-02-35.html">
<link rel="shortcut icon" href="https://nukevietnam.com/favicon.ico">
<link rel="canonical" href="https://nukevietnam.com/huong-dan/savefile/cai-dat-cap-nhat-nukeviet/huong-dan-nang-cap-module-tu-nukeviet-4-5-00-len-nukeviet-4-5-02-35.html">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/" title="Hướng dẫn sử dụng lập trình Nukeviet" type="application/rss+xml">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/loi-thuong-gap-nukeviet/" title="Hướng dẫn sử dụng lập trình Nukeviet - Lỗi thường gặp" type="application/rss+xml">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/van-hanh-quan-tri/" title="Hướng dẫn sử dụng lập trình Nukeviet - Vận hành - Quản trị" type="application/rss+xml">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/thiet-ke-giao-dien-rip-theme-nukeviet/" title="Hướng dẫn sử dụng lập trình Nukeviet - Giao diện" type="application/rss+xml">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/cai-dat-cap-nhat-nukeviet/" title="Hướng dẫn sử dụng lập trình Nukeviet - Cài đặt - Cập nhật" type="application/rss+xml">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/lap-trinh-nukeviet/" title="Hướng dẫn sử dụng lập trình Nukeviet - Lập trình nukeviet" type="application/rss+xml">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/cau-hinh-website/" title="Hướng dẫn sử dụng lập trình Nukeviet - Cấu hình website" type="application/rss+xml">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/module-tin-tuc/" title="Hướng dẫn sử dụng lập trình Nukeviet - Module tin tức" type="application/rss+xml">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/module-san-pham/" title="Hướng dẫn sử dụng lập trình Nukeviet - Module sản phẩm" type="application/rss+xml">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/module-lien-he/" title="Hướng dẫn sử dụng lập trình Nukeviet - Module liên hệ" type="application/rss+xml">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/giao-dien-block/" title="Hướng dẫn sử dụng lập trình Nukeviet - Giao diện - Block" type="application/rss+xml">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/phan-mem-may-chu/" title="Hướng dẫn sử dụng lập trình Nukeviet - Phần mềm máy chủ" type="application/rss+xml">
<link rel="alternate" href="https://nukevietnam.com/huong-dan/rss/directadmin/" title="Hướng dẫn sử dụng lập trình Nukeviet - Directadmin" type="application/rss+xml">
<link rel="preload" as="script" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/js/language/vi.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/js/global.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/js/site.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://nukevietnam.com/themes/default/js/huong-dan.js" type="text/javascript">
<link rel="preload" as="script" href="https://nukevietnam.com/themes/default/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://nukevietnam.com/themes/default/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/tms/js/swiper.js" type="text/javascript">
<link rel="preload" as="script" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/tms/js/tms_menu.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.googletagmanager.com/gtag/js?id=G-RB45N968LV" type="text/javascript">
<link rel="preload" as="script" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/tms/js/bootstrap.min.js" type="text/javascript">
<link rel="preload" as="style" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/tms/css/bootstrap.min.css" type="text/css">
<link rel="preload" as="style" href="https://nukevietnam.com/themes/default/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://nukevietnam.com/themes/default/css/style.responsive.css" type="text/css">
<link rel="preload" as="style" href="https://nukevietnam.com/themes/default/css/huong-dan.css" type="text/css">
<link rel="preload" as="style" href="https://nukevietnam.com/themes/default/css/custom.css" type="text/css">
<link rel="preload" as="style" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/tms/css/swiper.css" type="text/css">
<link rel="preload" as="style" href="https://nukevietnam.com/themes/default/css/tms_menu.css" type="text/css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/tms/css/bootstrap.min.css">
<link rel="stylesheet" href="https://nukevietnam.com/themes/default/css/style.css">
<link rel="stylesheet" href="https://nukevietnam.com/themes/default/css/style.responsive.css">
<link rel="StyleSheet" href="https://nukevietnam.com/themes/default/css/huong-dan.css">
<link rel="stylesheet" href="https://nukevietnam.com/themes/default/css/custom.css">
<link href="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/tms/css/swiper.css" type="text/css" rel="stylesheet" />
<link rel="stylesheet" href="https://nukevietnam.com/themes/default/css/tms_menu.css" />
<style>body{background: #fff;}
</style>
<script>!function(e,t,a,n){e[n]=e[n]||[],e[n].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var g=t.getElementsByTagName(a)[0],m=t.createElement(a);m.async=!0,m.src="https://www.googletagmanager.com/gtm.js?id=GTM-MKJFRB9V",g.parentNode.insertBefore(m,g)}(window,document,"script","dataLayer");</script>
</head>
    <body>
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MKJFRB9V" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<div class="container-fluid"style="background-color:#fff;">
<div id="print">
    <div id="hd_print">
        <h2 class="pull-left">Thiết kế website Nukeviet 4.6 - Module Nukeviet - Giao Diện Nukeviet - Themes Nukeviet  - Block Nukeviet  - Diễn đàn Nukeviet</h2>
        <p class="pull-right"><a title="Thiết kế website Nukeviet 4.6 - Module Nukeviet - Giao Diện Nukeviet - Themes Nukeviet  - Block Nukeviet  - Diễn đàn Nukeviet" href="https://nukevietnam.com/">https://nukevietnam.com</a></p>
    </div>
    <div class="clear"></div>
    <hr />
    <div id="content">
        <h1>Hướng dẫn nâng cấp module từ NukeViet 4.5.00 lên NukeViet 4.5.02</h1>
        <ul class="list-inline">
            <li>Thứ ba - 21/06/2022 22:46</li>
            <li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="https://nukevietnam.com/#" data-toggle="winCMD" data-cmd="print">In ra</a></li>
            <li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="https://nukevietnam.com/#"  data-toggle="winCMD" data-cmd="close">Đóng cửa sổ này</a></li>
        </ul>
        <div class="clear"></div>
        <div id="hometext">
            Do đó bạn cần tìm và đổi tên các nút submit của form, và tìm các thẻ input của form nếu có &#91;name=submit&#93; cần đổi sang giá trị khác
        </div>
                <div class="imghome">
            <img alt="Hướng dẫn nâng cấp module từ NukeViet 4.5.00 lên NukeViet 4.5.02" src="https://nukevietnam.com/uploads/huong-dan/2022_06/nukeviet-4.1-official-on-pc-after-setup.png" width="460" class="img-thumbnail" />
        </div>
        <div class="clear"></div>
        <div id="bodytext" class="clearfix">
            <h3>Chỉnh sửa để chức năng lọc mã html nguy hiểm hoạt động trước khi submit form</h3><p>Lưu ý 2 vấn đề:</p><ul>	<li><code>input&#91;type=submit&#93;</code>&nbsp;của các html-form không được có thuộc tính&nbsp;<code>&#91;name=submit&#93;</code></li>	<li>Trong html-form không được có Element có&nbsp;<code>&#91;name=submit&#93;</code></li></ul><p>Do đó bạn cần tìm và đổi tên các nút submit của form, và tìm các thẻ input của form nếu có&nbsp;<code>&#91;name=submit&#93;</code>&nbsp;cần đổi sang giá trị khác</p><blockquote><p>Lưu ý: Phần này không bắt buộc phải thực hiện</p></blockquote><h1>1. URL chính tắc: $page_url, $base_url và $canonicalUrl</h1><ul>	<li>$page_url là đường dẫn tuyệt đối từ thư mục gốc của site đến trang đang xử lý, bao gồm cả số trang (nếu có).</li>	<li>$base_url là đường dẫn tuyệt đối từ thư mục gốc của site đến trang đang xử lý, không bao gồm số trang.</li>	<li>$canonicalUrl là url chính tắc đến trang đang xử lý, là tổ hợp của NV_MAIN_DOMAIN và $page_url.</li></ul><p>Các biến $page_url và $canonicalUrl cần được xác định ở tất cả các khu vực hiển thị ra bên ngoài site, biến $base_url cần được xác định nếu khu vực đó có phân trang.</p><p>Bắt buộc sử dụng hàm getCanonicalUrl để xác định $canonicalUrl. Hàm này cũng có chức năng kiểm tra chuỗi truy vấn REQUEST_URI với url chính tắc. (Chi tiết về hàm getCanonicalUrl tại&nbsp;<a href="https://github.com/nukeviet/nukeviet/blob/0749136b86bcc8cca9711fbcfdf51dc2354aef1e/includes/functions.php#L1773-L1821">https://github.com/nukeviet/nukeviet/blob/0749136b86bcc8cca9711fbcfdf51dc2354aef1e/includes/functions.php#L1773-L1821</a>)</p><p>Ví dụ về thiết lập URL chính tắc:</p><pre>$page_url = $base_url = NV_BASE_SITEURL . &#039;index.php?&#039; . NV_LANG_VARIABLE . &#039;=&#039; . NV_LANG_DATA . &#039;&amp;amp;&#039; . NV_NAME_VARIABLE . &#039;=&#039; . $module_name;$page = 1;if (isset($array_op&#91;0&#93;) and substr($array_op&#91;0&#93;, 0, 5) == &#039;page-&#039;) {    $page = intval(substr($array_op&#91;0&#93;, 5));}if ($page &gt; 1) {    $page_url .= &#039;&amp;amp;&#039; . NV_OP_VARIABLE . &#039;=page-&#039; . $page;}$canonicalUrl = getCanonicalUrl($page_url);</pre><h1>2.Đánh số trang</h1><p>Bắt buộc sử dụng betweenURLs - hàm kiểm tra việc đánh số trang và xác định trang trước, trang sau. Ở trang cần đánh số trang, sau khi tính được tổng số item để chia trang xong, cần thêm ngay xuống dưới:</p><pre>$urlappend = &#039;&amp;amp;&#039; . NV_OP_VARIABLE . &#039;=page-&#039;;betweenURLs($page, ceil($num_items/$per_page), $base_url, $urlappend, $prevPage, $nextPage);</pre><p>Trong đó:</p><ul>	<li>$page: Số trang hiện tại được xác định trước đó</li>	<li>$num_items: Tổng số item để chia trang được xác định bằng cách đọc CSDL trước đó</li>	<li>$per_page: Số item trên 1 trang</li>	<li>$base_url: Đường dẫn từ thư mục gốc đến trang đang xử lý (không có page)</li>	<li>$urlappend: phần thêm vào $base_url khi đánh số trang (có thể là &#039;&amp;&#039; . NV_OP_VARIABLE . &#039;=page-&#039;, hay &#039;/page-&#039;, hay &#039;&amp;page=&#039;...)</li>	<li>$prevPage và $nextPage: là 2 biến toàn cục được cập nhật sau khi gọi hàm betweenURLs Xem ví dụ tại:&nbsp;<a href="https://github.com/nukeviet/nukeviet/blob/38a817001e7961f08379e5a7a90ede0596a3084a/modules/news/funcs/main.php#L64">https://github.com/nukeviet/nukeviet/blob/38a817001e7961f08379e5a7a90ede0596a3084a/modules/news/funcs/main.php#L64</a></li></ul><h1>3. Lỗi Cross-site Scripting (XSS) tiềm ẩn</h1><p>Tìm tất cả:</p><pre>nv_rss_generate($channel, $items);</pre><p>Thay bằng:</p><pre>$atomlink = NV_BASE_SITEURL . &quot;index.php?&quot; . NV_LANG_VARIABLE . &quot;=&quot; . NV_LANG_DATA . &quot;&amp;amp;&quot; . NV_NAME_VARIABLE . &quot;=&quot; . $module_name . &quot;&amp;amp;&quot; . NV_OP_VARIABLE . &quot;=&quot; . $module_info&#91;&#039;alias&#039;&#93;&#91;&#039;rss&#039;&#93;;nv_rss_generate($channel, $items, $atomlink);</pre><h1>4. Tích hợp reCaptcha v3</h1><p>Việc quản lý captcha di chuyển từ cấu hình chung toàn site đến cấu hình từng module. Do đó sẽ không còn 2 biến toàn cục $global_config&#91;&#039;captcha_type&#039;&#93; và $global_config&#91;&#039;gfx_chk&#039;&#93;. Thêm biến toàn cục mới $global_config&#91;&#039;recaptcha_ver&#039;&#93; có giá trị là phiên bản recaptcha được áp dụng (2 hay 3). Nếu module có sử dụng captcha, cần sửa lại như hướng dẫn sau:</p><ul>	<li>Thêm cấu hình sử dụng captcha vào khu vực cấu hình từng module để có được biến $module_config&#91;$module_name&#93;&#91;&#039;captcha_type&#039;&#93; với giá trị là captcha/recaptcha/rỗng. Cần thêm vào CSDL cấu hình này. Ví dụ:</li></ul><pre>INSERT INTO `nv4_config` (`lang`, `module`, `config_name`, `config_value`) VALUES (&#039;vi&#039;, &#039;ten-module&#039;, &#039;captcha_type&#039;, &#039;captcha&#039;);</pre><p>Sau đó chỉnh sửa files, tương tự như ở đây:</p><ol>	<li><a href="https://github.com/nukeviet/nukeviet/commit/efcfdc0324e583ad0c5cef49bc1d46b3a1d7d40f#diff-7499cf11347b213d03431440d71849c245e72c7abd1edc244299fddab8e3051a">https://github.com/nukeviet/nukeviet/commit/efcfdc0324e583ad0c5cef49bc1d46b3a1d7d40f#diff-7499cf11347b213d03431440d71849c245e72c7abd1edc244299fddab8e3051a</a></li>	<li><a href="https://github.com/nukeviet/nukeviet/commit/efcfdc0324e583ad0c5cef49bc1d46b3a1d7d40f#diff-179c8cb54b1c3019416f50f1027fc58e431ef4c40ff888c1024d6e3347fb696c">https://github.com/nukeviet/nukeviet/commit/efcfdc0324e583ad0c5cef49bc1d46b3a1d7d40f#diff-179c8cb54b1c3019416f50f1027fc58e431ef4c40ff888c1024d6e3347fb696c</a></li>	<li><a href="https://github.com/nukeviet/nukeviet/commit/efcfdc0324e583ad0c5cef49bc1d46b3a1d7d40f#diff-e541321f578e159ac60c9505ca114ce1ad12e2f40f2d51375c44a7f87529dfe0">https://github.com/nukeviet/nukeviet/commit/efcfdc0324e583ad0c5cef49bc1d46b3a1d7d40f#diff-e541321f578e159ac60c9505ca114ce1ad12e2f40f2d51375c44a7f87529dfe0</a></li></ol><ul>	<li>Sửa ở khu vực xác thực captcha, thường ở trong các file kiểu như modules/ten-module/funcs/ten_file.php: Thêm lên đầu trang:</li></ul><pre>// Xác định có áp dụng reCaptcha hay không$reCaptchaPass = (!empty($global_config&#91;&#039;recaptcha_sitekey&#039;&#93;) and !empty($global_config&#91;&#039;recaptcha_secretkey&#039;&#93;) and ($global_config&#91;&#039;recaptcha_ver&#039;&#93; == 2 or $global_config&#91;&#039;recaptcha_ver&#039;&#93; == 3));</pre><p>Tìm đến khu vực xác thực captcha, thường là ở quanh khu vực có từ khóa &quot;nv_capcha_txt&quot;, sửa thành:</p><pre>    unset($fcaptcha);    if ($module_config&#91;$module_name&#93;&#91;&#039;captcha_type&#039;&#93; == &#039;recaptcha&#039; and $reCaptchaPass) {        // Xác định giá trị của captcha nhập vào nếu sử dụng reCaptcha        $fcaptcha = $nv_Request-&gt;get_title(&#039;g-recaptcha-response&#039;, &#039;post&#039;, &#039;&#039;);    } elseif ($module_config&#91;$module_name&#93;&#91;&#039;captcha_type&#039;&#93; == &#039;captcha&#039;) {        // Xác định giá trị của captcha nhập vào nếu sử dụng captcha hình        $fcaptcha = $nv_Request-&gt;get_title(&#039;fcode&#039;, &#039;post&#039;, &#039;&#039;);    }    // Kiểm tra tính hợp lệ của captcha nhập vào, nếu không hợp lệ =&gt; thông báo lỗi    if (isset($fcaptcha) and !nv_capcha_txt($fcaptcha, $module_config&#91;$module_name&#93;&#91;&#039;captcha_type&#039;&#93;)) {        nv_jsonOutput(&#91;            &#039;status&#039; =&gt; &#039;error&#039;,            &#039;input&#039; =&gt; ($module_config&#91;$module_name&#93;&#91;&#039;captcha_type&#039;&#93; == &#039;recaptcha&#039;) ? &#039;&#039; : &#039;fcode&#039;,            &#039;mess&#039; =&gt; ($module_config&#91;$module_name&#93;&#91;&#039;captcha_type&#039;&#93; == &#039;recaptcha&#039;) ? $lang_global&#91;&#039;securitycodeincorrect1&#039;&#93; : $lang_global&#91;&#039;securitycodeincorrect&#039;&#93;        &#93;);    }</pre><ul>	<li>Sửa ở khu vực quản lý hiển thị captcha, thường ở trong các file kiểu như modules/ten_module/theme.php Chỗ nào có:</li></ul><pre>    if ($global_config&#91;&#039;captcha_type&#039;&#93; == 2) {        ...        $xtpl-&gt;parse(&#039;main.recaptcha&#039;);    }</pre><p>Thay bằng:</p><pre>    // Thêm vào global 3 biến toàn cục này (nếu chưa có)    global $global_config, $module_config, $module_name;    // Xác định có áp dụng reCaptcha hay không    $reCaptchaPass = (!empty($global_config&#91;&#039;recaptcha_sitekey&#039;&#93;) and !empty($global_config&#91;&#039;recaptcha_secretkey&#039;&#93;) and ($global_config&#91;&#039;recaptcha_ver&#039;&#93; == 2 or $global_config&#91;&#039;recaptcha_ver&#039;&#93; == 3));    // Nếu dùng reCaptcha v3    if ($module_config&#91;$module_name&#93;&#91;&#039;captcha_type&#039;&#93; == &#039;recaptcha&#039; and $reCaptchaPass and $global_config&#91;&#039;recaptcha_ver&#039;&#93; == 3) {        $xtpl-&gt;parse(&#039;main.recaptcha3&#039;);    }    // Nếu dùng reCaptcha v2    elseif ($module_config&#91;$module_name&#93;&#91;&#039;captcha_type&#039;&#93; == &#039;recaptcha&#039; and $reCaptchaPass and $global_config&#91;&#039;recaptcha_ver&#039;&#93; == 2) {        ...        $xtpl-&gt;parse(&#039;main.recaptcha&#039;);    }</pre><ul>	<li>Sửa ở các file tpl hiển thị captcha, ví dụ: themes/default/module/users/login_form.tpl. Tìm đến FORM có chứa các mã hiển thị captcha, ví dụ:</li></ul><pre>&lt;form action=&quot;{USER_LOGIN}&quot; method=&quot;post&quot; onsubmit=&quot;return login_validForm(this);&quot; autocomplete=&quot;off&quot; novalidate&gt;</pre><p>Thay bằng:</p><pre>&lt;form action=&quot;{USER_LOGIN}&quot; method=&quot;post&quot; onsubmit=&quot;return login_validForm(this);&quot; autocomplete=&quot;off&quot; novalidate&lt;!-- BEGIN: recaptcha3 --&gt; data-recaptcha3=&quot;1&quot;&lt;!-- END: recaptcha3 --&gt;&gt;</pre><p>Tìm đến đoạn kiểu như:</p><pre>&lt;!-- BEGIN: recaptcha --&gt;...&lt;div id=&quot;{RECAPTCHA_ELEMENT}&quot;&gt;&lt;/div&gt;...&lt;!-- END: recaptcha --&gt;</pre><p>div có chứa id=&quot;{RECAPTCHA_ELEMENT}&quot; thay bằng:</p><pre>&lt;div id=&quot;{RECAPTCHA_ELEMENT}&quot; data-toggle=&quot;recaptcha&quot; data-pnum=&quot;4&quot; data-btnselector=&quot;&#91;type=submit&#93;&quot;&gt;&lt;/div&gt;</pre><p>Trong đó giá trị của data-pnum bằng số bước ngược lên kể từ phần tử này đến khi gặp thẻ FORM (chính là pnum của nv_recaptcha_elements.push ngay dưới), data-btnselector là selector nhận diện nút submit của FORM. Xóa toàn bộ đoạn mã javascript ở dưới (&lt;script type=&quot;text/javascript&quot;&gt;...&lt;/script&gt;)</p><h1>5. Thay NV_BASE_SITEURL thành NV_STATIC_URL</h1><p>(Không bắt buộc làm việc này nếu code của bạn chỉ có 1 hosting duy nhất)</p><p>Tìm tất cả:</p><pre><code>NV_BASE_SITEURL . NV_ASSETS_DIR</code></pre><p>Nếu đó là đường dẫn đến file tĩnh (js, css, jpg, png, gif...) thay bằng:</p><pre><code>NV_STATIC_URL . NV_ASSETS_DIR</code></pre><p>Tìm tất cả:</p><pre><code>NV_BASE_SITEURL . &#039;themes</code></pre><p>Nếu đó là đường dẫn đến file tĩnh (js, css, jpg, png, gif...) thay bằng:</p><pre><code>NV_STATIC_URL . &#039;themes</code></pre><p>Tìm tất cả:</p><pre><code>NV_BASE_SITEURL . NV_EDITORSDIR</code></pre><p>Nếu đó là đường dẫn đến file tĩnh (js, css, jpg, png, gif...) thay bằng:</p><pre><code>NV_STATIC_URL . NV_EDITORSDIR</code></pre><p>Tìm tất cả:</p><pre><code>{NV_BASE_SITEURL}{NV_ASSETS_DIR}</code></pre><p>Nếu đó là đường dẫn đến file tĩnh (js, css, jpg, png, gif...) thay bằng:</p><pre><code>{NV_STATIC_URL}{NV_ASSETS_DIR}</code></pre><p>Tìm tất cả:</p><pre><code>{NV_BASE_SITEURL}{NV_EDITORSDIR}</code></pre><p>Nếu đó là đường dẫn đến file tĩnh (js, css, jpg, png, gif...) thay bằng:</p><pre><code>{NV_STATIC_URL}{NV_EDITORSDIR}</code></pre><p>Tìm tất cả:</p><pre><code>{NV_BASE_SITEURL}themes</code></pre><p>Nếu đó là đường dẫn đến file tĩnh (js, css, jpg, png, gif...) thay bằng:</p><pre><code>{NV_STATIC_URL}themes</code></pre><h1>6. rel=&quot;noopener noreferrer nofollow&quot;</h1><p>Vì lý do bảo mật, hệ thống tự động thêm rel=&quot;noopener noreferrer nofollow&quot; vào các link chuyển hướng đến một site khác. Để tránh việc thêm này bạn cần tự thêm vào link đoạn sau:</p><pre><code>rel=&quot;dofollow&quot;</code></pre><h1>7. Thêm cấu hình bình luận</h1><p>Nếu module của bạn có chức năng bình luận, tức trong file action_mysql.php có dòng này</p><pre>$sql_create_module&#91;&#93; = &#039;INSERT INTO &#039; . NV_CONFIG_GLOBALTABLE . &quot; (lang, module, config_name, config_value) VALUES (&#039;&quot; . $lang . &quot;&#039;, &#039;&quot; . $module_name . &quot;&#039;, &#039;auto_postcomm&#039;, &#039;1&#039;)&quot;;</pre><p>Bổ sung vào file action_mysql.php</p><pre>$sql_create_module&#91;&#93; = &#039;INSERT INTO &#039; . NV_CONFIG_GLOBALTABLE . &quot; (lang, module, config_name, config_value) VALUES (&#039;&quot; . $lang . &quot;&#039;, &#039;&quot; . $module_name . &quot;&#039;, &#039;captcha_area_comm&#039;, &#039;1&#039;)&quot;;$sql_create_module&#91;&#93; = &#039;INSERT INTO &#039; . NV_CONFIG_GLOBALTABLE . &quot; (lang, module, config_name, config_value) VALUES (&#039;&quot; . $lang . &quot;&#039;, &#039;&quot; . $module_name . &quot;&#039;, &#039;captcha_type_comm&#039;, &#039;captcha&#039;)&quot;;</pre><ul>	<li>&nbsp;</li></ul>
        </div>
    </div>
    <div id="footer" class="clearfix">
        <div id="url">
            <strong>URL của bản tin này: </strong><a href="https://nukevietnam.com/huong-dan/savefile/cai-dat-cap-nhat-nukeviet/huong-dan-nang-cap-module-tu-nukeviet-4-5-00-len-nukeviet-4-5-02-35.html" title="Hướng dẫn nâng cấp module từ NukeViet 4.5.00 lên NukeViet 4.5.02">https://nukevietnam.com/huong-dan/savefile/cai-dat-cap-nhat-nukeviet/huong-dan-nang-cap-module-tu-nukeviet-4-5-00-len-nukeviet-4-5-02-35.html</a>
        </div>
        <div class="clear"></div>
        <div class="copyright">
            &copy; Thiết kế website Nukeviet 4.6 - Module Nukeviet - Giao Diện Nukeviet - Themes Nukeviet  - Block Nukeviet  - Diễn đàn Nukeviet
        </div>
        <div id="contact">
            <a href="mailto:nukeviet@tms.vn">nukeviet@tms.vn</a>
        </div>
    </div>
</div>
</div>
        <!-- Captcha-Modal Required!!! -->
        <div id="modal-img-captcha" class="modal fade" tabindex="-1" aria-hidden="true">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                        <div class="modal-title">Xác minh &laquo;Tôi không phải người máy&raquo;</div>
                    </div>
                    <div class="modal-body text-center">
                        <div class="margin-bottom">
                            <img class="captchaImg mr-1" src="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/images/pix.svg" width="150" height="40" alt="" title="" /><span class="pointer" data-toggle="change_captcha" data-obj="#modal-captcha-value" title="Thay mới"><em class="fa fa-refresh"></em></span>
                        </div>
                        <div class="margin-bottom">
                            <div>
                                <p>Mã bảo mật</p>
                                <p><input type="text" id="modal-captcha-value" value="" class="form-control display-inline-block required" maxlength="6" style="width:200px" data-toggle="enterToEvent" data-obj="#modal-captcha-button" data-obj-event="click"/></p>
                                <div class="invalid-feedback"></div>
                            </div>
                        </div>
                        <p><button type="button" id="modal-captcha-button" class="btn btn-primary">Xác nhận</button></p>
                    </div>
                </div>
            </div>
        </div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng site, <a data-toggle="timeoutsesscancel" href="https://nukevietnam.com/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
<script src="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_assets_dir="assets",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="huong-dan",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="tms",nv_check_pass_mstime=7738000,nv_area_admin=0,nv_safemode=0,theme_responsive=1,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",XSSsanitize=1;</script>
<script src="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/js/language/vi.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/js/DOMPurify/purify3.js"></script>
<script src="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/js/global.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/js/site.min.js"></script>
<script src="https://nukevietnam.com/themes/default/js/huong-dan.js"></script>
<script src="https://nukevietnam.com/themes/default/js/main.js"></script>
<script src="https://nukevietnam.com/themes/default/js/custom.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/tms/js/swiper.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/tms/js/tms_menu.js"></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-RB45N968LV"></script>
<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag('js',new Date);gtag('config','G-RB45N968LV');</script>
<script src="https://cdn.jsdelivr.net/gh/tmsholdings/thuongmaiso/assets/tms/js/bootstrap.min.js"></script>
</body>
</html>