Новости Joomla

Новый способ добавления и рендера полей в Joomla Form - метод renderControlFields() (Joomla 5.3+)

Новый способ добавления и рендера полей в Joomla Form - метод renderControlFields() (Joomla 5.3+)

Новый способ добавления и рендера полей в Joomla Form - метод renderControlFields() (Joomla 5.3+). При отображении форм компонента в админке раньше разработчикам нужно было описывать скрытые поля в лейаутах. И выглядело это так:

<?php     // Это файл в /layouts/components/com_component/your_layout.php?><input type="hidden" name="task" value=""><input type="hidden" name="return" value="<?php echo $input->getBase64('return'); ?>"><input type="hidden" name="forcedLanguage" value="<?php echo $input->get('forcedLanguage', '', 'cmd'); ?>"><?php echo HTMLHelper::_('form.token'); ?>
Начиная с Joomla 5.3 добавлен новый способ добавления таких полей (их называют control fields) - программно. И теперь это можно сделать просто в Controller / View.
// В Controller/View добавляем поля$this->form  ->addControlField('task', '')  ->addControlField('return', $input->getBase64('return', ''))  ->addControlField('forcedLanguage', $forcedLanguage);
А в layout'е просто используем метод
renderControlFields()
// В layout формыecho $this->form->renderControlFields();
Многие компоненты ядра уже используют этот подход. Соответствующий PR был принят в Joomla 5.3 осенью 2024г.Смотреть
Pull Request@joomlafeed#joomla #разработка #php

JoomGallery 4.1.0 - компонент галереи изображений для Joomla

JoomGallery 4.1.0 - компонент галереи изображений для Joomla

Новая итерация компонента продолжает развиваться, ведь с v.4.x компонент был переписан практически с нуля.

v.4.1.0. Что нового?

Редактирование метаданных изображений. Теперь метаданные можно не только читать, но и напрямую редактировать и записывать обратно в изображение JPG. Поддерживаются данные EXIF ​​и IPTC.

Полная совместимость с Joomla! 4.x, 5.x и 6.x. Компонент почистили от устаревших методов в коде.

Заметно ускорили загрузку больших галерей. Списки в админке, особенно для очень больших галерей ( >30 000 изображений), теперь загружаются значительно быстрее.

Несколько сеток lightGallery на одной странице. Будь то плагины контента или модули изображений: теперь вы можете отображать несколько галерей или категорий на одной странице без каких-либо ограничений.

Множество мелких исправлений ошибок и оптимизаций.

Сайт проекта

GitHub расширения

Скачать

0 Пользователей и 1 Гость просматривают эту тему.
  • 10 Ответов
  • 2152 Просмотров
*

OnePrg

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
Пишу свою компоненту. Решил идти методом аналогии, разбираю в отладчике работу компоненты "Категории" и переношу код в свою компоненту.

При создании/редактировании категории открывается форма administrator\components\com_categories\views\category\tmpl\edit.php

Чтобы подключить к стандартным кнопкам редактирования события в Joomla используется такой код

