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

Alex_iPod

  • Захожу иногда
  • 187
  • 0 / 1
Добрый день.

При попытке развернуть сайт (Akeeba) на удаленном сервере, появляется ошибка:

При попытке восстановления базы данных произошла ошибка. Текст этой ошибки можно найти ниже. Щелкните на кнопку справа-сверху в этом диалоговом окне чтобы закрыть его и вернуться в страницу восстановления базы данных.

Затем:
Ошибка при обработке базы данных, строка 38
Ошибочный ответ запроса базы данных:
ErrNo #1071


Спойлер
[свернуть]

Текст грубого запроса:

Спойлер
[свернуть]

Похожие темы находил на форуме, но решения так и не нашел. Кто-то писал что решил, но как - не сказал...

Помогите пожулйста разобраться....
*

capricorn

  • Завсегдатай
  • 1949
  • 118 / 3
Уменьшите в этой таблице длину полей с типом varchar с 255 до примерно 190. utf8mb4 4-х байтная кодировка. 191 х 4 = 764 < 767.
*

Alex_iPod

  • Захожу иногда
  • 187
  • 0 / 1
Уменьшите в этой таблице длину полей с типом varchar с 255 до примерно 190. utf8mb4 4-х байтная кодировка. 191 х 4 = 764 < 767.
Спасибо за ответ.

Сделал: все значения поменял на 190 (их там было около 50-60) при попытке обновить страничку с архивом появилась таже ошибка, залез в таблицу - все поля вернулись в ту же длину. Сделал выводы. Ещё дурацкий вопрос: длинна 200 и 1000 - тоже уменьшать до 190?
*

capricorn

  • Завсегдатай
  • 1949
  • 118 / 3
Нужно в локальной копии базы данных в программе phpMyAdmin в таблице jbbk3_akeebasubs_coupons изменить длину полей с типом varchar на 191. 5 полей таких. Вообще, можно для начала изменить длину только для двух полей, которые являются ключами - akeebasubs_coupon_id и coupon. Затем делаете новый Akeeba бэкап и разворачиваете на рабочем сервере. Перед этим удалите там все старые таблицы. Если будут новые ошибки, их надо смотреть отдельно.

Можно альтернативно попробовать обновить этот компонент на локальной машине перед переносом сайта, 100% что разработчик учел появление utf8mb4. У вас явно устаревшая версия компонента.
*

Alex_iPod

  • Захожу иногда
  • 187
  • 0 / 1
Нужно в локальной копии базы данных в программе phpMyAdmin в таблице jbbk3_akeebasubs_coupons изменить длину полей с типом varchar на 191. 5 полей таких. Вообще, можно для начала изменить длину только для двух полей, которые являются ключами - akeebasubs_coupon_id и coupon. Затем делаете новый Akeeba бэкап и разворачиваете на рабочем сервере. Перед этим удалите там все старые таблицы. Если будут новые ошибки, их надо смотреть отдельно.

Можно альтернативно попробовать обновить этот компонент на локальной машине перед переносом сайта, 100% что разработчик учел появление utf8mb4. У вас явно устаревшая версия компонента.

Спасибо, большое! Надеюсь получится!
*

Alex_iPod

  • Захожу иногда
  • 187
  • 0 / 1
Нужно в локальной копии базы данных в программе phpMyAdmin в таблице jbbk3_akeebasubs_coupons изменить длину полей с типом varchar на 191. 5 полей таких. Вообще, можно для начала изменить длину только для двух полей, которые являются ключами - akeebasubs_coupon_id и coupon. Затем делаете новый Akeeba бэкап и разворачиваете на рабочем сервере. Перед этим удалите там все старые таблицы. Если будут новые ошибки, их надо смотреть отдельно.

Можно альтернативно попробовать обновить этот компонент на локальной машине перед переносом сайта, 100% что разработчик учел появление utf8mb4. У вас явно устаревшая версия компонента.

Не помогло...
*

capricorn

  • Завсегдатай
  • 1949
  • 118 / 3
