Новости 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

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

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Здравствуйте.
В стандартном модуле вывода категорий как меню http://joomshopping.pro/download/module-category.html хочу сделать вывод категорий в зависимости от их вложения.
Уже доделывал, чтоб показывало количество вложенной продукции.
Сейчас выводит все одним списком подряд
Сделал, чтобы если выбираешь категорию, у которой есть вложения - подставляет ul li как надо, и тогда категории на одном уровне с выбранной отображаются рядом как li, а вложенные категории в ul. То есть многоуровневый список вроде норм.
Но если выделять дочернюю категорию, то строится начинает относительно нее, и все категории выше - тоже на уровне ее. А надо что бы дочерние все равно в ul были... никак не могу придумать, как это сделать.
Сейчас вот такой вариант:
код шаблона вывода default.php
Код
<?php 
<ul<?php if ($params->get('moduleclass_sfx')){ echo (" class=\"".$params->get('moduleclass_sfx')."\"");} ?>>
<?php

foreach($categories_arr as $key => $curr){

print $curr->html_tags_open;?>
            <a href = "<?php print $curr->category_link; ?>"><?php print $curr->name; if ($params->get('show_count')){?><span class="count"><?php print " (".$countproducts_all[$key].")"; ?></span><?php }?>
                <?php if ($show_image && $curr->category_image){?>
                    <img align = "absmiddle" src = "<?php print $jshopConfig->image_category_live_path."/".$curr->category_image?>" alt = "<?php print $curr->name?>" />
                <?php } ?>
            </a>
     <?php print $curr->html_tags_close;?>

<?php  } ?>

в html_tags_open и html_tags_close подставляются li или открывающие/закрывающие ul

файл с формированием данных helper.php
Код
<?php
class jShopCategoriesHelper{
    
  public static function getTreeCats($order, $ordering, $category_id, $categories_id, &$categories, $level=0){

        if ($category_id){

            if (isset($categories_id[$level])){
                $cat = JTable::getInstance('category', 'jshop');        
                $cat->load($categories_id[$level]);

                $cats = $cat->getSisterCategories($order, $ordering);

                foreach ($cats as $key=>$value){
                    $value->level = $level;

                    if (in_array($value->category_id, $categories_id)){

$value->html_tags_open .= "<li>";
$categories[] = $value;

 if ($value->category_id == $category_id){ //просматриваемая категория выделена, показываем подкатегории
 
 $value->html_tags_open .= "<active>";
 $value->html_tags_close .= "</active>";
 
 $cat = JTable::getInstance('category', 'jshop');        
 $cat->load($categories_id[$level]);
 $cat->category_id = $category_id;
 $childs = $cat->getChildCategories($order, $ordering);
 
 
  //список вложенных категорий
  foreach ($childs as $key2=>$value2){
  $value2->level = $level + 1;
  $value2->html_tags_open .= "<li>";
  $categories[] = $value2;
  }
  if ($childs){
  $value->html_tags_close .= "<ul>";
  $childs[count($childs)-1]->html_tags_close .= "</ul>";
  }
  //конец списка вложенных категорий
}
                        
jShopCategoriesHelper::getTreeCats($order, $ordering, $category_id, $categories_id, $categories, ++$level);
$level--;
} else { $categories[] = $value;

}

                }

            }
        } else {
            $cat = JTable::getInstance('category', 'jshop');
            $cat->category_parent_id = 0;
            $cats = $cat->getSisterCategories($order, $ordering);
            foreach($cats as $key=>$value){
                $cats[$key]->level = 0;
$value->html_tags_open = "<li>";
            }
            $categories = $cats;  
            $count = count($cats);
        }

    }
    
  public static function getCatsArray($order, $ordering, $category_id, $categories_id = array()){
       $res_arr = array();
       jShopCategoriesHelper::getTreeCats($order, $ordering, $category_id, $categories_id, $res_arr, 0);
       return $res_arr;
    }

   function getTotalItem($category_id){
      $arrCate = array();
      $arrCate = jShopCategoriesHelper::getAllSubcates($category_id);
      if(empty($arrCate)){
         return 0;
      }
      if(count($arrCate) == 1){
         $where = " WHERE pc.category_id = ".$arrCate[0]. " ";
      }else{
         $strCate = implode(',',$arrCate);
         $where = " WHERE pc.category_id IN (".$strCate.") ";
      }
      $db = &JFactory::getDBO();
      $query = "SELECT COUNT(DISTINCT pc.product_id) AS total FROM `#__jshopping_products_to_categories` pc ".$where;
      $db->setQuery($query);
        $total = $db->loadObject();
      return $total->total;
   }
    
 function getAllSubcates($category_id){
      $lang = &JSFactory::getLang();
      $db = &JFactory::getDBO();
      $tmp[] = $category_id;
      $query = "SELECT `".$lang->get('name')."` as name, category_id, category_parent_id, category_publish FROM `#__jshopping_categories`
      where category_publish = '1' ORDER BY category_parent_id, ordering";
      $db->setQuery($query);
      $all_cats = $db->loadObjectList();

      if(count($all_cats)) {
         foreach ($all_cats as $key => $value) {
            if(!empty( $value->category_parent_id ) && in_array($value->category_parent_id, $tmp)){
               $tmp[] = $value->category_id;
            }
         }
      }
      return $tmp;
   }

}
?>
« Последнее редактирование: 13.10.2014, 08:06:38 от ShutTap »
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Всё, решено. Вот, может кому пригодится:

