Script không chạy khi cài đặt plugin


7

Tôi đang tạo một plugin và đang cố chạy một đoạn script sau khi nó được cài đặt. Vì lý do nào, nó xuất hiện tệp script đang tải, nhưng mã của tôi không bao giờ chạy.

Tệp script.php của tôi chứa các mục sau:

// No direct access
defined('_JEXEC') or die('Restricted access');

/**
 * Script file for the plg_system_example plugin    
 */
class plg_system_notifierInstallerScript{

  /**
   * Method to run after the plugin install, update, or discover_update actions have completed.
   *
   * @return void
   */
  function postflight($type,$parent){
    // For Testing Purposes
    die('Hello World');
  }
}

Tôi đã cố gắng sử dụng một số dẫn xuất khác nhau của tên lớp mà không có may mắn. Nếu tôi đặt một câu lệnh die () bên ngoài lớp, nó sẽ được chạy, điều đó khiến tôi tin rằng tệp đã được tải. Tôi cũng đã thử các phương thức khác, chẳng hạn như install () nhưng không thành công.

Lưu ý rằng tôi đã có mã thực tế thay cho câu lệnh die (), nhưng đã chuyển sang mã này trong quá trình gỡ lỗi vấn đề này.

Tôi đang làm gì mà Joomla! không gọi phương thức postflight () trong lớp của tôi khi cài đặt?


1
Từ vẻ bề ngoài của nó, tôi tin rằng việc đặt tên của lớp "plg_system_notifierInstallerScript" là không chính xác.
Mike Feng

Tôi đã giúp làm sáng tỏ thêm một câu trả lời khác, đăng lên để tham khảo: j Joomla.stackexchange.com/questions/24012/ mẹo
Riccardo Zorn

Câu trả lời:


7

Bạn đã thử tên lớp mà không có dấu gạch dưới?

"plgSystemNotifierInstallerScript"

(hoặc có thể "plgSystemnotifierInstallerScript" không chắc chắn)

Đó dường như là định dạng của hai plugin tôi đã kiểm tra sử dụng.


plgSystemNotifierInstallerScript hoạt động như mong đợi. Điều kỳ lạ là, điều này trái với tài liệu của Joomla! Trong đó cho thấy rõ việc sử dụng dấu gạch dưới. = (Cảm ơn sự giúp đỡ của bạn!
Zachary Draper

Sẽ thật tuyệt khi cải thiện câu trả lời của bạn bằng cách cung cấp một tài liệu tham khảo rõ ràng cho tài liệu hoặc mã liên quan đến quy ước đặt tên. Cảm ơn!
Valentin Despa

@ValentinDespa Tôi không tìm thấy tài liệu thực sự nào. Có một số cho các mô-đun và các thành phần, nhưng quy ước đặt tên khác nhau. Nó có dấu gạch dưới, vì vậy có lẽ đó là những gì Zachary Draper đã nói về tài liệu trái ngược.
Ville Niemi

Tôi không thể làm việc này cho đến khi tôi nhận được CamelCase chính xác. plgSystemPluginnameInstallerScript Chỉ ký tự đầu tiên của tên plugin được viết hoa. David (bên dưới) có một lời giải thích tốt - nhưng bỏ lỡ yêu cầu viết hoa.
Michael

3

Trên Joomla 3.4, tên lớp trình cài đặt được dựa trên nhóm plugin (ví dụ system) từ thẻ gốc trong tệp kê khai:

    <extension type="plugin" group="system" version="3.0" method="upgrade">

và tên plugin (ví dụ myplugin) đi theo dòng sau trong tệp kê khai:

    <filename plugin="myplugin">pluginfile.php</filename>

Và sau đó bạn kết hợp tất cả lại với nhau plgnhư vậy:

    plgSystemMyPluginInstallerScript

2

Chỉ trong trường hợp bất kỳ ai đang thực hiện plugin trình chỉnh sửa-xtd tình cờ thấy ghi chú này sau khi nhận xét từ papacho, bạn cần sử dụng plgEditorsxtdMypluginnameInstallerScriptvới dấu gạch nối bị xóa.

Do đó, đối với plugin MyPluginName trong tệp kê khai mypluginname.xml

<extension version="3.0" type="plugin" group="editors-xtd" method="upgrade">
...
<filename plugin="mypluginname">mypluginname.php</filename>

Trong tập tin plugin mypluginname.php

class plgButtonMypluginname extends JPlugin {
...

và trong script.phptập tin

class plgEditorsxtdMypluginnameInstallerScript {
...

đã đến đó cuối cùng ... :-)

Tái bút


1

Tên lớp của trình cài đặt Script được định nghĩa trong $ JPATH_ROOT / library / cms / Installer / adapter.php: 553

$className = JFilterInput::getInstance()->clean($this->element, 'cmd') . 'InstallerScript';
// Cannot have - in class names
$className = str_replace('-', '', $className);

điều này có nghĩa là

  • plg => Trình cài đặt PLGNAME
  • mod => Trình cài đặt MODNAME
  • thành phần => COMNAME InstallerScript
  • template => TEMPLATENAME InstallerScript
    mở rộng bất kỳ '-' nào được áp dụng bởi str numplace
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.