Какая ошибка сейчас? Дамп структуры этой таблицы после рекомендованных мной изменений покажите. Его делают в phpMyAdmin - экспорт. И сравните с тем, что вы показали в начале.
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Помогите пожалуйста разобраться. Сайт на хостинге. Сделал бекап Акибой. При восстановлении на локалке не восстанавливается база. Выдаёт ошибку.
Спойлер
[свернуть]
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
В чистую базу восстанавливаете?
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
В чистую базу восстанавливаете?
Да. Только создал в phpMyAdmin.  Акибой делал бекап полный.
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
А восстанавливаете как?
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
А восстанавливаете как?
Там вариантов не много. Либо Акиба Кикстарт и файл бекапа (jpa), либо бекап архива рспаковать в папку и запустить инсталятор. Перед этим создал пустую базу.
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Во время установки возникает ошибка: Specified key was too long; max key length is 767 bytes Базу посвежее что ли?
Последний ответ в той теме как-то не осилил.
Специально сравнил версии на хостинге. Выставил в Опен Сервер аналогично.  *ОХ-Х-Х*
*

wishlight

  • Гуру
  • 5051
  • 314 / 1
  • От 300 руб быстрый хостинг. Сервера.
mariadb в опенсервер попробуйте.
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
mariadb в опенсервер попробуйте.
Ни 5,5  ни 10  не подходит. Выдаёт ошибку, что нет коннекта с сервером.
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
CHARSET=utf8mb4
На рабочем сайте, откуда бекап, ошибок нет по кодировке utf8mb4 ?
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
На рабочем сайте, откуда бекап, ошибок нет по кодировке utf8mb4 ?
ХЗ. А как проверить?
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
Разверните на том же хосте
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
На поддомене естественно


Вдруг правда косяк изначально в бд
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
А как проверить?
В админке .
Переписываю, редактор часть текста сьел ((
В админке Джумла - расширения- база данных. Трабл именно из-за несовместимости кодировок БД . Не помню как исправлял .
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Спасибо всем за помощь. Дело немножко продвигается. Дело в том, изначально после установки Опен Сервера на локалке стояла версия MySQL 5,6. Для безопасности доступа рута удалил, вместо него создал своего пользователя. НО, оказывается это только касалось версии 5,6. Для остальных версий доступ остался по дефолту. Я не гуру, поэтому даже не подумал об этом.
Поэтому при изменении во время восстановления базы на версии MySQL 5,7 мне выдавало ошибку, что нет соединения.
Сейчас сайт на локалке восстановил за 5 минут.
Но теперь столкнулся с другой фигнёй. На версии MySQL 5,7  у меня нет двух баз данных, которые были на версии 5,6.
Подскажите пожалуйста как исправить.
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Но теперь столкнулся с другой фигнёй. На версии MySQL 5,7  у меня нет двух баз данных, которые были на версии 5,6.
Подскажите пожалуйста как исправить.
В настройках сервера выбрать версию БД 5.6, зайти в phpMyAdmin и сделать дамп нужных баз. Зайти в настройки сервера, выбрать требуемую версию БД (5.7) и сделать импорт дампов.
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
phpMyAdmin и сделать дамп нужных баз
Были такие мысли. Это лучший вариант? Больше нет вариантов?
Завтра попробую.
Сделал бекап баз на 5.6. Импортировал на 5.7. Вроде всё работает. Спасибо всем за помощь.
« Последнее редактирование: 27.11.2019, 12:19:00 от Akeksandr »
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Обнаружена ошибка. Return value of PlgSystemHelixultimate::attachWebAsset() must

Автор Полина Каленова

Ответов: 0
Просмотров: 4377
Последний ответ 08.12.2021, 13:56:42
от Полина Каленова
Ошибка Additionally, a 404 Not Found error was encountered

Автор Ponu4

Ответов: 8
Просмотров: 7225
Последний ответ 27.08.2020, 13:35:39
от Ponu4
Есть шаблон на английском, в нем есть фильтр базы материалов

Автор vitalkun

Ответов: 1
Просмотров: 2051
Последний ответ 26.06.2019, 11:25:51
от vitalkun
Ошибка. Warning: sprintf(): Too few arguments in

Автор Igoritaly

Ответов: 1
Просмотров: 2289
Последний ответ 29.03.2018, 13:36:45
от Igoritaly
Ошибка с alt изображений

Автор vad78

Ответов: 22
Просмотров: 2575
Последний ответ 26.12.2017, 17:31:54
от vad78