Новости Joomla

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

В процессе работы с Joomla бывает необходимо работать с пользовательским интерфейсом более тонко, чем обычно. Все формы Joomla состоят из стандартных полей, содержанием, стилем отображения, состоянием (включено/выключено, доступно для редактирования или нет и т.д.) можно управлять с помощью плагинов. Да и для нестандартных проектов хорошей практикой является создание одного системного или нескольких плагинов групп "под проект", в которых храниться весь "нестандарт".

В этой статье описаны все триггеры, которые вызываются через Event Dispatcher из administrator/components/com_fields/src/Helper/FieldsHelper.php, с привязкой к жизненному циклу (порядку этапов работы запроса), аргументам, изменяемым данным и дальнейшему распространению по Joomla. Это поможет вам работать с Joomla свободнее и не опасаясь при этом потерять изменения при очередном обновлении движка.

Подходы, описанные в статье, полезны в тех случаях, когда вы работаете с данными в com_fields - механизме создания и редактирования пользовательских полей ядра Joomla и при использовании FieldsHelper. Многие сторонние компоненты не используют эту возможность, поэтому данная статья будет полезна лишь частично.

Читать статью на Хабре.

@joomlafeed

🏆 Открыто голосование за Joomla в премии CMS Critic People’s Choice Awards 2025

🏆 Открыто голосование за Joomla в  премии CMS Critic People’s Choice Awards 2025

🗓 Голосование продлится до 27 февраля 2026 года.

👩‍💻 Проголосовать! 👩‍💻

Номинации, в которых можно проголосовать за Joomla:
⭐️ Best Free CMS
⭐️ Best Open Source CMS
⭐️ Best Enterprise CMS

Также в номинации Best e-Commerce Solution участвуют компоненты интернет-магазинов для Joomla:
⭐️ HikaShop
⭐️ Virtuemart

В номинации Best Website Builder оказались:
⭐️ YooTheme
⭐️ SP Page Builder

Что такое CMS Critic Awards?
С 2012 года премия CMS Critic Awards занимает особое место в сообществе систем управления контентом (CMS). Это единственный в своем роде сайт, который составляет рейтинг системы управления контентом и связанных с ними решений на рынке — от малого до крупного и подчеркивает их инновации и услуги.

Каждый год награда CMS Critic Awards присуждается одному победителю в различных отраслевых категориях, таких как: «Лучшая облачная CMS», «Лучший DXP», «Лучшая Headless CMS и других. Затем результаты оглашаются через СМИ вместе с выбором редакции CMS Critic.
В этом году премия вернулась к своим традициям и только TOP-5 движков по количеству номинаций попали в 2-й этап - голосование.

@joomlafeed

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

revolllver

  • Осваиваюсь на форуме
  • 15
  • 1 / 0
Здравствуйте!

1. Из шаблона_1 получаю данные методом POST.
2. Обрабатываю в контроллере.
3. Как вернуть обработанные данные в шаблон_2?

Вот исходники:
шаблон default:
Спойлер
[свернуть]

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

шаблон result:
Спойлер
[свернуть]

Буду вам очень признателен за любую оказанную помощь.
« Последнее редактирование: 23.02.2012, 17:34:31 от revolllver »
*

prometheus

  • Захожу иногда
  • 84
  • 7 / 0
В контроллере вместо $view->assignRef('temp',  $a);
впиши $view->temp = $a;

А во view пиши $this->assignRef('temp',  $temp);

Я точно не уверен но скорее всего объявленные assignRef параметры обнуляются при создании view поэтому то что передал в контроллере сбросится при отображении parent :: display();
« Последнее редактирование: 23.02.2012, 12:21:17 от prometheus »
*

revolllver

  • Осваиваюсь на форуме
  • 15
  • 1 / 0
Спасибо за попытку помочь, но не сработало.
Данные действительно обнуляются после команды $this->setRedirect($link, $msg);
Как это можно обойти?
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
$this->setRedirect($link, $msg); - после этого происходит завершение работы скриптов, перезагрузка страницы, новый запуск скриптов и естественно никакие переменные из предыдущей работы скриптов недоступны.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

revolllver

  • Осваиваюсь на форуме
  • 15
  • 1 / 0
Скажите, пожалуйста, какой командой тогда следует переходить на другой шаблон в моем случае?
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
А что, данные полученные из формы никак не обрабатываются?
Обычно насколько я знаю контроллер при получении post данных обрабатывает из, например сохраняет в бд, затем делает редирект на другой view, либо на тот же view, но другим task. А там уже берутся данные из бд.
А редирект нужен, после post запроса, нужно обязательно делать редирект.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

revolllver

  • Осваиваюсь на форуме
  • 15
  • 1 / 0
В реальном случае как раз-таки и обрабатываются через модель, просто для объяснения проблемы - сделал совсем уж простой пример.


