Công cụ thành viên

Công cụ trang web


programming4:hook

Hook trong NukeViet 4.6

Hook chỉ có từ NukeViet 4.6 trở đi, thay thế cho plugin

Về việc đặt tên vị trí của hook:

Mặc định hệ thống đã tạo các vị trí sau đây:

  • sector1: là nơi đặt các hook được thực thi trước khi kết nối vào CSDL (trong includes/mainfile.php)
  • sector2: là nơi đặt các hook được thực thi ngay sau khi kết nối CSDL (trong includes/mainfile.php)
  • sector3: là nơi đặt các hook được thực thi sau khi đã định hình được nội dung HTML của trang (trong includes/footer.php)
  • sector4: là nơi đặt các hook được thực thi trước khi định hình nội dung HTML của trang (trong themes/tên_theme/theme.php)
  • sector5: là nơi đặt các hook được thực thi sau khi xác định tư cách thành viên của người dùng (trong index.php)
  • modify_global_config: là nơi đặt các hook được thực thi sau khi xác định xong biến $global_config (trong includes/mainfile.php)
  • change_site_buffer: là nơi đặt hook cdn_js_css_image.php (trong includes/footer.php)
  • check_server: là nơi đặt hook redirect_to_non_www.php (trong includes/mainfile.php)
  • get_qr_code: là nơi đặt hook qrcode.php (trong index.php)
  • db_slave_connect: là nơi đặt hook mysql_master_slave.php (trong includes/mainfile.php)
  • get_rewrite_domain: là nơi đặt hook rewrite_obsolute.php (trong includes/functions.php)
  • zalo_webhook: là nơi đặt hook zalo_webhook.php (trong includes/mainfile.php)

Lưu ý khi đặt tên vị trí mới của hook:

  1. Tên vị trí của hook được gắn với một vị trí nhất định và là duy nhất
  2. Tên vị trí của hook phải theo đúng chuẩn a-zA-Z0-9_
  3. Không nên tạo tên mới đối với các vị trí đã được đặt tên, thay vào đó sử dụng luôn tên đã được đặt này

Cách chuyển từ plugin sang hook

Để chuyển từ plugins sang hook, ta làm theo các bước sau:

  • Mục danh sách không đánh sốTìm đến file plugins cần chuyển sang hook.
  • Mục danh sách không đánh sốThường trong các file plugins này sẽ có 2 dạng: 1 là code trực tiếp, 2 là các functions. Xác định xem đâu là code chạy trực tiếp, đâu là functions.
  • Với code chạy trực tiếp, ta cho vào funcstion có dạng
nv_add_hook($module_name, $sector, $priority, function () {
  //di chuyển code vào đây
}

với $sector chính là ID của plugins, ví dụ plugins có id là 3, thì $sector = 'sector3' (Lưu ý, gán trực tiếp $sector vào function)

  • Còn các code dạng functions thì giữ nguyên, không cho vào nv_add_hook.
  • Xoá các file .ini của plugins
  • Vào các chỗ cần gọi hook và gọi
    nv_apply_hook('', 'sector4');

    (Lưu ý: gọi chỗ nào thì có quy định theo cách đặt tên, vị trí gọi tương ứng với ID của plugins)

  • Thêm CSDL theo mẫu, với các dữ liệu insert vào tương ứng các plugins đã chuyển đổi
DROP TABLE IF EXISTS `nv4_plugins`;
CREATE TABLE `nv4_plugins` (
  `pid` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  `plugin_lang` VARCHAR(3)  COLLATE utf8_unicode_ci NOT NULL DEFAULT 'all',
  `plugin_file` VARCHAR(50)  COLLATE utf8_unicode_ci NOT NULL,
  `plugin_area` VARCHAR(50)  COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `plugin_module_name` VARCHAR(50)  COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `plugin_module_file` VARCHAR(50)  COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `hook_module` VARCHAR(50)  COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `weight` tinyint(4) NOT NULL,
  PRIMARY KEY (`pid`),
  UNIQUE KEY `plugin` (`plugin_lang`,`plugin_file`,`plugin_area`,`plugin_module_name`,`hook_module`)
) ENGINE=InnoDB  AUTO_INCREMENT=1001  DEFAULT CHARSET=utf8;
 
INSERT INTO `nv4_plugins` VALUES
 (1, 'all', 'qrcode.php', 'get_qr_code', '', '', '', 1),
 (2, 'all', 'cdn_js_css_image.php', 'change_site_buffer', '', '', '', 1),
 (1001, 'all', 'redirect_to_non_www.php', 'check_server', '', '', '', 1),
 (1002, 'all', 'enable_db_debug.php', 'sector2', '', '', '', 1),
programming4/hook.txt · Sửa đổi lần cuối: 2021/12/03 08:19 bởi nguyenchiton