Новости Joomla

Свои типы полей в Joomla.

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

Это большая тема, о которой можно говорить очень много. Самое главное, что возможности применения ограничиваются только вашей больной фантазией. Вы строите интерфейс своего модуля или плагина и вам нужно подтянуть данные из сторонней системы (список чего-нибудь по какому-нибудь API), чтобы сохранить выбранный id в Joomla. Или сделать какую-то проверку и в зависимости от неё показать то или иное сообщение пользователю. Для этого подойдут свои пользовательские типы полей. Интерфейс Joomla по большей части описан в XML-файлах. У каждого из них свои параметры. Некоторые не описаны в документации (manual.joomla.org), поэтому самым любопытным будет полезно заглянуть в собственно файлы фреймворка по пути libraries/src/Form/FormField.php, а так же в libraries/src/Form/Fields. У каждого класса поля перечислены его специфические свойства, которые можно описывать в XML. А в своём типе поля вы можете устанавливать эти значения программно. В моём модуле WT Quick links под капотом происходят изменения. Теперь для работы (в админке) ему нужен вспомогательный плагин. А в самом модуле нам бы проверить, а не выключен ли он? В Joomla есть тип поля Note - заметка. Его можно использовать для вывода примечаний.

<field type="note"
     name="your_note_for_user"
     label="Заголовок примечания"
     title="Альтернативный способ для заголовка"
     description="Текст примечания"
     class="col-12 alert alert-info"
     heading="h1"
     close="true"
/>

heading - указывать уровень заголовка. close - позволяет закрыть это примечание. В классе поля libraries/src/Form/Field/NoteField.php описана логика вывода. И в принципе оно нам подходит для нашей задачи. Но оно будет выводить сообщение всегда, а нам нужно только тогда, когда плагин отключён. Поэтому берём и создаём свой класс поля, который мы унаследуем от NoteField. Это значит, что у нас в руках будет весь инструментарий стандартного поля Note + то, что мы сами добавим. В XML-манифест добавляем наше поле

<field type="systempluginstatus" 
     name="systempluginstatus"
     addfieldprefix="Joomla\Module\Wtquicklinks\Site\Fields"/>

- type - имя файла и класса,- addfieldprefix - указываем namespace к нашему классу, может быть любой нам нужный- name - нельзя полю без имени...Это означает, что Joomla будет использовать класс поля из файла modules/mod_wt_quick_links/src/Fields/SystempluginstatusField.php.А в классе поля будет написано следующее:

<?php
// namespace для атрибута addfieldprefix
namespace Joomla\Module\Wtquicklinks\Site\Fields;
// нельзя напрямую обращаться к этому файлу
defined('_JEXEC') or die;
// подключаем родительский класс для переопределения
use Joomla\CMS\Form\Field\NoteField;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\PluginHelper;

// имя класса и имя файла точь-в-точь
class SystempluginstatusField extends NoteField
{
     protected $type = 'Systempluginstatus';

     protected function getLabel()
          {
               // если плагин не включён
               if(PluginHelper::isEnabled('system','wtquicklinks')) {
                    // меняем свойства родительского класса
                    $this->class = 'alert alert-danger w-100';
                    $this->element['label'] = '⚠️ А-а-а-а!';
                    $this->element['description'] = 'Плагин не включён!!';
                    // и просто рендерим его с нашими свойствами
                    return parent::getLabel();
               }
          // А иначе всё хорошо, скрываем поле из виду.
          $this->parentclass = 'd-none';
          return '';
     }
}

Просто и удобно. И людям приятно, что о них позаботились и рассказали почему что-то не работает. @webtolkru#joomla #php #webdev #разработка

0 Пользователей и 1 Гость просматривают эту тему.
  • 4 Ответов
  • 8926 Просмотров
*

fatalerror

  • Захожу иногда
  • 444
  • 48 / 2
  • Уполномоченный по правам чайников
Где-то ранее я писал. Тут данная тема опять всплыла в другой теме, уже в связи с Joostina.

В общем, на рассмотрение rav.

Может принять кардинальные меры и поставить Spaw в качестве редактора по-умолчанию?
Проблем будет гораздо меньше ;)


Я бы тоже был рад, если бы Spaw стоял по умолчанию.
Но у него есть один недостаток. Когда подключаешь параметр "использовать индивидуальные папки" (по памяти пишу, надеюсь, понятно, если что - уточню), то все пользователи могут видеть только свои папки. А так быть, ИМХО, не должно. Группа Админов, Редакторов, должна иметь возможность пользовать и чужие папки. По-любому.
То есть в коде, где-нить, должна стоять проверка: "Если пользователь - админ, то данный параметр не используется"

Может стоит ravу в топик написать, а?  :o
Кода-то я не знаю, но задачи ставить....!

fatalerror, честно говоря никогда об этом не задумывался, для меня эти параметры пока не были критичными, но если дело только за этим, то скорее всего это решаемо. Конечно напиши rav-у, он как минимум скажет, насколько это легко/сложно реализовать.

Вот, написал... пожелание. А то в JCE, который по умолчанию в Joostina очень уж ошибок...
В чем вообще его преимущество? То, что кнопки можно гибко настраивать?
Расстреляно форумчан за нецензурщину: 1 (один).  Дерьмо случается...
*

rav

  • Захожу иногда
  • 63
  • 31 / 0
Сделать легко. Если это разумно. И с какого уровня пользователя отменять индивидуальные каталоги - администратор, паблишер....?
*

fatalerror

  • Захожу иногда
  • 444
  • 48 / 2
  • Уполномоченный по правам чайников
Наверное, с manager и выше. То есть с тех, кто доступ к админке имеет.
Расстреляно форумчан за нецензурщину: 1 (один).  Дерьмо случается...
*

rav

  • Захожу иногда
  • 63
  • 31 / 0
Собственно сабж. Заменяется файл mambots/editors/spaw/config/config.php.
В файле заменена всего одна строчка 221 - кому лень качать весь файл:
....................
     array('' => 'Normal')
   );
   $userdir = '';
   if(1 == $j_spaw_config['user_dir'] && 'Manager' != $my->usertype && 'Administrator' != $my->usertype && 'Super Administrator' != $my->usertype) {
      $userdir = $mosConfig_absolute_path.'/images/stories/users';
      is_dir($userdir) or mkdir($userdir) or die("Error creating dir $userdir !");

.....................
Если понравится, можно включить в сборку

[вложение удалено Администратором]
*

fatalerror

  • Захожу иногда
  • 444
  • 48 / 2
  • Уполномоченный по правам чайников
rav, наверное эту вещь можно смело включать в сборку.
Без нее админы были вынуждены обращаться к другим редакторам, а сейчас они доступ ко всему имеют.
Опция-то "индивидуальных папок" только для юзеров.
Расстреляно форумчан за нецензурщину: 1 (один).  Дерьмо случается...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться