Công cụ thành viên

Công cụ trang web


programming4:hook

Khác biệt

Đây là những khác biệt giữa hai phiên bản của trang.

Liên kết đến bản xem so sánh này

Phiên bản trước của cả hai bênPhiên bản trước
Phiên bản sau
Phiên bản trước
programming4:hook [2023/04/12 17:00] – [Danh sách các hook có sẵn] hoaquynhtim99programming4:hook [2023/04/13 08:21] (hiện tại) – [Lập trình hook] hoaquynhtim99
Dòng 43: Dòng 43:
  
   * ''%%$module%%'' là tên module nguồn đầu vào (xem ảnh 2) nếu có, nếu không thì để chuỗi rỗng ''%%""%%''   * ''%%$module%%'' là tên module nguồn đầu vào (xem ảnh 2) nếu có, nếu không thì để chuỗi rỗng ''%%""%%''
 +  * ''%%$tag%%'' tên hook, tùy ý lập trình viên đặt. Xem quy định bên dưới
 +  * ''%%$args%%'' mảng dữ liệu đầu vào nếu truyền dữ liệu đầu vào (xem ảnh 2). Bắt buộc là mảng, và nên có key tự động, không đặt key vào. Ví dụ ''%%[$global_config, [$contents, $headers]]%%''
 +  * ''%%$default%%'' dữ liệu mặc định trả về của hàm nv_apply_hook nếu hook này không có file xử lý nào hoặc hàm xử lý trả về null.
 +  * ''%%$return_type%%'' là kiểu xử lý dữ liệu trả về nếu có nhiều hook cùng chạy. 0 sẽ lấy dữ liệu cuối cùng. 1 thì dữ liệu cuối cùng trả về sẽ là array_merge của các kết quả, 2 thì dữ liệu là array_merge_recursive của các kết quả. Chú ý 1 và 2 chỉ khả dụng nếu dữ liệu trả về là mảng. Nếu dùng 1,2 mà hàm xử lý trả không phải array thì giá trị ''%%$default%%'' sẽ được sử dụng
  
 +==== Lập trình hook ====
 +
 +Tạo file PHP đặt vào thư mục includes/plugin. Tên file gồm số, chữ cái thường, in hoa từ a-z và dấu gạch dưới. Trong file này nội dung như sau
 +
 +
 +<code php>
 +<?php
 +
 +/**
 + * NukeViet Content Management System
 + * @version 4.x
 + * @author VINADES.,JSC <contact@vinades.vn>
 + * @copyright (C) 2009-2021 VINADES.,JSC. All rights reserved
 + * @license GNU/GPL version 2 or any later version
 + * @see https://github.com/nukeviet The NukeViet CMS GitHub project
 + */
 +
 +$nv_hook_module = 'users'; // Module xảy ra event chứa data
 +$nv_receive_module = 'users'; // Module nhận và xử lý data
 +
 +$callback = function($vars, $from_data, $receive_data) {
 +    $module_name = $receive_data['module_name'];
 +    $module_info = $receive_data['module_info'];
 +    $module_data = $module_info['module_data'];
 +
 +    $credential = $vars[0];
 +
 +    // FIXME code here
 +    
 +    return 'value'; // ['value'] ...
 +};
 +nv_add_hook($module_name, 'handling_google_identity_login', $priority, $callback, $hook_module, $pid);
 +
 +</code>
 +
 +Khai báo biến ''%%$nv_hook_module%%'' có giá trị bằng module_file của module nguồn đầu vào nếu muốn. Không thì xóa dòng đó đi.
 +
 +Khai báo biến ''%%$nv_receive_module%%'' có giá trị bằng module_file của module nguồn đầu ra nếu muốn. Không thì xóa dòng đó đi.
 +
 +Thay tham số ''%%handling_google_identity_login%%'' bằng hook-tag mà bạn muốn xử lý, ví dụ bạn viết plugin để xử lý cho bước đăng ký hook-tag bên trên thì thay bằng giá trị ''%%$tag%%'' đã đăng ký.
 +
 +Trong hàm xử lý có 3 biến tương ứng với các dữ liệu cố định mô tả ở ảnh 2
 +
 +  * ''%%$vars%%''
 +  * ''%%$from_data%%''
 +  * ''%%$receive_data%%''
 +
 +**''%%$vars%%''**
 +
 +Đây là giá trị của nguồn đầu vào mô tả trong ảnh 2. Hay là giá trị của ''%%$args%%'' được truyền vào tại hàm nv_apply_hook. Ngoài ra hệ thống tự thêm vào ''%%$vars['pid']%%'' đây là ID của plugin này trong CSDL. 
 +
 +Chú ý ''%%$vars%%'' là tham chiếu, tức trong hàm xử lý làm thay đổi giá trị của nó thì sau khi thực hiện xong hàm, dữ liệu đã được truyền vào cũng được thay đổi theo.
 +
 +**''%%$from_data%%''**
 +
 +Nếu nguồn đầu vào rỗng thì ''%%$from_data = [];%%'' nếu là module thì có giá trị
 +
 +<code php>
 +$from_data['module_name'] = 'module-name'; // Tương đương $module_name của module
 +$from_data['module_info'] = $sys_mods['module-name']; // Tương đương $module_info của module
 +</code>
 +
 +**''%%$receive_data%%''**
 +
 +Nếu nguồn đầu ra rỗng thì ''%%$receive_data = [];%%'' nếu là module thì có giá trị
 +
 +<code php>
 +$receive_data['module_name'] = 'module-name'; // Tương đương $module_name của module
 +$receive_data['module_info'] = $sys_mods['module-name']; // Tương đương $module_info của module
 +</code>
 ===== Danh sách các hook có sẵn ===== ===== Danh sách các hook có sẵn =====
  
programming4/hook.txt · Sửa đổi lần cuối: 2023/04/13 08:21 bởi hoaquynhtim99