Tạo plugin để chèn Mã dùng thử Chrome
Tôi đang cố gắng tạo một plugin sẽ thêm phần sau vào các trang:
<meta http-equiv="origin-trial" content="MY_CHROME_TRIAL_TOKEN">
Tôi cho rằng đây phải là một plugin hệ thống nhắm mục tiêu sự kiện onAfterRender nên đã thêm mã này (tôi đã thay thế mã thông báo thực):
public function onAfterRender()
{
$document = JFactory::getDocument(); $document->setMetaData('origin-trial', 'mychrometrialtoken');
}
Plugin cài đặt nhưng thẻ meta không được thêm vào tiêu đề trang. Tôi đang làm gì không đúng? Tôi là một người mới làm việc này nên đã sử dụng một mẫu plugin từ Github và sửa đổi nó. Tôi có thể đã mắc một lỗi cơ bản! Tôi tự hỏi liệu mình có chỉ định sai tên thẻ 'origin-trial' không.
Tệp XML:
<?xml version="1.0" encoding="utf-8"?>
<extension version="3.1" type="plugin" group="system">
<name>plg_system_tdcchromexhrenable</name>
<author>AG</author>
<creationDate>8 September 2020</creationDate>
<copyright>Copyright (C) 2005 - 2013 Open Source Matters. All rights reserved.</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<authorEmail>[email protected]</authorEmail>
<authorUrl>www.joomla.org</authorUrl>
<version>1.0</version>
<description>Enable the XHR synchronous setting in Chrome to prevent SCORM errors</description>
<files>
<filename plugin="tdcxhr">tdcxhr.php</filename>
<filename>index.html</filename>
</files>
</extension>
PHP:
<?php
// no direct access
defined( '_JEXEC' ) or die;
class plg<system><plg_system_tdcchromexhrenable> extends JPlugin
{
/**
* Load the language file on instantiation. Note this is only available in Joomla 3.1 and higher.
* If you want to support 3.0 series you must override the constructor
*
* @var boolean
* @since 3.1
*/
protected $autoloadLanguage = true; /** * Plugin method with the same name as the event will be called automatically. */ function onBeforeCompileHead() { $document = JFactory::getDocument();
$document->setMetaData('origin-trial', 'token_goes_here','http-equiv');
return true;
}
}
?>
Trả lời
Nếu tôi là bạn, tôi sẽ thử điều này thay vì onBeforeRender:
onBeforeCompileHead
Bằng cách đó, bạn đang thêm meta vào tài liệu trước khi nó được hiển thị.
Đây là một video tuyệt vời giải thích tất cả các loại plugin khác nhau, nhưng phải thừa nhận rằng có thể mất một lúc để bạn hiểu rõ về chúng. https://www.youtube.com/watch?v=_agXP5DHm_g&list=PLbSGtuctZCf0VSfiMXWtoD5u7wrSmpr_Y&index=18&t=0s
Nó cũng sẽ rất tốt nếu thêm mã này:
// If we are on admin don't process.
if (!$app->isClient('site'))
{
return;
}
Joomla có 2 ứng dụng khách. Trang web và Quản trị viên. Mã này sẽ đảm bảo rằng plugin chỉ thêm dữ liệu meta vào giao diện người dùng chứ không phải phụ trợ. Nó kiểm tra một cách hiệu quả nếu nó không có trên trang web (ví dụ: quản trị viên hoặc bất kỳ loại ứng dụng khách nào khác, ví dụ như CLI hoặc Dịch vụ Web) và nếu nó không có trên trang web, nó sẽ thoát.
Plugin có thể thay đổi nhiều thứ để làm đúng, vì vậy đây là hướng dẫn ngắn gọn để plugin của bạn hoạt động thành công.
Xác định loại plugin và sự kiện
Trước hết hãy tìm ra sự kiện bạn cần đăng ký.
Các sự kiện do Joomla phát ra được liệt kê trong https://docs.joomla.org/Plugin/Eventsvà chúng được tách biệt theo loại plugin. Thật không may, không phải lúc nào bạn cũng rõ ràng sự kiện nào bạn cần đăng ký. Tôi đã xem video do Eoin gợi ý trong câu trả lời của anh ấy và có một mô tả tốt ở đó về cách Joomla tạo trang web từ một yêu cầu HTTP và các sự kiện plugin loại hệ thống được phát ra ở giai đoạn nào.
Đối với yêu cầu cụ thể của bạn về việc chèn thẻ meta vào phần đầu phản hồi HTTP, bạn có thể chọn bất kỳ một trong số các sự kiện hệ thống.
Các phần mở rộng của bên thứ ba Joomla cũng có thể tạo ra các sự kiện; kiểm tra tài liệu mở rộng cho những.
Quy ước đặt tên
Khi bạn biết loại plugin nào bạn cần phát triển và sự kiện để đăng ký thì bạn có thể bắt đầu viết mã. Nhưng bạn phải tuân thủ nghiêm ngặt các quy ước đặt tên Joomla nhất định. Tôi sẽ liệt kê những điều này liên quan đến trường hợp bạn muốn tạo một systemplugin loại có tên là "ví dụ". (Thay thế "ví dụ" và "hệ thống" thích hợp bằng tên cho plugin của bạn ở mọi nơi bên dưới.)
Tránh gạch dưới trong tên plugin của bạn!
Tạo thư mục plg_system_examplevà trong thư mục đó tạo 2 tệp:
example.xml(tệp kê khai của bạn cho plugin) example.php(tệp mã php chính của bạn cho plugin)
Đây là example.xmlnhững điều quan trọng:
<?xml version="1.0" encoding="utf-8"?>
<extension version="3.8" type="plugin" group="system" method="upgrade">
<name>plg_system_example</name>
<description>An example of a plugin</description>
<files>
<filename plugin="example">example.php</filename>
</files>
</extension>
Đây là example.php(giả sử bạn đang đăng ký onBeforeCompileHead):
<?php
defined( '_JEXEC' ) or die;
class PlgSystemExample extends JPlugin
{
public function onBeforeCompileHead()
{
… your code here
}
}
Lưu ý viết hoa trong tên lớp plugin!
Nếu bạn đang đăng ký một sự kiện khác, thì hãy sử dụng các tham số thích hợp cho lệnh gọi hàm của bạn, như được mô tả trong https://docs.joomla.org/Plugin/Events.
Cài đặt
Zip lên thư mục của bạn để tạo một tệp zip plg_system_example.zipvà cài đặt nó.
Hãy nhớ kích hoạt plugin của bạn.
Ngoài ra, các plugin cũng có trường Access, vì vậy bạn có thể xác định tập hợp các nhóm người dùng mà plugin được chạy.
Plugin của bạn được chạy cả trên front-end và back-end, vì vậy, như Eoin đã đề cập, việc kiểm tra xem bạn đang chạy trên nền tảng nào và viết mã phù hợp là điều hợp lý.
Cuối cùng, tôi đã tạo một video nhỏ mô tả cách các plugin hoạt động trong Joomla mà bạn có thể tìm thấy tại https://www.youtube.com/watch?v=UuOPrTu6Vac&feature=youtu.be