Новости 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 Гость просматривают эту тему.
  • 8 Ответов
  • 727 Просмотров
*

PRammer

  • Захожу иногда
  • 119
  • 0 / 0
Уникальный Алиас
« : 09.05.2018, 19:07:28 »
Доброго времени суток!
Подскажите, хочу сделать, чтобы при создания нового Алиаса из Названия материала Joomla 3 добавляла внутренний его идентификаторы из админки (столбец ID).
Пример:
Название: "Цветы Роза"  Алиас: cvety-roza-234
Название: "Цветы Роза"  Алиас: cvety-roza-235

Ума не приложу, как это сделать... Прошу помощи знатаков  >:(
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Уникальный Алиас
« Ответ #1 : 09.05.2018, 19:23:59 »
здра.
на сколько я понимаю, можно плагин создать на событие onContentBeforeSave.
либо написать простой пользовательский скрипт, чтобы кнопку добавлял рядом с полем алиаса "+id", по нажатию на которую будет добавляться -N в строку алиаса. типа для ленивых, котором лень скопировать из URL страницы последнюю цифру.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Уникальный Алиас
« Ответ #2 : 09.05.2018, 19:42:49 »
на сколько я понимаю, можно плагин создать на событие onContentBeforeSave.
поправочка, на событие onContentAfterSave ибо если материал только создаётся то ID материала в onContentBeforeSave ещё не будет.. придётся тогда два ража жмакать кнопку сохранить!
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Уникальный Алиас
« Ответ #3 : 09.05.2018, 19:57:14 »
точно. я чего-то думал, что id под новый материал сразу выделяется, по нажатии на "создать", но, ежели подумать, то да - в момент сохранения надо его присваивать.
тогда получается, что придётся дополнительно сохранять в базу после проверки.
не такое уж просто действо, как казалось  ;D
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Уникальный Алиас
« Ответ #4 : 09.05.2018, 20:00:37 »
хотя... для случая с единственным редактором можно же предсказать id материала, тупо взяв максимальный индекс базы, наверно?
*

PRammer

  • Захожу иногда
  • 119
  • 0 / 0
Re: Уникальный Алиас
« Ответ #5 : 09.05.2018, 20:01:27 »
Хм... довольно не просто. А если сделать логику, чтобы брался последний ID из таблицы и к ниму +1. Это исключает нажатие кнопки "Сохранить" 2-а раза...
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Уникальный Алиас
« Ответ #6 : 09.05.2018, 20:02:32 »
хотя... для случая с единственным редактором можно же предсказать id материала, тупо взяв максимальный индекс базы, наверно?
зачем если можно в after save всё сделать?)
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Уникальный Алиас
« Ответ #7 : 09.05.2018, 20:03:19 »
Хм... довольно не просто. А если сделать логику, чтобы брался последний ID из таблицы и к ниму +1. Это исключает нажатие кнопки "Сохранить" 2-а раза...
не надо так заморачиватся берете событие after save...
*

PRammer

  • Захожу иногда
  • 119
  • 0 / 0
Re: Уникальный Алиас
« Ответ #8 : 09.05.2018, 20:32:08 »
Эм...  Я не понимаю, куда это стоит писать...  :o
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Алиас в меню видать, но не во всех пунктах меню

Автор владген

Ответов: 7
Просмотров: 546
Последний ответ 31.01.2021, 21:04:43
от владген
Вопрос по Алиас и формировании строки запроса

Автор Alex_dark74

Ответов: 3
Просмотров: 638
Последний ответ 25.06.2020, 15:29:36
от Alex_dark74
Как добавить в URL статьи алиас дочерней категории?

Автор Шмайсер

Ответов: 0
Просмотров: 610
Последний ответ 04.05.2019, 17:19:28
от Шмайсер
Как убрать из url алиас категории первого уровня?

Автор Afman

Ответов: 6
Просмотров: 1417
Последний ответ 14.08.2017, 16:29:32
от Afman
Алиас меню Joomla 3.7 превращается в дату

Автор pro132

Ответов: 2
Просмотров: 872
Последний ответ 09.05.2017, 12:26:19
от pro132