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

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Привет ^-^

Вывожу часть текста материала в модуле, например {loadmoduleid 111}. На сайте эта часть текста из модуля отображается хорошо, в исходном коде тоже. А вот для микроразметки Open Graph вместо содержимого модуля берется сама конструкция {loadmoduleid 111}. *ОХ-Х-Х* Подскажите, как сделать чтобы бралось содержимое этого модуля, а не само {loadmoduleid 111} ? *ОХ-Х-Х*
*

sivers

  • Живу я здесь
  • 2578
  • 357 / 0
Подскажите, как сделать чтобы бралось содержимое этого модуля, а не само {loadmoduleid 111} ?
Если вставляете это в коде, то делайте так:
Код
echo JHtml::_('content.prepare', '{loadmoduleid 111}');
А если в другом модуле, то надо проверить в его настройках опцию "обрабатывать плагинами" - она должна быть включена.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
sivers, я вставляю {loadmoduleid 111} в статью Joomla. Где искать "обработку плагинами"? ^-^
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
sivers, я вставляю {loadmoduleid 111} в статью Joomla. Где искать "обработку плагинами"? ^-^
в модуле
дополнительно
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
правда если модуль HTML
*

sivers

  • Живу я здесь
  • 2578
  • 357 / 0
sivers, я вставляю {loadmoduleid 111} в статью Joomla. Где искать "обработку плагинами"?
Вы таким способом в материал вставляете текст другого материала? Вот это изврат )))
Не знаю даже почему у вас не срабатывает - смотреть надо.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
в модуле дополнительно

правда если модуль HTML

Нет, модуль не HTML, а сторонний (Responsive Post-It Note) и там нет таких настроек с обработкой плагинами :( . Может есть другой способ? 8)
« Последнее редактирование: 22.06.2021, 01:32:19 от Maffo »
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Вы таким способом в материал вставляете текст другого материала? Вот это изврат )))
Не знаю даже почему у вас не срабатывает - смотреть надо.

Нет, я пытаюсь добавить заметку из модуля Responsive Post-It Note в материал ::)
*

sivers

  • Живу я здесь
  • 2578
  • 357 / 0
Нет, я пытаюсь добавить заметку из модуля Responsive Post-It Note в материал ::)
Понятно. Попробуйте там указать ИД другого модуля - сработает или нет. Проверьте разрешен ли вывод модуля на той странице (привязка к пункту меню), хотя это и не должно бы влиять при выводе через ИД. Если и это не получится, то попробуйте выводить через {loadposition имяпозициимодуля}
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
из модуля Responsive Post-It Note в материал
Добавьте в точку входа модуля
Код
defined('_JEXEC') or die; // Метка для вставки
JPluginHelper::importPlugin('content');
$module->content = JHtml::_('content.prepare', $module->content, '', 'mod_имя_модуля.content');
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Понятно. Попробуйте там указать ИД другого модуля - сработает или нет

Попробовал вывести модуль HTML-код. Тоже самое - сам модуль отображается нормально, а для og:description берется {loadmoduleid 111}. Обработку плагинами включал и отключал, это не имеет значения.

Проверьте разрешен ли вывод модуля на той странице (привязка к пункту меню), хотя это и не должно бы влиять при выводе через ИД.

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

Если и это не получится, то попробуйте выводить через {loadposition имяпозициимодуля}

Это конечно уберет {loadmoduleid 111} из микроразметки (совсем), но мне наоборот хотелось бы, чтобы в микроразметке был текст из модуля. Поэтому и вставляю модуль в начало материала ^-^ .
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Добавьте в точку входа модуля

А можете поподробнее объяснить, куда добавлять?
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Наверно не сработает вставка. если кастом модуль не вывел контент, при выполнении компонента com_content . Откройте папку модуля, файл имя_модуля.пхп и вставьте туда код.
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Откройте папку модуля, файл имя_модуля.пхп и вставьте туда код.

Вставил код:

Код
defined('_JEXEC') or die; // Метка для вставки
JPluginHelper::importPlugin('content');
$module->content = JHtml::_('content.prepare', $module->content, '', 'mod_postit');

в начало файла mysite.com/modules/mod_postit/mod_postit.php.

Но безрезультатно.

Или неправильно вставил?
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Или неправильно вставил?
Да, ошибка в коде . Нужно
Код
defined('_JEXEC') or die; // Метка для вставки
JPluginHelper::importPlugin('content');
$module->content = JHtml::_('content.prepare', $module->content, '', 'mod_postit.content');
Думаю лучше смотреть в сторону расширения микроразметки
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Да, ошибка в коде . Нужно

Так тоже не срабатывает.

Думаю лучше смотреть в сторону расширения микроразметки

В каком смысле расширения?
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Ну что то генерирует микроразметку- в шаблоне, плагине
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Ну что то генерирует микроразметку- в шаблоне, плагине

Да, буду смотреть, скорее всего там косяк :'(
*

fsv

  • Живу я здесь
  • 2781
  • 410 / 2
Что генерирует микроразметку? Если плагин группы content, то попробуйте в админке в списке плагинов перетащить его ниже плагина Content - Load Modules.
Веб-разработка: заказ. Только новая разработка.
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Что генерирует микроразметку?

Я никакие плагины для этого не устанавливал, наверно по умолчанию Joomla! генерирует  ::)

Если плагин группы content, то попробуйте в админке в списке плагинов перетащить его ниже плагина Content - Load Modules.

А вот тут совсем не понял. Если можно поподробнее?
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Я никакие плагины для этого не устанавливал, наверно по умолчанию Joomla! генерирует
Джумла откуда ?
Если включить стандартный шаблон- микроразметка есть ? Значит плагин, если нет- тогда в шаблоне .
« Последнее редактирование: 23.06.2021, 08:42:48 от draff »
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
draff, да совсем забыл, микроразметка в шаблоне Flex :laugh:

Нашел код:

Код
$document->addCustomTag('<meta property="og:description" content="'. JHtml::_('string.truncate', $this->item->introtext, 1000, false, false ) .'" />');

Видимо тут скрыто решение. Я не силен в PHP, если кто разбирается подскажите *POPCORN*
« Последнее редактирование: 23.06.2021, 14:45:21 от Maffo »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться