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

ruopg

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Что есть:

Есть файл отвечающий за вывод пунктов меню со следующим кодом

Код
<?php




class WarpMenuDefault extends WarpMenu {

/*
Function: process

Returns:
Object
*/
public function process($module, $element) {
self::_process($module, $element->first('ul:first'));
return $element;
}

/*
Function: _process

Returns:
Void
*/
protected static function _process($module, $element, $level = 0) {

if ($level == 0) {
$element->attr('class', 'menu '.$module->menu_style);
} else {
$element->addClass('level'.($level + 1));
}




foreach ($element->children('li') as $li) {

// is active ?
if ($active = $li->attr('data-menu-active')) {
$active = $active == 2 ? ' active current' : ' active';
}




// is parent ?
$ul = $li->children('ul');
$parent = $ul->length ? ' parent' : null;

// set class in li
$li->attr('class', sprintf('level%d item%s'.$parent.$active, $level + 1, $li->attr('data-id')));









// set class in a/span
foreach ($li->children('a,span') as $child) {

// get title
$title = $child->first('span:first');

// set subtile
$subtitle = $title ? explode('||', $title->text()) : array();

if (count($subtitle) == 2) {
$li->addClass('hassubtitle');
$title->html(sprintf('<span class="title">%s</span><span class="subtitle">%s</span>', trim($subtitle[0]), trim($subtitle[1])));
}





// set image
if ($image = $li->attr('data-menu-image')) {
$title->prepend(sprintf('<span class="icon" style="background-image: url(\'%s\');"> </span>', $image));
}

$child->addClass(sprintf('level%d'.$parent.$active, $level + 1));




}

// process submenu
if ($ul->length) {
self::_process($module, $ul->item(0), $level + 1);
}
}

}

}

Что нужно:

Нужно добавить одному из пунктов аттрибут 
Код
data-lightbox

Вот что я сделал: Добавил такой вот код

Код
$miki = 'data-lightbox';
$child->attr($miki,'transitionIn:elastic;transitionOut:elastic;');


Что я получил:

Я получил то что хотел, с одной оговоркой - атрибут был добавлен всем пунктам меню и это логично.
Тогда я задал пункту меню  - CSS-класс ссылки чтобы он отличался от других пунктов


Вопрос:

как правильно написать условие на языке php, чтобы аттрибут был присвоен только одному из пунктов



*

ruopg

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
похоже все уже начали новый год отмечать
*

