Làm sao để tạo các gói nâng cấp?

 Hỗ trợ lập trình NukeViet

Hi mynukeviet, tôi có vấn đề này muốn hỏi.
Hiện tôi đang phát triển module cho khách hàng và đang muốn tạo các gói nâng cấp (như các gói nâng cấp phiên bản của NukeViet), thì phải làm thế nào?


Hi bạn, thật sự là một câu hỏi rất hay, mình nghĩ rất nhiều nhà phát triển quan tâm đến vấn đề này. Bạn đang phát triển NukeViet nên mình lấy luôn NukeViet làm ví dụ cho dễ hiểu nhé.

Bạn cần quan tâm đến những điểm như thế này:

Cơ chế nâng cấp hệ thống

Trong quá trình phát triển, chúng ta thường thay đổi về mã nguồn và Cơ sỡ dữ liệu (CSDL), nâng cấp thực chất là quá trình áp dụng những cái thay đổi (của hệ thống đang phát triển) lên hệ thống đang vận hành ổn định.

Làm sao để nâng cấp CSDL - áp dụng thay đổi về CSDL

Hãy chuẩn bị cho mình một nơi để lưu trữ các ghi chú, mình nghĩ đây là điều cần thiết nếu bạn là một lập trình viên. Thế này này nhé, ví dụ, trong quá trình phát triển, bạn cần thêm trường ngayhethan (Ngày hết hạn) vào bảng nv4_vi_about, thì bạn cần viết câu lệnh sql để thực hiện việc này. Bạn có thể thao tác qua giao diện phpmyadmin, sau mỗi hành đồng, phpmyadmin sẽ cung cấp cho bạn một đoạn sql về hành động đó. Đây là sql sau khi mình thay đổi:

ALTER TABLE `nv4_vi_about` ADD `ngayhethan` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `edit_time`;

Chú ý: Bạn cần tập hợp các câu lệnh sql sau mỗi lần thay đổi CSDL để viết file nâng cấp sau này

Làm sao để xuất ra cấu trúc thư mục, tập tin có thay đổi, hay bị xóa

Dĩ nhiên, trong quá trình phát triển chúng ta cần sửa (xóa hay thêm) rất nhiều tập tin, vài tập thì thì không sao, có thể nhớ nhưng giả sử vài trăm tập tin thì thần thánh cũng không quản lý được hết. Mình sử dụng GIT (GIT là gì mình không nói ở đây, các bạn tìm hiểu thêm - và chắc chắn phải biết nó), đại loại trong trường hợp này, nó có thể giúp bạn:

  • Liệt kê các tập tin bị xóa đi
  • Xuất cấu trúc thư mục, tập tin được thay đổi, hoặc thêm mới

Viết mã nguồn thực thi các thay đổi bên trên

Sau khi đã có đủ lệnh sql thay đổi CSDL, cấu trúc tập tin thay đổi, danh sách tập tin bị xóa việc tiếp theo là viết mã để thực thi các thay đổi này một cách tự động.

  • Để đơn giản, với cấu trúc thư mục và tập tin thay đổi, yêu cầu khách hàng copy thủ công, đè lên hệ thống đang là được.
  • Với các thay đổi về CSDL, bạn cần viết nó vào file PHP để tự động thực thi khi. Đây là nội dung mình thường dùng, bạn có thể tham khảo
<?php

/**
 * @Project NUKEVIET 4.x
 * @Author mynukeviet (contact@mynukeviet.net)
 * @Copyright (C) 2015 mynukeviet. All rights reserved
 * @License GNU/GPL version 2 or any later version
 * @Createdate Wed, 02 Dec 2015 08:26:04 GMT
 */
define('NV_SYSTEM', true);

// Xac dinh thu muc goc cua site
define('NV_ROOTDIR', pathinfo(str_replace(DIRECTORY_SEPARATOR, '/', __file__), PATHINFO_DIRNAME));

require NV_ROOTDIR . '/includes/mainfile.php';
require NV_ROOTDIR . '/includes/core/user_functions.php';

// Duyệt tất cả các ngôn ngữ
$language_query = $db->query('SELECT lang FROM ' . $db_config['prefix'] . '_setup_language WHERE setup = 1');
while (list ($lang) = $language_query->fetch(3)) {
    // Duyet bookhouse va module ao
    $mquery = $db->query("SELECT title, module_data FROM " . $db_config['prefix'] . "_" . $lang . "_modules WHERE module_file = 'bookhouse'");
    while (list ($mod, $mod_data) = $mquery->fetch(3)) {
        $_sql = array();

       // đây là danh sách các câu lệnh sql
        $_sql[] = "UPDATE " . $db_config['prefix'] . "_" . $lang . "_" . $mod_data . "_config SET config_value = 'viewgrid' WHERE config_name = 'display_type';";

        $_sql[] = "INSERT INTO " . $db_config['prefix'] . "_" . $lang . "_" . $mod_data . "_config (config_name, config_value) VALUES ('display_data', '0');";

        if (! empty($_sql)) {
            foreach ($_sql as $sql) {
                try {
                    $db->query($sql);
                } catch (PDOException $e) {
                    //
                }
            }
            $nv_Cache->delMod($mod);
        }
    }
}

die('OK');

Vâng cảm ơn bạn, mình tìm hiểu thử.

Bạn cần đăng nhập để tham gia thảo luận

Trung tâm ứng dụng NukeViet
Ghi rõ nguồn khi sao chép thông tin từ website này.

Powered by NukeViet - a product of VINADES.,JSC