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

Strelok760

  • Захожу иногда
  • 58
  • 0 / 0
Добавляю класс для пункта меню (страницы). Захожу на страницу Ctrl + U и пытаюсь найти добавленный класс (newclass) и ничего не находит. Пробовал добавлять класс в helix mega menu options, также не дало результата.
Кто сталкивался, в чем может быть дело?
« Последнее редактирование: 06.11.2018, 08:53:51 от Strelok760 »
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Не добавляется CSS-класс страницы
« Ответ #1 : 04.11.2018, 20:12:30 »
Ну значит шаблон не использует класс страницы
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Strelok760

  • Захожу иногда
  • 58
  • 0 / 0
Re: Не добавляется CSS-класс страницы
« Ответ #2 : 04.11.2018, 20:21:17 »
А как это исправить?
« Последнее редактирование: 04.11.2018, 20:24:49 от Strelok760 »
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Не добавляется CSS-класс страницы
« Ответ #3 : 04.11.2018, 20:28:32 »
А как это исправить?
Код: php
$menu = JFactory::getApplication()->getMenu();
echo $menu->getActive()->params->get('pageclass_sfx');
указывай класс страницы в настройках пункта меню в поле CSS-класс страницы
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Strelok760

  • Захожу иногда
  • 58
  • 0 / 0
Re: Не добавляется CSS-класс страницы
« Ответ #4 : 04.11.2018, 20:38:43 »
Я забыл уточнить. Joomla 3.6.5 VirtueMart 3.2.14. Все равно не находит такого
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Не добавляется CSS-класс страницы
« Ответ #5 : 04.11.2018, 20:44:54 »
Я забыл уточнить. Joomla 3.6.5 VirtueMart 3.2.14. Все равно не находит такого
Как все запущено!
https://yadi.sk/d/V39AIFWJuPLMig
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Strelok760

  • Захожу иногда
  • 58
  • 0 / 0
Re: Не добавляется CSS-класс страницы
« Ответ #6 : 04.11.2018, 21:45:01 »
Я искренне извиняюсь за свою безграмотность. Вы имеете ввиду вручную добавить строчку в шаблон.
Но почему не работает встроенная возможность добавления идентификаторов?
*

Strelok760

  • Захожу иногда
  • 58
  • 0 / 0
Re: Не добавляется CSS-класс страницы
« Ответ #7 : 05.11.2018, 01:21:50 »
Попробовал добавить это решение в шаблон - сайт перестал загружаться.
Тут весь шаблон завязан на helix. Как заставить шаблон подгружать стили?
Сейчас body выглядит так:
Код
<body <?php echo $this->helix->bodyClass('bg hfeed clearfix'); ?>>

*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Не добавляется CSS-класс страницы
« Ответ #8 : 05.11.2018, 02:18:23 »
Как заставить шаблон подгружать стили?
Что содержит переменная
Код: php
echo '<pre>'; print_r($this->helix); echo '</pre>';
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Strelok760

  • Захожу иногда
  • 58
  • 0 / 0
Re: Не добавляется CSS-класс страницы
« Ответ #9 : 05.11.2018, 12:11:28 »
Что содержит переменная
Код: php
echo '<pre>'; print_r($this->helix); echo '</pre>';

Понятия не имею, разбираюсь в php на уровне "скопировать строчку, заменить строчку".
Сейчас добавил после head вместо тега <body>
Код
<?php
 $pageClassSuffix = JSite::getMenu()->getActive()? JSite::getMenu()->getActive()->params->get('pageclass_sfx', '-default') : '-default';
?>
<body class="page<?php echo $pageClassSuffix ?>">
И добавление CSS суффикса заработало.
Теперь у меня новая загвоздка. Нужно добавить такую же возможность для <div id="sp-component">.
Вот только он генерируется самим шаблоном. Единственное упоминание нашел в файле helix.php и выглядит оно вот так:
Код
self::getInstance()->layout.='<div id="sp-component">';


*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Не добавляется CSS-класс страницы
« Ответ #10 : 05.11.2018, 12:33:35 »
Теперь у меня новая загвоздка. Нужно добавить такую же возможность для <div id="sp-component">.
Вот только он генерируется самим шаблоном. Единственное упоминание нашел в файле helix.php и выглядит оно вот так:
Вот так пробовал?
Код: php
self::getInstance()->layout.='<div id="sp-component" class="' . $pageClassSuffix . '">';

Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Strelok760

  • Захожу иногда
  • 58
  • 0 / 0
Re: Не добавляется CSS-класс страницы
« Ответ #11 : 05.11.2018, 12:47:12 »
Работает на 50%. Теперь есть строчка
Код
<div id="sp-component" class="">
но класс из менеджера меню не подгружается. В index.php я добавлял
Код
<?php
 $pageClassSuffix = JSite::getMenu()->getActive()? JSite::getMenu()->getActive()->params->get('pageclass_sfx', '-default') : '-default';
?>
перед этим, без него не работало. Но только в helix.php без понятия куда ставить. Постоянно выдает ошибку.


*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Не добавляется CSS-класс страницы
« Ответ #12 : 05.11.2018, 12:51:29 »
Постоянно выдает ошибку.
Какую? Покажи файл helix.php
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Strelok760

  • Захожу иногда
  • 58
  • 0 / 0
Re: Не добавляется CSS-класс страницы
« Ответ #13 : 05.11.2018, 12:53:50 »
Тут весь файл один большой php.
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Не добавляется CSS-класс страницы
« Ответ #14 : 05.11.2018, 12:56:55 »
тогда добавь после 608 строки
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Strelok760

  • Захожу иногда
  • 58
  • 0 / 0
Re: Не добавляется CSS-класс страницы
« Ответ #15 : 05.11.2018, 13:04:06 »
Все заработало! Огромное человеческое спасибо за помощь!  ::)

*

Танита Сар

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
RE: Не добавляется CSS-класс страницы
« Ответ #16 : 02.03.2023, 16:14:47 »
Цитировать
Сейчас добавил после head вместо тега <body>
Код
<?php
 $pageClassSuffix = JSite::getMenu()->getActive()? JSite::getMenu()->getActive()->params->get('pageclass_sfx', '-default') : '-default';
?>
<body class="page<?php echo $pageClassSuffix ?>">
И добавление CSS суффикса заработало.


у меня это решение ошибку выдавало.
сделала по другому
Код
<body class="page<?php $menu = JFactory::getApplication()->getMenu();
echo $menu->getActive()->params->get('pageclass_sfx'); ?>">
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться