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

Ragnos

  • Захожу иногда
  • 253
  • 0 / 0
Доработка плагина
« : 06.07.2014, 17:11:08 »
Здравствуйте, есть плагин спойлера, работает он если в материале перед текстом который нужно скрыть, вставить {spoiler}, но в этом и кроется проблема, получается что все что идет после спойлера скрывается, какую то часть одну скрыть не получится, как можно сделать чтобы можно было вставлять замыкающий код, то есть чтобы было так :

{spoiler}
скрытый текст
{/spoiler}
обычный текст

в php вообще не разбираюсь, может то подскажет

defined('_JEXEC') or die;
jimport('joomla.plugin.plugin');
class PlgContentPlg_spoiler extends JPlugin {
   public function onContentPrepare($context, &$row, &$params, $page = 1) {
        if (JString::strpos($row->text, '{spoiler}') === false) return true;
      $row->text = str_replace('<p>{spoiler}</p>', '{spoiler}', $row->text);
        $row->text = str_replace('{spoiler}', '<div id="spoiler_content">', $row->text).'</div><div class="br_right"><div id="spoiler_button">Читать полностью</div></div><div>
        <form>
<input type="button" value="Назад на предыдущую страницу"
onClick="history.back()">
</form>
        </div>';
        return true;
    }
}
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Доработка плагина
« Ответ #1 : 06.07.2014, 18:20:40 »
Код: php
...
public function onContentPrepare($context, &$row, &$params, $page = 1)
{
  if (JString::strpos($row->text, '{spoiler}')!== false) {
    $match_start = '{spoiler}';
    $match_end = '{/spoiler}';
    $row->text = str_replace(array('<p>{spoiler}</p>', '<p>{/spoiler}</p>'), array($match_start, $match_end), $text);
    $html_start = '<div id="spoiler_content">';
    $html_end = '</div><div class="br_right"><div id="spoiler_button">Читать полностью</div></div>';
    $html_end .=  '<form><input type="button" value="Назад на предыдущую страницу" onClick="history.back()"></form>';
    $row->text = str_replace(array($match_start,  $match_end), array($html_start, $html_end), $row->text);
  }
  return true;
}
...
интернет-блог: http://websiteprog.ru
*

Ragnos

  • Захожу иногда
  • 253
  • 0 / 0
Re: Доработка плагина
« Ответ #2 : 06.07.2014, 18:49:54 »
Чтото не работает, текст вообще исчез, я поставил конструкцию {spoiler}{/spoiler} и содержимое вовсе исчезло, может я как то не так поставил, вашу запись, вот полный измененный код

defined('_JEXEC') or die;
jimport('joomla.plugin.plugin');
class PlgContentPlg_Gugospoiler extends JPlugin {
public function onContentPrepare($context, &$row, &$params, $page = 1)
{
  if (JString::strpos($row->text, '{spoiler}')!== false) {
    $match_start = '{spoiler}';
    $match_end = '{/spoiler}';
    $row->text = str_replace(array('<p>{spoiler}</p>', '<p>{/spoiler}</p>'), array($match_start, $match_end), $text);
    $html_start = '<div id="gugo_spoiler_content">';
    $html_end = '</div><div class="br_right"><div id="gugo_spoiler_button">Читать полностью</div></div>';
    $html_end .=  '<form><input type="button" value="Назад на предыдущую страницу" onClick="history.back()"></form>';
    $row->text = str_replace(array($match_start,  $match_end), array($html_start, $html_end), $row->text);
  }
  return true;
}
}

к этому плагину так же прилагается java код, может в нем чтото не так из-за изменений,

jQuery(document).ready(function()

{jQuery('#gugo_spoiler_content').hide()

   if (jQuery(".products_related_scroll").length>0)
    {        
        
        jQuery(".products_related_scroll").mCustomScrollbar
        ({
             horizontalScroll:true,
            
            scrollButtons:
            {            
               enable:true,               
               scrollType:"pixels",
               scrollAmount:116            
            }                        
      });
      /* hide here couse this will nead to be parsed */
      jQuery(".products_related_scroll").hide();

      jQuery(".products_related_n").click(function()
      {
         jQuery(this).parent().parent().find('.products_related_scroll').toggle(200);
      });
   }



jQuery('#gugo_spoiler_button').click(function(){
   if (jQuery('#gugo_spoiler_content').is(':visible')) {
      jQuery('#gugo_spoiler_content').slideUp(1000);
      jQuery('#gugo_spoiler_button').html('Читать полностью');
   } else {
      jQuery('#gugo_spoiler_content').slideDown(1000);
      jQuery('#gugo_spoiler_button').html('Свернуть текст');
   }
});

});