В реальности:
1. Данные вводятся с Шаблона_1
2. По этим данным в Модели происходит SQL запрос в БД
3. Из БД получаю большой массив данных, соответствующих запросу
4. Этот массив хочу передать на Шаблон_2
*

prometheus

  • Захожу иногда
  • 84
  • 7 / 0
Может чем поможет, подсмотрел в стандартных компонентах. Там делается так перед редиректом сохраняются данные формы в области сессии потом вынимаются
Код
// Save the data in the session.
$app->setUserState('com_com.edit.data', $data);

// Redirect back to the edit screen.
$this->setRedirect(JRoute::_('index.php?option=com_com&view=view', false));
*

alfedukovich

  • Новичок
  • 9
  • 4 / 0
Как данные поступают из "Шаблона_1" в модель?
Форма правильно написана? Что мешает указать в форме адрес вашего вида и шаблона "Шаблон_2" для отображения данных из модели?
*

alfedukovich

  • Новичок
  • 9
  • 4 / 0
Простите, я жутко не внимательный.
Вот к примеру, такой вариант:
Код
<form method = "post" name = "apply">
    Введите цифру<br/>
    <input name = "val" value = ""/><br/>
    <a href = "javascript:document.apply.submit();">Submit</a>
    <input type = "hidden" name = "option" value = "com_apply"/>
    <input type = "hidden" name = "view" value = "myView"/>
    <input type = "hidden" name = "layout" value = "result"/>
</form>

Обрабатываете POST данные в виде и отправляете в модель. Возвращённые данные отправляете прямиком в шаблон(я обычно делаю так, кроме извращенских случаев).
вид:
Код
function display($tpl = null)
{
   $model = & $this->getModel('myMegaModel');
   switch ($this->getLayout())
   {
       case 'default' :{
           break;
       }
       case 'result' :{
           $POSTdata = JRequest::getString('mypostdatafromdefault', '', 'POST');
           $dataToResultLayout = $model->getResult($POSTdata);
           $this->assignRef('dataToResultLayout', $dataToResultLayout);

           break;
       }
    }
    parent::dysplay($tpl);
}

контроллер:
Код
function display()
{
   $mymodel = & $this->getModel('myMegaModel');
   $reqestview = JRequest::getCmd('view', 'myView');
   $reqestlayout = JRequest::getCmd('layout', 'default');
   $view = & $this->getView($reqestview, 'html');
   $view->setLayout($reqestlayout);
   $view->setModel($mymodel, true);

   $view->display();
}
« Последнее редактирование: 23.02.2012, 16:23:49 от alfedukovich »
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
alfedukovich, да так вроде будет работать, но не происходит редиректа, а значит появляется проблема, когда пользователь после отправки формы нажимает кнопку Назад.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

alfedukovich

  • Новичок
  • 9
  • 4 / 0
danik.html, редирект происходит при submit формы(кроме извращенских случаев). Нажмёшь НазадИсторииБраузера - вернёшься к форме.

Я конечно могу и ошибаться...

Да, я чё-то туплю =). Не слушайте меня. Редирект действительно нужен.
« Последнее редактирование: 23.02.2012, 16:50:44 от alfedukovich »
*

revolllver

  • Осваиваюсь на форуме
  • 15
  • 1 / 0
Всем большое спасибо! Вопрос решился.

Вы навели меня на мысль о передаче данных через глобальные переменные сессии.
В итоге вот-такой вот код сработал:

шаблон default
Спойлер
[свернуть]

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

шаблон result
Спойлер
[свернуть]

Если я все правильно понимаю, таким методом ведь можно пользоваться?
Или у этого метода есть большие недостатки?
Нужно ли обнулять после получения эту глобальную переменную сессии?

Я вам всем действительно очень благодарен!
« Последнее редактирование: 24.02.2012, 17:11:44 от revolllver »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Компонент для создания тестов Ari Quiz

Автор alex_noize

Ответов: 0
Просмотров: 1672
Последний ответ 25.02.2016, 20:31:51
от alex_noize
Компонент для подмены файлов ядра jHacksPro

Автор rigin

Ответов: 0
Просмотров: 1520
Последний ответ 04.10.2014, 18:13:40
от rigin
[Решено] Автоматическое размешение модуля после установки

Автор asmuz

Ответов: 15
Просмотров: 7781
Последний ответ 21.07.2014, 21:59:18
от b2z
[Решено] Как вывести строки из бд - удовлетворяющие требование SQL запроса!

Автор artemka

Ответов: 11
Просмотров: 2325
Последний ответ 21.07.2014, 20:58:07
от artemka
Защитить данные из GET

Автор tiberian

Ответов: 1
Просмотров: 1219
Последний ответ 11.07.2014, 14:57:11
от b2z