Код
JFactory::getDocument()->addScriptDeclaration('
Joomla.submitbutton = function(task)
{
if (task == "category.cancel" || document.formvalidator.isValid(document.getElementById("item-form")))
{
jQuery("#permissions-sliders select").attr("disabled", "disabled");
' . $this->form->getField("description")->save(). '
Joomla.submitform(task, document.getElementById("item-form"));

if (task !== "category.apply")
{
window.parent.jQuery("#categoryEdit' . $this->item->id . 'Modal").modal("hide");
}
}
};
');


Разъясните пожалуйста новичку следующее:

$this->form->getField("description")->save()

при чём здесь метод save к полю description? ведь save прописана в models?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Этот код не имеет ничего общего с методом save() в модели, он всего лишь выводит следующий JS-код:
Код: javascript
if (имя_текстового_редактора.get("jform_description").isHidden()) {имя_текстового_редактора.get("jform_description").show()}; имя_текстового_редактора.get("jform_description").save();
, который вызывает метод save() в скрипте текстового редактора.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

OnePrg

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
понял - спасибо
*

OnePrg

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
И всё таки как Joomla попадает в save? Всё та же запись категории из админки.

В administrator\components\com_categories\models\category.php поставил точку останова в начале функции save

Стек вызова в отладчике

save    FILE: administrator\components\com_categories\models\category.php    LINE: 478
save    FILE: libraries\legacy\controller\form.php    LINE: 735
execute    FILE: libraries\legacy\controller\legacy.php    LINE: 702
MAIN    FILE: W:administrator\components\com_categories\categories.php    LINE: 27
executeComponent    libraries\cms\component\helper.php    LINE: 405
renderComponent    libraries\cms\component\helper.php    LINE: 380
dispatch    FILE: libraries\cms\application\administrator.php    LINE: 98
doExecute    FILE: libraries\cms\application\administrator.php    LINE: 152
execute    FILE: libraries\cms\application\cms.php    LINE: 261
MAIN    FILE: administrator\index.php    LINE: 51

Получается что сразу после строки

$controller = JControllerLegacy::getInstance('Categories');

в точке входа в компоненту administrator\components\com_categories\categories.php

вызывается save из administrator\components\com_categories\models\category.php

КАК?
« Последнее редактирование: 26.12.2016, 13:13:44 от OnePrg »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Метод save контроллера вызывает метод save модели. Что вас так удивляет? Если вы отладчиком войдете в метод execute то увидете что никакой особой магии там нету.
интернет-блог: http://websiteprog.ru
*

OnePrg

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
Метод save контроллера вызывает метод save модели. Что вас так удивляет? Если вы отладчиком войдете в метод execute то увидете что никакой особой магии там нету.

Меня удивляет, то что до метода execute не доходит

$controller = JControllerLegacy::getInstance('Categories'); - ПРИ ВЫПОЛНЕНИИ ВОТ ЭТОЙ СТРОКИ Я ПОПАДАЮ В ТОЧКУ ОСТАНОВА В SAVE
$controller->execute($input->get('task'));


А вот когда стою на строке

$controller->execute($input->get('task'));

и нажимаю F11 (использую для отладки CodeLobster), то попадаю в libraries\legacy\controller\legacy.php      function redirect()

, а как мне попасть в саму execute?



Не могу врубиться, как кнопки на форме связываются с методами контроллера?



Не нахожу в administrator\components\com_categories\controllers\category.php метод save
« Последнее редактирование: 26.12.2016, 15:40:15 от OnePrg »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Меня удивляет, то что до метода execute не доходит
А меня удивляет, как вы решили написать компонент, будучи таким неподготовленным.
$controller = JControllerLegacy::getInstance('Categories'); - ПРИ ВЫПОЛНЕНИИ ВОТ ЭТОЙ СТРОКИ Я ПОПАДАЮ В ТОЧКУ ОСТАНОВА В SAVE
Не нахожу в administrator\components\com_categories\controllers\category.php метод save
- Вы подключаете один контроллер, а пытаетесь искать что-то в другом.
- Наследуемый класс может использовать public и protected методы родителей.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

OnePrg

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
благодарю!

пошёл готовиться :)
*

OnePrg

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
Братья и сестры!

Ну подскажите мне, пожалуйста, направьте на путь истинный советом или ссылкой на мануальчик

Пытаюсь писать свой компонент. Делаю по аналогии с компонентом com_categories

Сейчас нужно добавить в админке запись в таблицу, так же как добавляются категории. И вот я в своём компоненте открываю форму добавления записи



Если я не заполнил поле и нажимаю кнопку "Сохранить", выдаёт сообщение, что поле не заполнено



Если поля заполнил и нажимаю кнопку "Сохранить", то ничего не происходит вообще, даже в браузере ничего не крутиться




В той же компоненте com_categories при нажатии на такую кнопку я хоть попадаю в отладчик, а здесь при нажатии даже в administrator\index.php не заходит.

Код кнопки в com_categories:



код кнопки в моей компоненте


*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Есть ли ошибки JS в консоли? Покажите весь код формы. Скорее всего не хватает hidden полей, типа task или option, ну или id формы неверный.

Мануальчики здесь.
*

OnePrg

  • Осваиваюсь на форуме
  • 49
  • 1 / 0
Есть ли ошибки JS в консоли? Покажите весь код формы. Скорее всего не хватает hidden полей, типа task или option, ну или id формы неверный.

Мануальчики здесь.

За мануальчик весьма благодарю.

Пока решил всё сделать заново, если опять не получится отпишусь.
« Последнее редактирование: 28.12.2016, 22:34:06 от OnePrg »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Компонент Search в Joomla 5

Автор hensler

Ответов: 4
Просмотров: 1089
Последний ответ 28.03.2025, 17:27:24
от azm1n
addScript (в админке) к пути файла js добавляет /administrator/. Зачем?

Автор kkmspb

Ответов: 0
Просмотров: 1009
Последний ответ 02.09.2024, 14:42:25
от kkmspb
Не могу разобраться как в админке заставить работать свой плагин

Автор kkmspb

Ответов: 3
Просмотров: 1323
Последний ответ 02.09.2024, 11:35:25
от kkmspb
Расширение od jshopping categories на Joomla 5

Автор ironDiaper

Ответов: 0
Просмотров: 1662
Последний ответ 13.01.2024, 17:54:34
от ironDiaper
Формирование ссылок для компонента Joomla Tags

Автор stepan39

Ответов: 6
Просмотров: 3640
Последний ответ 05.02.2023, 15:22:13
от tweenpix