ruopg

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Пробовал такое
Код
if(isset($child('class','ids'))
{
$child->attr($miki,'transitionIn:elastic;transitionOut:elastic;');
}
Но выдает фатальную ошибку
Fatal error: Can't use function return value in write context
*

oriol

  • Завсегдатай
  • 1042
  • 100 / 4
Как правильно?
Добавить в CSS класс и при создании пункта меню указать этот CSS-класс
в твоем случае data-lightbox

зы: А за красный цвет можешь быть наказан
« Последнее редактирование: 31.12.2011, 16:06:52 от oriol »
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Я так понял в цикле foreach ($element->children('li') as $li) {} нужно проверять этот самый класс ссылки, примерно так:
$a = $li->children('a:first'); // либо $li->children('a')->item(0);
if ($a->attr('class') == 'myClass') { // или if ($a->hasClass('myClass'))
    $li->attr('data-lightbox', 'transitionIn:elastic;transitionOut:elastic;'); // и случаем ли не "{transitionIn: 'elastic', transitionOut: 'elastic'}" ?
}

Это все примерно, так как я не пойму что это за модуль и какому классу принадлежит $element (смахивает на DomElement)

Не уверен что на этом этапе li->a имеет attr('class') со значением установленным в админке, и что добавленный attr('data-lightbox') окажется в конечном html-коде. Помоему тык проще на js инициализировать нужные функции с нужными параметрами.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

ruopg

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Как правильно?
Добавить в CSS класс и при создании пункта меню указать этот CSS-класс
в твоем случае data-lightbox

зы: А за красный цвет можешь быть наказан

Нет, мне нужен не CSS класс пункта, а атрибут т.е.   если заглянуть в код сайта я должен увидет нечто следующее
Код
<a data-lightbox="transitionIn:elastic;transitionOut:elastic;" href="#test" class="ids">
а если последовать твоему совету я получу вот что:
Код
<a class="data-lightbox ids" href="#test">
*

ruopg

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Я так понял в цикле foreach ($element->children('li') as $li) {} нужно проверять этот самый класс ссылки, примерно так:
$a = $li->children('a:first'); // либо $li->children('a')->item(0);
if ($a->attr('class') == 'myClass') { // или if ($a->hasClass('myClass'))
    $li->attr('data-lightbox', 'transitionIn:elastic;transitionOut:elastic;'); // и случаем ли не "{transitionIn: 'elastic', transitionOut: 'elastic'}" ?
}

Это все примерно, так как я не пойму что это за модуль и какому классу принадлежит $element (смахивает на DomElement)

Не уверен что на этом этапе li->a имеет attr('class') со значением установленным в админке, и что добавленный attr('data-lightbox') окажется в конечном html-коде. Помоему тык проще на js инициализировать нужные функции с нужными параметрами.

друг, если не смогу в ближайшее время, возьмешься выполнить?
*

ruopg

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Все сделал, всем спасибо
Итоговый код:
Код
if ($child->hasClass('ids'))
{
$child->attr($miki,'transitionIn:elastic;transitionOut:elastic;');
}
*

arma

  • Завсегдатай
  • 1752
  • 81 / 3
Кто-нибудь помогите правильно вставить тот же атрибут в следующее меню, а то или ошибка, или ничего не происходит.
Вот код меню:

Код
<?php
/**
* @package   Warp Theme Framework
* @author    YOOtheme http://www.yootheme.com
* @copyright Copyright (C) YOOtheme GmbH
* @license   http://www.gnu.org/licenses/gpl.html GNU/GPL
*/

/*
                Class: WarpMenuPre
                               Menu base class
*/
class WarpMenuPre extends WarpMenu {

                /*
                               Function: process

                               Returns:
                                               Object
                */                           
                public function process($module, $element) {

                               // has ul ?
                               if (!$element->first('ul:first')) {
                                               return false;
                               }

                               // init vars
                               $menu   = JSite::getMenu();
                               $images = strpos($module->parameter->get('class_sfx'), 'images-off') === false;       

                               foreach ($element->find('li') as $li) {

                                               // get menu item
                                               if (preg_match('/item-(\d+)/', $li->attr(version_compare(JVERSION, '1.7.0', '>=')? 'class' : 'id'), $matches)) {
                                                               $item = $menu->getItem($matches[1]);
                                               }

                                               // set id
                                               if (isset($item)) {
                                                               $li->attr('data-id', $item->id);
                                               }

                                               // set current and active
                                               if ($li->hasClass('active')) {
                                                               $li->attr('data-menu-active', $li->hasClass('current') == 'current' ? 2 : 1);
                                               }

                                               // set columns and width
                                               if (isset($item) && strpos($item->params->get('pageclass_sfx'), 'column')!== false) {

                                                               if (preg_match('/columns-(\d+)/', $item->params->get('pageclass_sfx'), $matches)) {
                                                                              $li->attr('data-menu-columns', $matches[1]);
                                                               }
                                                               
                                                               if (preg_match('/columnwidth-(\d+)/', $item->params->get('pageclass_sfx'), $matches)) {
                                                                              $li->attr('data-menu-columnwidth', $matches[1]);
                                                               }
                                                               
                                               }
                                               
                                               // set image
                                               if (isset($item) && $images && ($image = $item->params->get('menu_image'))) {
                                                               if ($image != -1) {
                                                                              $li->attr('data-menu-image', JURI::base().$image);
                                                               }
                                               }
                                               
                                               // set title span and clean empty text nodes
                                               foreach ($li->children('a,span') as $child) {
                                                               $child->html(sprintf('<span>%s</span>', trim($child->text())));
                                               }

                                               $li->removeAttr('id')->removeAttr('class');
                               }
                                                               
                               return $element;
                }

}
*

arma

  • Завсегдатай
  • 1752
  • 81 / 3
Решил другим путем: подправил файл default_url.php
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Назначение макета, посредством ссылки в меню

Автор xxxLOGIATxxx

Ответов: 20
Просмотров: 7524
Последний ответ 04.02.2022, 14:44:14
от hoi
Съезжает меню при наведении

Автор yyyuuu

Ответов: 4
Просмотров: 4414
Последний ответ 08.12.2020, 11:12:32
от AlexB
Проблемы в горизонтальном меню Joomla 2.5

Автор Димьяна

Ответов: 1
Просмотров: 5021
Последний ответ 27.11.2018, 14:58:30
от Ragivort
mod_menu и подписи к пунктам меню (subtitles)

Автор St@lker

Ответов: 21
Просмотров: 9320
Последний ответ 29.10.2017, 16:24:00
от xilog
Перенос строки в название пункта меню Joomla

Автор skitskis

Ответов: 33
Просмотров: 19029
Последний ответ 29.10.2017, 10:36:30
от xilog