Новости Joomla

Joomla 6: Автоматические обновления ядра в Joomla

Joomla 6: Автоматические обновления ядра в Joomla

👩‍💻 Joomla 6: Автоматические обновления ядра в Joomla. В октябрьском номере официального журнала Joomla - Joomla Community Magazine вышла статья David Jardin, где рассказывается о внедрении функционала автоматического обновления ядра Joomla.❓Почему сейчас? Joomla же жила как-то 20 лет без автоматических обновлений?Это оказалась самая востребованная за последнее время от пользователей Joomla функция. Но, основная причина внедрения - проблемы безопасности. Всякий раз, когда в новой версии Joomla устраняется уязвимость, злоумышленники начинают анализировать код, чтобы выяснить, какая именно уязвимость была исправлена. И как только они это выясняют - начинается разработка автоматизированных скриптов для взлома как можно большего количества сайтов. Затем доступы к автоматически взломанным сайтам продаются в профильных чатах и ресурсах "пачками" по несколько сотен тысяч или миллионов сайтов. Ваш сайт могли взломать несколько лет назад, но воспользоваться уязвимостью могут не сразу, а тогда, когда у злоумышленников возникнет необходимость. И только после этого вы может быть узнаете об этом.Анализ патча, понимание проблемы и разработка скрипта требуют времени. И если владелец сайта не обновит его до истечения этого срока, сайт может быть взломан. А хакеры действуют быстро! Для критических, легко эксплуатируемых уязвимостей речь идёт о временном окне в 10–12 часов — и этого времени явно недостаточно, чтобы все успели обновить свои сайты.Здесь выходят на первый план автоматизированные обновления: проект Joomla теперь может активно устанавливать обновления (и, следовательно, исправления безопасности) на сайты, чтобы гарантировать, что сайты действительно обновляются вовремя.🕘 От первых идей до реализации прошло 5 лет. И здесь можно вспомнить, как в Joomla 5.1 внедрили TUF - The Update Framework, позволяющий устанавливать защищённое соединение между сайтом и сервером обновлений и исключает возможность supply chain attack (атаки на цепочку поставок).Об особенностях реализации и требованиях к сайту читаем подробнее в статье на JCM.@joomlafeed#joomla #secutiry #jcm

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™. Интервью с волонтёрами 🎈Ну что, друзья, вот и настал этот долгожданный момент. Мы выпустили первое издание собственного журнала под эгидой NorrNext, который включает в себя интервью с видными деятелями сообщества из разных стран и континентов.Общий нарратив: показать, что нас объединяет (Joomla) и узнать больше о людях, которые вносят свой вклад в развитие платформы в своих сообществах. 20 лет — это много. Давайте же узнаем о коллегах 🎁 Первый цикл включает такие страны, как Австрия, Испания, Латвия, Россия, Румыния, Тайланд, Черногория, Чехия.⚙️ С кем интервью: ✔️ Владимир Елисеев 🇷🇺✔️ Дмитрий Рекун 🇱🇻✔️ Дмитрий Цымбал 🇷🇺✔️ Евгений Сивоконь 🇷🇺 ✔️ Сергей Толкачёв 🇷🇺✔️ Dénes Székely 🇷🇴✔️ Jan Pavelka 🇨🇿✔️ Miljan Vujosevic 🇲🇪✔️ Sergio Iglesias 🇪🇸✔️ Sigrid Gramlinger 🇦🇹✔️ Pisan Chueatchatchai 🇹🇭‼️ Новые интервью будут добавляться до конца декабря 2025. Заходите по ссылке время от времени💡👉 Читать далее

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

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
Просмотров: 6644
Последний ответ 04.02.2022, 14:44:14
от hoi
Съезжает меню при наведении

Автор yyyuuu

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

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

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

Автор St@lker

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

Автор skitskis

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