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

Sergeych

  • Захожу иногда
  • 161
  • 25 / 0
С обновлением Joomla до версии 3.8.13 (по некоторым слухам даже начиная с 3.8.12) появилась следующая проблема:
При попытке сохранить изменения в фотографии (неважно что именно менялось, само фото или описание или просто нажать сохранить ничего не меняя) - вылетает ошибка
Код
RuntimeException: Недопустимое поле: cid
и ещё много строчек всяких нехороших слов
Кто сталкивался, какие мысли?
*

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
Вот лучше выложите или в виде скрина или без перевода эти много  строчек.
*

Sergeych

  • Захожу иногда
  • 161
  • 25 / 0
Вот лучше выложите или в виде скрина или без перевода эти много  строчек.
Код
Ошибка
RuntimeException: Недопустимое поле: cid in /var/www/site/data/www/site.ru/libraries/src/Form/Form.php:2076 Stack trace: #0
/var/www/site/data/www/site.ru/libraries/src/Form/Form.php(1226): Joomla\CMS\Form\Form->validateField(Object(SimpleXMLElement), '', '118', Object(Joomla\Registry\Registry)) #1
/var/www/site/data/www/site.ru/administrator/components/com_joomgallery/models/image.php(1010): Joomla\CMS\Form\Form->validate(Array) #2
/var/www/site/data/www/site.ru/administrator/components/com_joomgallery/models/image.php(247): JoomGalleryModelImage->_validate(Object(Joomla\CMS\Form\Form), Array) #3
/var/www/site/data/www/site.ru/administrator/components/com_joomgallery/controllers/images.php(462): JoomGalleryModelImage->store() #4
/var/www/site/data/www/site.ru/libraries/src/MVC/Controller/BaseController.php(710): JoomGalleryControllerImages->save() #5
/var/www/site/data/www/site.ru/administrator/components/com_joomgallery/joomgallery.php(68): Joomla\CMS\MVC\Controller\BaseController->execute('apply') #6
/var/www/site/data/www/site.ru/libraries/src/Component/ComponentHelper.php(382): require_once('/var/www/site...') #7
/var/www/site/data/www/site.ru/libraries/src/Component/ComponentHelper.php(357): Joomla\CMS\Component\ComponentHelper::executeComponent('/var/www/site...') #8
/var/www/site/data/www/site.ru/libraries/src/Application/AdministratorApplication.php(101): Joomla\CMS\Component\ComponentHelper::renderComponent('com_joomgallery') #9
/var/www/site/data/www/site.ru/libraries/src/Application/AdministratorApplication.php(159): Joomla\CMS\Application\AdministratorApplication->dispatch() #10
/var/www/site/data/www/site.ru/libraries/src/Application/CMSApplication.php(195): Joomla\CMS\Application\AdministratorApplication->doExecute() #11
/var/www/site/data/www/site.ru/administrator/index.php(51): Joomla\CMS\Application\CMSApplication->execute() #12 {main}
« Последнее редактирование: 30.10.2018, 08:57:12 от Sergeych »
*

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
*

Sergeych

  • Захожу иногда
  • 161
  • 25 / 0
В общем если у кого те-же грабли и лень читать немецкий форум, то решение следующее -
Файл administrator/components/com_joomgallery/models/forms/image.xml
Фрагмент кода
Код
<field
name="cid"
type="text"
class="readonly"
label="COM_JOOMGALLERY_IMGMAN_IMAGE_ID"
size="20"
readonly="true"
disabled="true"
/>
нужно убрать строчку
Код
disabled="true"
и всё заработает!  *DRINK*
*

gurzuf

  • Новичок
  • 1
  • 0 / 0
Спасибо! Помогло! Галерея больше не ругается.
*

monah46

  • Захожу иногда
  • 87
  • 0 / 1
У меня та же проблема, но только в общих настройках, не дает ничего сохранить ! Пишет "Недопустимое поле: Сервер справки", что делать? решение не нашел еще.
*

Gammy2005

  • Осваиваюсь на форуме
  • 21
  • 2 / 0
Всем привет!
А у меня ситуация немного другая.
Ошибка такая:
Код
RuntimeException: Некорректно заполнено поле: Фото ID. in D:\xampp\htdocs\mysite\libraries\src\Form\Form.php:2130 Stack trace: #0
D:\xampp\htdocs\mysite\libraries\src\Form\Form.php(1225): Joomla\CMS\Form\Form->validateField(Object(SimpleXMLElement), '', '1', Object(Joomla\Registry\Registry)) #1
D:\xampp\htdocs\mysite\administrator\components\com_joomgallery\models\image.php(1010): Joomla\CMS\Form\Form->validate(Array) #2
D:\xampp\htdocs\mysite\administrator\components\com_joomgallery\models\image.php(247): JoomGalleryModelImage->_validate(Object(Joomla\CMS\Form\Form), Array) #3
D:\xampp\htdocs\mysite\administrator\components\com_joomgallery\controllers\images.php(462): JoomGalleryModelImage->store() #4
D:\xampp\htdocs\mysite\libraries\src\MVC\Controller\BaseController.php(710): JoomGalleryControllerImages->save() #5
D:\xampp\htdocs\mysite\administrator\components\com_joomgallery\joomgallery.php(68): Joomla\CMS\MVC\Controller\BaseController->execute('apply') #6
D:\xampp\htdocs\mysite\libraries\src\Component\ComponentHelper.php(402): require_once('D:\xampp\htdocs...') #7
D:\xampp\htdocs\mysite\libraries\src\Component\ComponentHelper.php(377): Joomla\CMS\Component\ComponentHelper::executeComponent('D:\xampp\htdocs...') #8
D:\xampp\htdocs\mysite\libraries\src\Application\AdministratorApplication.php(101): Joomla\CMS\Component\ComponentHelper::renderComponent('com_joomgallery') #9
D:\xampp\htdocs\mysite\libraries\src\Application\AdministratorApplication.php(159): Joomla\CMS\Application\AdministratorApplication->dispatch() #10
D:\xampp\htdocs\mysite\libraries\src\Application\CMSApplication.php(203): Joomla\CMS\Application\AdministratorApplication->doExecute() #11
D:\xampp\htdocs\mysite\administrator\index.php(51): Joomla\CMS\Application\CMSApplication->execute() #12 {main}

Версия Joomla 3.9.25.

Способ, описанные выше не помог.
Как вариант, лезть грязными лапами в базу и править названия картинок там.

Может подскажет кто другой способ решения проблемы?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Проблема с дублем страниц в JoomGallery 3.4

Автор qvagin

Ответов: 3
Просмотров: 3417
Последний ответ 23.01.2023, 13:30:08
от e2
Стили раскладки фото в JoomGallery (masonry и mosaic)

Автор marbert

Ответов: 4
Просмотров: 2511
Последний ответ 22.11.2022, 06:28:20
от marbert
JoomGallery 3.6.0 если отсутствует поле Название при редактировании фотографии

Автор Beer

Ответов: 0
Просмотров: 2543
Последний ответ 09.09.2022, 20:07:49
от Beer
После обновления до JoomGallery 3.6 некорректно работает водяной знак

Автор Maffo

Ответов: 3
Просмотров: 2408
Последний ответ 23.08.2022, 06:21:58
от marksetter
JoomGallery 3.5.0 от 27.11.2020

Автор Beer

Ответов: 0
Просмотров: 2876
Последний ответ 18.03.2021, 12:20:02
от Beer