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

Юра

  • Захожу иногда
  • 56
  • 3 / 0
Извините если боян, но ответа не нашел. Не пишу в раздел "Меню..." потому что вопрос не по самой работе меню.

Есть Пункт меню, в котором есть несколько выпадающих подменю совсем разного типа (и блог категории, и конкр. статья и wrapper и т.п.):

ПУНКТ_МЕНЮ_1
ПУНКТ_МЕНЮ_2
ПУНКТ_МЕНЮ_3
--Подпункт1 (блог)
--Подпункт2 (URL)
--Подпункт3 (wrapper)
--Подпункт4 (com_content)
--Подпункт5 (...)

Так вот, если пользователь идет в в выпадающее подменю и там нажимает на него (подменю) — то честь ему и хвала. А если он нажимает на Главный ПУНКТ_МЕНЮ_3, то и не знаю что ему показать...

Хотелось бы при нажатии на данное Пункт_Меню верхнего уровня показать страницу со списком всех Подменю данного пункта Меню (сгенерированого автоматически) — пусть себе юзер выбирает куда идти дальше.

Чем такое сделать?

Спасибо.
*

Kverde3

  • Захожу иногда
  • 239
  • 19 / 3
Таких расширений и нет наверно.

Но вот так можно: установить плагина для вывода модулей в статью, и через него вывести модуль меню.
Только нужно будет создать еще одно меню (с выключенным модулем) копия подпунктов ПУНКТ_МЕНЮ_3. Скорее всего надо будет ещё над стилями поработать, чтобы в статье красиво выводилось.
Минус только один - надо две копии меню поддерживать. Если оно не часто меняется то проблемы не должно быть, тем более в менеджере копирование есть.
*

Юра

  • Захожу иногда
  • 56
  • 3 / 0
Спасибо!

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

Жаль что нет готового решения. ;)
*

NightGuard

  • Живу я здесь
  • 2927
  • 378 / 7
  • вжжж-вжжж
А чем меню-аккордеон не подходит? Функционал как раз под описанные требования, перезагрузки страницы не будет. Смотрите в JED там много таких модулей.
Идеология сверхпотребления более опасна для человечества, чем идеология гитлеровского тоталитаризма
*

SmokerMan

  • Гуру
  • 5291
  • 720 / 26
Жаль что нет готового решения. ;)
ну готовое решение есть, как писали выше, только никаких плагинов там не нужно.
Создаете отдельное меню в нем делаете пункты меню (псевдонимы на эти подменю) публикуете это меню в определенной позиции.
Прописываете условие в шаблоне типа такого
Код
<?php $itemid =JRequest::getInt('Itemid');
if ($itemid == 'здесь пишем ID ПУНКТ_МЕНЮ_3' ) { ?>
<jdoc:include type="modules" name="позиция где был опубликован второй модуль" />
<?php } else { ?>
<jdoc:include type="component" />
<?php } ?>

*

Юра

  • Захожу иногда
  • 56
  • 3 / 0
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

убрать из меню заголовки h3

Автор nexter

Ответов: 19
Просмотров: 7889
Последний ответ 03.02.2020, 18:49:47
от durte
При добавлении нового пункта меню не отображается содержимое

Автор Denko

Ответов: 2
Просмотров: 3296
Последний ответ 16.01.2020, 18:40:55
от Denko
Не нажимается пункт меню на мобильной версии

Автор Sensession

Ответов: 7
Просмотров: 4797
Последний ответ 04.01.2020, 16:45:27
от xpank
Не отображаются пункты в меню

Автор physic

Ответов: 20
Просмотров: 23005
Последний ответ 20.09.2019, 16:54:01
от beliyadm
Как в ARI Ext Menu добиться работы параметра "Показать в меню"?

Автор vasmed

Ответов: 1
Просмотров: 3543
Последний ответ 01.03.2019, 11:12:18
от vasmed