Пытаюсь написать плагин, добавляющий кастомный тип поля для загрузки файлов в пользовательские поля. Структура:
/plugins/fields/upload/
/fields
upload.php
/params
upload.xml
/services
provider.php
/src
/Extension
Upload.php
/tmpl
upload.php
upload.xml
Проблема в том, что функция getInput() не выполняется в /fields/upload.php Добавил вывод echo в этот файл - работает.
Файл /fields/upload.php:
<?php
namespace Joomla\Plugin\Fields\Upload\Fields;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\FormField;
defined('_JEXEC') or die;
class UploadField extends FormField
{
protected $type = 'Upload';
protected function getInput()
{
return '<input type="file" name="' . htmlspecialchars($this->name) . '" />';
}
}
echo '1111';
Содержимое /src/Extension/Upload.php:
namespace Joomla\Plugin\Fields\Upload\Extension;
use Joomla\CMS\Factory;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\Form\Form;
use Joomla\Component\Fields\Administrator\Plugin\FieldsPlugin;
use Joomla\Event\SubscriberInterface;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
final class Upload extends FieldsPlugin implements SubscriberInterface
{
public function onCustomFieldsPrepareDom($field, \DOMElement $parent, Form $form)
{
$fieldNode = parent::onCustomFieldsPrepareDom($field, $parent, $form);
if ($field->type !== 'upload') {
return;
}
if (!$fieldNode) {
return $fieldNode;
}
//$form->addFieldPath(JPATH_PLUGINS . '/fields/upload/fields');
$doc = Factory::getDocument();
$doc->addStyleSheet(Uri::root() . 'media/plg_fields_upload/css/dropzone.min.css');
$doc->addScript(Uri::root() . 'media/plg_fields_upload/js/dropzone.min.js');
$fieldNode->setAttribute('field_id', $field->id);
$fieldNode->setAttribute('type', 'upload');
//$fieldNode->setAttribute('layout', $field->params->get('form_layout', 'upload'));
return $fieldNode;
}
}
Что я делаю не так? Документации по реализации кастомных типов не нашел