Новости 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 Ответов
  • 1051 Просмотров
*

hammerteni

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Был взломан сайт, антивирус вирусдай (не реклама) поднял тревогу, сайт почистил от внедренных файлов.
Сразу небыло нужды лазить по админке, поэтому ошибку заметил намного позже, чем можно было откатить сайт из чистого бэкапа.
При входе в управление расширениями
ошибка http://tinyurl.com/jd7nzev
http://tinyurl.com/h9zcnpl :

Ошибка

Unknown column 'a.id' in 'where clause' SQL=SELECT COUNT(*) FROM rvs_extensions WHERE state=0 AND a.id != 369 Unknown column 'a.id' in 'where clause' SQL=SELECT *,2*protected+(1-protected)*enabled as status FROM rvs_extensions WHERE state=0 AND a.id != 369 Unknown column 'a.id' in 'where clause' SQL=SELECT COUNT(*) FROM rvs_extensions WHERE state=0 AND a.id != 369

Так же при входе в менеджер плагинов http://tinyurl.com/j4najwz

Ошибка

Unknown column 'a.id' in 'where clause' SQL=SELECT COUNT(*) FROM `rvs_extensions` AS a LEFT JOIN rvs_users AS uc ON uc.id=a.checked_out LEFT JOIN rvs_viewlevels AS ag ON ag.id = a.access WHERE `type` = 'plugin' AND (a.enabled IN (0, 1)) AND a.state >= 0 AND a.id != 369 Unknown column 'a.id' in 'where clause' SQL=SELECT a.extension_id , a.name, a.element, a.folder, a.checked_out, a.checked_out_time, a.enabled, a.access, a.ordering,uc.name AS editor,ag.title AS access_level FROM `rvs_extensions` AS a LEFT JOIN rvs_users AS uc ON uc.id=a.checked_out LEFT JOIN rvs_viewlevels AS ag ON ag.id = a.access WHERE `type` = 'plugin' AND (a.enabled IN (0, 1)) AND a.state >= 0 AND a.id != 369 ORDER BY `folder` asc,a.ordering ASC LIMIT 0, 100 Unknown column 'a.id' in 'where clause' SQL=SELECT COUNT(*) FROM `rvs_extensions` AS a LEFT JOIN rvs_users AS uc ON uc.id=a.checked_out LEFT JOIN rvs_viewlevels AS ag ON ag.id = a.access WHERE `type` = 'plugin' AND (a.enabled IN (0, 1)) AND a.state >= 0 AND a.id != 369

Как лечить?
*

flyingspook

  • Живу я здесь
  • 3590
  • 247 / 9
Re: Ошибка после лечения от заражения
« Ответ #1 : 19.04.2016, 19:32:26 »
... сайт почистил от внедренных файлов.


Как лечить?
Как почистили такой и результат.
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Re: Ошибка после лечения от заражения
« Ответ #2 : 19.04.2016, 19:42:00 »
Цитировать
сайт почистил от внедренных файлов

Рассказывайте как чистили.

1) Система-> Панель управления -> Версии расширений или (Есть новые версии) -> Базы данных -> кликаем Исправить

2) Еще попробуйте перезалить поверх движок из установочного дистрибутива с перезаписью файлов. Все, кроме папки installation и файлов в корневом каталоге. Версия дистрибутива должна совпадать с рабочей.

Ибо такое ощущение, что что-то задели когда чистили.

Полный бэкап сайта перед процедурой обязателен.
« Последнее редактирование: 19.04.2016, 19:49:02 от Taatshi »
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

hammerteni

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Re: Ошибка после лечения от заражения
« Ответ #3 : 19.04.2016, 19:47:54 »
Да собственно через интерфейс Вирусдай и чистил. Он показывает подозрительный файл и выделяет строку с подозрительной вставкой. Сравнивал с файлом исходником, лишнее удалял.
Попробую перезалить движок из установочного дистрибутива.
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Re: Ошибка после лечения от заражения
« Ответ #4 : 19.04.2016, 19:49:27 »
Обновила пост - попробуйте базу исправить. Вирусдай работает отвратительно - пользуйтесь айболитом.
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

hammerteni

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Re: Ошибка после лечения от заражения
« Ответ #5 : 19.04.2016, 20:03:58 »

1) Система-> Панель управления -> Версии расширений или (Есть новые версии) -> Базы данных -> кликаем Исправить

2) Еще попробуйте перезалить поверх движок из установочного дистрибутива с перезаписью файлов.
Ибо такое ощущение, что что-то задели когда чистили.


Спасибо! И БД нужно было исправить (исправил) и файлы перезалил, теперь ошибка ушла.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

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

Ответов: 5
Просмотров: 1198
Последний ответ 06.04.2025, 09:27:20
от wishlight
Проблема со входом в панель администратора Joomla 3.x после обновления

Автор danieeljose

Ответов: 2
Просмотров: 712
Последний ответ 24.03.2025, 20:33:02
от R31rus
Переход на страницу материала после его размещения пользователем

Автор stepan39

Ответов: 0
Просмотров: 614
Последний ответ 22.11.2024, 07:14:15
от stepan39
После выключения расширения лег сайт

Автор blind

Ответов: 4
Просмотров: 1068
Последний ответ 19.05.2024, 14:13:33
от blind
Ошибка 0 Call to undefined function GuzzleHttp\choose_handler()

Автор Alllex

Ответов: 0
Просмотров: 789
Последний ответ 15.03.2024, 21:03:09
от Alllex