Кстати кнопку "назад" я вставил позже в плагин, это не его родной
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Доработка плагина
« Ответ #3 : 06.07.2014, 19:04:06 »
вот  здесь вот
$row->text = str_replace(array('<p>{spoiler}</p>', '<p>{/spoiler}</p>'), array($match_start, $match_end), $text);
замените  $text на $row->text:
$row->text = str_replace(array('<p>{spoiler}</p>', '<p>{/spoiler}</p>'), array($match_start, $match_end), $row->text);
опечатался
интернет-блог: http://websiteprog.ru
*

Ragnos

  • Захожу иногда
  • 253
  • 0 / 0
Re: Доработка плагина
« Ответ #4 : 06.07.2014, 19:15:17 »
Спасибо большое! Выручили!
*

Ragnos

  • Захожу иногда
  • 253
  • 0 / 0
Re: Доработка плагина
« Ответ #5 : 06.07.2014, 19:18:41 »
Извиняюсь что борзею, но не поможете или хотя бы подскажите, как еще в таком плагине сделать такую же фишку как и в плагине lv spoiler, то есть чтоб можно было самому заголовок спойлера редактировать так же как и там

{spoiler title=Заголовок opened=1}Скрытый текст{/spoiler}

если вообще возможно
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Доработка плагина
« Ответ #6 : 06.07.2014, 19:32:02 »
я не знаю как работает плагин lv spoiler, но думаю без регулярок тут не обойтись..заголовок этот для какого блока должен задаваться?
интернет-блог: http://websiteprog.ru
*

Ragnos

  • Захожу иногда
  • 253
  • 0 / 0
Re: Доработка плагина
« Ответ #7 : 06.07.2014, 19:42:54 »
А он впринципе такой же, то есть так же в материал вставляется код, только в этом коде можно еще и заголовок спойлера прописать:

{spoiler title=Заголовок opened=1}Скрытый текст{/spoiler}

одна из его фишек это, для каждого спойлера свой заголовок
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Доработка плагина
« Ответ #8 : 06.07.2014, 19:48:41 »
<div id="gugo_spoiler_content" title="Заголовок opened"> так чтоли? единичка непонятно зачем..
интернет-блог: http://websiteprog.ru
*

Ragnos

  • Захожу иногда
  • 253
  • 0 / 0
Re: Доработка плагина
« Ответ #9 : 06.07.2014, 19:54:51 »
единичка это означало что споилер по умолчанию открыт, а если 0 то закрыт, ну это естественно в том плагине, а в этом куда эту запись вставить ?

сюда ?

    $html_start = '<div id="gugo_spoiler_content">';
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Доработка плагина
« Ответ #10 : 06.07.2014, 20:39:00 »
я так думаю что-то типа такого:
Код: php
...
public function onContentPrepare($context, &$row, &$params, $page = 1)
{
  if (JString::strpos($row->text, '{spoiler}')!== false) {
    $regexp = '/(?:<p>)*{spoiler\s*title=[\"\'](.*)[\"\'].*}(?:<\/p>)*/u';
    preg_match($regexp, $row->text, $matches);
    $spoiler_begin = $matches[0];
    $spoiler_end = '{/spoiler}';
    $html_begin = '<div id="gugo_spoiler_content" title="'. $matches[1] .'">';
    $html_end = '</div><div class="br_right"><div id="spoiler_button">Читать полностью</div></div>';
    $html_end .=  '<form><input type="button" value="Назад на предыдущую страницу" onClick="history.back()"></form>';
    $row->text = str_replace(array($spoiler_begin,  $spoiler_end), array($html_begin, $html_end), $row->text);
  }
  return true;
}
...
интернет-блог: http://websiteprog.ru
*

Ragnos

  • Захожу иногда
  • 253
  • 0 / 0
Re: Доработка плагина
« Ответ #11 : 06.07.2014, 20:41:28 »
А тогда в материал какую конструкцию вставлять, аналогичную да ? {spoiler title=Заголовок opened=1}Скрытый текст{/spoiler}
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Доработка плагина
« Ответ #12 : 06.07.2014, 20:43:04 »
{spoiler title="ваш заголовок"}Скрытый текст{/spoiler}

и я там поправил немного код посмотрите.
интернет-блог: http://websiteprog.ru
*

Ragnos

  • Захожу иногда
  • 253
  • 0 / 0