файл helper.php
Код
<?php
class jShopCategoriesHelper{
    
  public static function getTreeCats($order, $ordering, $category_id, $categories_id, &$categories, $level=0){

        if ($category_id){

            if (isset($categories_id[$level])){
                $cat = JTable::getInstance('category', 'jshop');        
                $cat->load($categories_id[$level]);

                $cats = $cat->getSisterCategories($order, $ordering);

if ($level!==0){
$cats[0]->html_tags_open .= "<ul>";
$cats[count($cats)-1]->html_tags_close .= "</ul>";
}

                foreach ($cats as $key=>$value){
                    $value->level = $level;

                    if (in_array($value->category_id, $categories_id)){

$value->html_tags_open .= "<li>";
$categories[] = $value;

 if ($value->category_id == $category_id){ //просматриваемая категория выделена, показываем подкатегории
 
 $value->html_tags_open .= "<active>";
 $value->html_tags_close .= "</active>";
 
 $cat = JTable::getInstance('category', 'jshop');        
 $cat->load($categories_id[$level]);
 $cat->category_id = $category_id;
 $childs = $cat->getChildCategories($order, $ordering);
 
 
  //список вложенных категорий
  foreach ($childs as $key2=>$value2){
  $value2->level = $level + 1;
  $value2->html_tags_open .= "<li>";
  $categories[] = $value2;
  }
  if ($childs){
  $value->html_tags_close .= "<ul>";
  $childs[count($childs)-1]->html_tags_close .= "</ul>";
  }
  //конец списка вложенных категорий
}
                        
jShopCategoriesHelper::getTreeCats($order, $ordering, $category_id, $categories_id, $categories, ++$level);
$level--;
} else {
 $value->html_tags_open .= "<li>";
 $categories[] = $value;
}

                }

            }
        } else {
            $cat = JTable::getInstance('category', 'jshop');
            $cat->category_parent_id = 0;
            $cats = $cat->getSisterCategories($order, $ordering);
            foreach($cats as $key=>$value){
             $cats[$key]->level = 0;
             $value->html_tags_open .= "<li>";
            }
            $categories = $cats;  
            $count = count($cats);
        }

}
    
  public static function getCatsArray($order, $ordering, $category_id, $categories_id = array()){
       $res_arr = array();
       jShopCategoriesHelper::getTreeCats($order, $ordering, $category_id, $categories_id, $res_arr, 0);
       return $res_arr;
    }

   function getTotalItem($category_id){
      $arrCate = array();
      $arrCate = jShopCategoriesHelper::getAllSubcates($category_id);
      if(empty($arrCate)){
         return 0;
      }
      if(count($arrCate) == 1){
         $where = " WHERE pc.category_id = ".$arrCate[0]. " ";
      }else{
         $strCate = implode(',',$arrCate);
         $where = " WHERE pc.category_id IN (".$strCate.") ";
      }
      $db = &JFactory::getDBO();
      $query = "SELECT COUNT(DISTINCT pc.product_id) AS total FROM `#__jshopping_products_to_categories` pc ".$where;
      $db->setQuery($query);
        $total = $db->loadObject();
      return $total->total;
   }
    
 function getAllSubcates($category_id){
      $lang = &JSFactory::getLang();
      $db = &JFactory::getDBO();
      $tmp[] = $category_id;
      $query = "SELECT `".$lang->get('name')."` as name, category_id, category_parent_id, category_publish FROM `#__jshopping_categories`
      where category_publish = '1' ORDER BY category_parent_id, ordering";
      $db->setQuery($query);
      $all_cats = $db->loadObjectList();

      if(count($all_cats)) {
         foreach ($all_cats as $key => $value) {
            if(!empty( $value->category_parent_id ) && in_array($value->category_parent_id, $tmp)){
               $tmp[] = $value->category_id;
            }
         }
      }
      return $tmp;
   }

}
?>
« Последнее редактирование: 10.10.2014, 13:34:04 от ShutTap »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывод списка товаров с учетом значения связанного атрибута

Автор newalex

Ответов: 2
Просмотров: 1324
Последний ответ 17.10.2024, 08:51:19
от newalex
[Решено] Адрес e-mail как логин при регистрации

Автор orexov_m

Ответов: 51
Просмотров: 15360
Последний ответ 28.02.2024, 18:34:01
от nevigen
Плагин - Вывод значения поля из таблицы продуктов в корзине JoomShopping

Автор draff

Ответов: 3
Просмотров: 2357
Последний ответ 26.02.2024, 07:00:01
от kit2m2
[Решено] - Заказ на одной странице

Автор shurakana

Ответов: 58
Просмотров: 19207
Последний ответ 16.03.2023, 09:53:16
от kit2m2
[Решено] Товар на замену в блоке с ценой

Автор dron

Ответов: 2
Просмотров: 2826
Последний ответ 13.04.2022, 16:09:53
от dron