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

Tonop

  • Новичок
  • 6
  • 0 / 0
Здравствуйте!

1. Что делает функция setMetaData()?
2. Почему появляется ошибка Call to a member function setMetaData() on null?
3. Почему эта ошибка не постоянная и пропадает при условиях описанных ниже?
4. Как исправить эту ошибку ?

Предусловия:
 -  Joomla 3.9.15, но ошибка появилась примерно на начальных 3.9.XX версиях. До этого ее не возникало.
Setting   Value
 
  • PHP Built On   Linux 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64
  • Database Type   mysql
  • Database Version   5.7.29-0ubuntu0.18.04.1
  • Collation   utf8_general_ci
  • Database Connection Collation   utf8mb4_general_ci
  • PHP Version   7.2.24-0ubuntu0.18.04.2
  • Web Server   Apache/2.4.29 (Ubuntu) mod_fcgid/2.3.9 OpenSSL/1.1.1
  • WebServer to PHP Interface   apache2handler
  • Joomla! Version   Joomla! 3.9.15 Stable [ Amani ] 27-January-2020 15:00 GMT
  • Joomla! Platform Version   Joomla Platform 13.1.0 Stable [ Curiosity ] 24-Apr-2013 00:00 GMT

Сценарий появления ошибки.
1) Открываем любой браузер.
2) Вводим URL сайта, нажимаем enter
3) Система выдает ошибку Call to a member function setMetaData() on null
4) Нажимаем еще раз enter или обновляем браузер (F5)
5) Система отображает сайт без ошибки.
6) Пока не закроем браузер, ошибка не появляется.
7) Закрываем браузер.

Ошибка появляется при первичном открытии любой страницы (не только главной) сайта.

Xg[/url]
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
Re: Ошибка Call to a member function setMetaData() on null
« Ответ #1 : 31.01.2020, 08:20:51 »
Включите ошибки на максимум и отладку
Будет проще понять
*

Гоша_Компьютерный

  • Захожу иногда
  • 65
  • 11 / 1
  • sitogon
Re: Ошибка Call to a member function setMetaData() on null
« Ответ #2 : 31.01.2020, 11:25:32 »
Какой компонент выводит вашу страницу? Может просто посмотреть, что не так в представлении
*

Tonop

  • Новичок
  • 6
  • 0 / 0
Re: Ошибка Call to a member function setMetaData() on null
« Ответ #3 : 31.01.2020, 21:52:47 »
Включите ошибки на максимум и отладку
Будет проще понять
Подскажите пжл как включить ошибки по максимуму?
Debug включил,  в результате - белая страница.
 
*

Tonop

  • Новичок
  • 6
  • 0 / 0
Re: Ошибка Call to a member function setMetaData() on null
« Ответ #4 : 31.01.2020, 21:54:46 »
Какой компонент выводит вашу страницу? Может просто посмотреть, что не так в представлении
Пробовал отключать по списку все компоненты. Ошибка не исчезает.

П.С. На вопросы 1)-3) кто-нибудь из спецов может ответить?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Ошибка Call to a member function setMetaData() on null
« Ответ #5 : 01.02.2020, 11:59:40 »
Какое-то расширение или шаблон вызывает метод setMetaData() при отсутствии самого объекта, которому принадлежит метод - вызывать-то нечего, поэтому выдается сообщение об ошибке.
Поскольку расширения пишутся всеми, кому не лень, без дополнительной информации невозможно опредедить, чей это косяк.
В тексте ошибки не указаны файл, номер строки и т.д.?
Если шаблон не стандартный, то попробуйте поменять его на стандартный.
Все это - лечение по фотографии, нужен доступ к пациенту.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Tonop

  • Новичок
  • 6
  • 0 / 0
Re: Ошибка Call to a member function setMetaData() on null
« Ответ #6 : 01.02.2020, 12:13:25 »
Какое-то расширение или шаблон вызывает метод setMetaData() при отсутствии самого объекта, которому принадлежит метод - вызывать-то нечего, поэтому выдается сообщение об ошибке.
Поскольку расширения пишутся всеми, кому не лень, без дополнительной информации невозможно опредедить, чей это косяк.
В тексте ошибки не указаны файл, номер строки и т.д.?
Если шаблон не стандартный, то попробуйте поменять его на стандартный.
Все это - лечение по фотографии, нужен доступ к пациенту.
Благодарю, что не прошли мимо.
В тексте ошибки ничего кроме того, что указано выше нет.
Шаблон нестандартный. При переключении на родной шаблон, ошибки нет.
Чтобы не выкладывать сюда данные пациента, как это удобней сделать?
*

Tonop

  • Новичок
  • 6
  • 0 / 0
Re: Ошибка Call to a member function setMetaData() on null
« Ответ #7 : 05.02.2020, 08:36:34 »
Граждане алкоголики, хулиганы, тунеядцы! Кто хочет сегодня поработать?  ^-^
Если есть заинтересованные спецы, пишите/звоните в телеграмм @Burzui.
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
Re: Ошибка Call to a member function setMetaData() on null
« Ответ #8 : 05.02.2020, 09:02:34 »
Граждане алкоголики, хулиганы, тунеядцы! Кто хочет сегодня поработать?  ^-^
Если есть заинтересованные спецы, пишите/звоните в телеграмм @Burzui.
скиньте данные на почту bovina504@gmail.com
что бы понимать откуда растут ноги
*

Tonop

  • Новичок
  • 6
  • 0 / 0
Re: Ошибка Call to a member function setMetaData() on null
« Ответ #9 : 05.02.2020, 12:45:48 »
На сегодня наряды закончились.  ^-^
AlexB благодарность!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не работает менеджер материалов, ошибка 500 SSL certificate problem

Автор Екатерина М

Ответов: 5
Просмотров: 1200
Последний ответ 06.04.2025, 09:27:20
от wishlight
Ошибка 0 Call to undefined function GuzzleHttp\choose_handler()

Автор Alllex

Ответов: 0
Просмотров: 789
Последний ответ 15.03.2024, 21:03:09
от Alllex
Ошибка version_compare(): Argument #3 ($operator)

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

Ответов: 1
Просмотров: 1138
Последний ответ 07.11.2023, 20:44:21
от fsv
reCapcha во всплывающем окне - "Ошибка защиты от спама"

Автор Dannik

Ответов: 12
Просмотров: 2387
Последний ответ 14.09.2023, 18:59:24
от all_zer
Ошибка 1054 Unknown column 'created_by' in 'field list' VirtueMart

Автор Evgen Kulibin

Ответов: 3
Просмотров: 1303
Последний ответ 26.02.2023, 01:56:42
от lakshmi