Re: Доработка плагина
« Ответ #13 : 06.07.2014, 20:56:16 »
код подправили тот что последний прислали ? Не рработает, поставил код в материал, но не работает, код тупо как текст стоит
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Доработка плагина
« Ответ #14 : 06.07.2014, 21:24:01 »
if (JString::strpos($row->text, '{/spoiler}')!== false) {
иначе нет у вас такого с заголовками и плагин не будет отрабатывать
*

Ragnos

  • Захожу иногда
  • 253
  • 0 / 0
Re: Доработка плагина
« Ответ #15 : 06.07.2014, 21:35:24 »
ок, плагин ожил, но заголовка все же нет
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Доработка плагина
« Ответ #16 : 06.07.2014, 23:57:35 »
да и кстатии  не будет работать как надо если спойлеров много, вот более правильный вариант:
Код: php
...
    $regexp = '/(?:<p>)*{spoiler\s*(?:(title=[\"\'].*[\'\"]).*)*}(?:<\/p>)*/uU';  
    preg_match_all($regexp, $row->text, $matches, PREG_SET_ORDER);
    if(!empty($matches))
    {
       foreach($matches as $match) {
           $spoiler_begin = $match[0];
           $html_begin = '<div id="gugo_spoiler_content"' . ($match[1] ? $match[1] : ''). '>';
           $row->text = str_replace($spoiler_begin, $html_begin, $row->text);
       }
    }
    $spoiler_end = '{/spoiler}';
    $html_end = '</div><div class="br_right"><div id="spoiler_button">Читать полностью</div></div>';
    $html_end .=  '<form><input type="button" value="Назад на предыдущую страницу" onClick="history.back()"></form>';
    $row->text = str_replace($spoiler_end, $html_end, $row->text);
...
интернет-блог: http://websiteprog.ru
*

Ragnos

  • Захожу иногда
  • 253
  • 0 / 0
Re: Доработка плагина
« Ответ #17 : 07.07.2014, 10:11:41 »
не работает, то есть работает, но заголовка нету, может я как то Неправильно ваш код вставляю ?

defined('_JEXEC') or die;
jimport('joomla.plugin.plugin');
class PlgContentPlg_Gugospoiler extends JPlugin {
public function onContentPrepare($context, &$row, &$params, $page = 1)
{
  if (JString::strpos($row->text, '{/spoiler}')!== false) {
    $regexp = '/(?:<p>)*{spoiler\s*(?:(title=[\"\'].*[\'\"]).*)*}(?:<\/p>)*/uU';   
    preg_match_all($regexp, $row->text, $matches, PREG_SET_ORDER);
    if(!empty($matches))
    {
       foreach($matches as $match) {
           $spoiler_begin = $match[0];
           $html_begin = '<div id="gugo_spoiler_content"' . ($match[1] ? $match[1] : ''). '>';
           $row->text = str_replace($spoiler_begin, $html_begin, $row->text);
       }
    }
    $spoiler_end = '{/spoiler}';
    $html_end = '</div><div class="br_right"><div id="gugo_spoiler_button">Читать полностью</div></div>';
    $html_end .=  '<form><input type="button" value="Назад на предыдущую страницу" onClick="history.back()"></form>';
    $row->text = str_replace($spoiler_end, $html_end, $row->text);
  }
  return true;
}
}
*

Ragnos

  • Захожу иногда
  • 253
  • 0 / 0
Re: Доработка плагина
« Ответ #18 : 07.07.2014, 10:13:06 »
а спойлеры на странице только ваши, то есть эти

{spoiler title="тестовый заголовок"}
текст
{/spoiler}
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Доработка плагина
« Ответ #19 : 07.07.2014, 16:14:16 »
где должен быть быть заголовок? <div id="gugo_spoiler_content" titile="..."> сюда должен добавится.
интернет-блог: http://websiteprog.ru
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Дополнительные параметры пунктов меню для плагина

Автор enshtein

Ответов: 3
Просмотров: 3065
Последний ответ 06.11.2014, 16:48:17
от lebmarg
Нужна помощь в разработке плагина. Цена?

Автор jason1311

Ответов: 0
Просмотров: 1224
Последний ответ 15.05.2014, 18:20:10
от jason1311
Как запустить выполнение плагина принудительно из модуля?

Автор NemoNik

Ответов: 8
Просмотров: 2278
Последний ответ 14.05.2014, 17:35:04
от NemoNik
Получить значение параметра плагина в js

Автор AlekVolsk

Ответов: 24
Просмотров: 2039
Последний ответ 30.04.2014, 18:13:33
от Aleks.Denezh
С чего начать создание компонена, плагина для php+Joomla

Автор SolomonFox

Ответов: 2
Просмотров: 1335
Последний ответ 15.04.2014, 02:08:10
от Aleks.Denezh