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

Gandriyko

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Привет, форумчане!
Есть Joomla 2.5.28+Virtuemart 2.6.0 и его модуль mod_virtuemart_cart.
Подскажите пожалуйста кусочек кода, который добавит кнопку "Убрать товар", с помощью которой можно будет убирать товар из корзины не заходя в неё.
Копировал код из других сайтов, кнопка появлялась, но не работала. (предполагаю из-за разницы версий VM)

Вот код из файла
Мой_сайт/templates/шаблон/html/mod_virtuemart_cart/default.php

Код
<?php 

// no direct access
defined('_JEXEC') or die('Restricted access');
// get the tmpl variable from url
$tmpl = JRequest::getCmd('tmpl', '');
// check if it was an AJAX request
if($tmpl == 'cart') {
// if it was an AJAX request - get images
if(count($data->products)) {
// get the DB access
$db = JFactory::getDBO();
// prepare an array of SKUs
$skus = array();

foreach($data->products as $product) {
array_push($skus, "'".$product['product_sku']."'");
}
// prepare first query
$query1 = $db->getQuery(true);
$query1->select('`p`.`virtuemart_product_id` AS `pid`, `p`.`product_sku` AS `sku`');
$query1->from('#__virtuemart_products AS p');
$query1->where('`p`.`product_sku` IN('.implode(',', $skus).')');
$db->setQuery((string)$query1);
$ids = $db->loadObjectList();

$pids = array();
// get the IDs
if ($ids) {
foreach($ids as $id) {
array_push($pids, $id->pid);
}
}
// get the images
$query2 = $db->getQuery(true);
$query2->select('`m`.`file_url` AS `file`, `p`.`product_sku` AS `sku`');
$query2->from('#__virtuemart_products AS p');
$query2->leftJoin('#__virtuemart_product_medias AS `pm` ON `pm`.`virtuemart_product_id` = `p`.`virtuemart_product_id`');
$query2->leftJoin('#__virtuemart_medias AS `m` ON `m`.`virtuemart_media_id` = `pm`.`virtuemart_media_id`');
$query2->where('`p`.`virtuemart_product_id` IN('.implode(',', $pids).')');
$query2->order('`pm`.`ordering` ASC');
$db->setQuery((string)$query2);
//echo (string) $query2;
$pimages = $db->loadObjectList();

$images = array();
// get the first products images
if ($pimages) {
foreach($pimages as $image) {
if(!isset($images[$image->sku])) {
$images[$image->sku] = $image->file;
}
}
}
}
}

if($tmpl == 'json') {
$matches = array();
preg_match('@<strong>(.*?)<\/strong>@mis', $data->billTotal, $matches);
echo count($data->products). ' ' . JText::_('TPL_GK_LANG_ITEMS'). ' - ' . $matches[0];
}

?>
<?php if($tmpl == 'cart') : ?>

<div class="vmGkCartModule <?php echo $params->get('moduleclass_sfx'); ?>">
          <h3><span><a href="http://коваленко1.рф/virtuemart/cart/"><?php echo JText::_('TPL_GK_LANG_MY_CART'); ?><a/></span></h3>
          <?php if ($show_product_list) : ?>
          <div class="vmGkCartProducts">
                    <?php
$iteration = 1;
foreach ($data->products as $product) :
?>
                    <div><img src="<?php echo $images[$product['product_sku']]; ?>" alt="" />
                              <div>
                                        <h3><span><?php echo  $product['quantity'] ?>&times;</span><?php echo  $product['product_name'] ?></h3>
                                        <?php if ( !empty($product['product_attributes']) ) : ?>
                                        <?php echo str_replace('<br />', ' / ', $product['product_attributes']); ?>
                                        <?php endif; ?>
                                        <?php if ($show_price) : ?>
                                        <span class="gkPrice num<?php echo $iteration%3; ?>"><?php echo str_replace(' ', '', $product['prices']); ?></span>
                                        <?php endif; ?>
                              </div>
                    </div>
                    <?php
$iteration++;
endforeach;
?>
          </div>
          <?php endif; ?>
          <?php if(count($data->products) == 0) : ?>
          <?php echo JText::_('TPL_GK_LANG_EMPTY_CART'); ?>
          <?php endif; ?>
         
          <?php if ($data->totalProduct) : ?>
          <div class="gkTotal"> <?php echo str_replace(array(JText::_('COM_VIRTUEMART_CART_TOTAL').' : <strong>', '</strong>', ' '), '', $data->billTotal); ?> </div>
          <?php endif; ?>
          <div class="gkShowCart"> <?php echo $data->cart_show; ?> </div>
          <noscript>
          <?php echo JText::_('MOD_VIRTUEMART_CART_AJAX_CART_PLZ_JAVASCRIPT')?>
          </noscript>
</div>
<?php elseif($tmpl != 'json') : ?>
<div class="vmCartModule <?php echo $params->get('moduleclass_sfx'); ?>">
          <?php if ($show_product_list) : ?>
          <div id="hiddencontainer" style="display: none;">
                    <div class="container">
                              <?php if ($show_price) { ?>
                              <div class="prices" style="float: right;"></div>
                              <?php } ?>
                              <div class="product_row"> <span class="quantity"></span>&nbsp;x&nbsp;<span class="product_name"></span> </div>
                              <div class="product_attributes"></div>
                    </div>
          </div>
          <div class="vm_cart_products">
                    <div class="container">
                              <?php foreach ($data->products as $product) : ?>
                              <?php if ($show_price) : ?>
                              <div class="prices" style="float: right;"><?php echo  $product['prices'] ?></div>
                              <?php endif; ?>
                              <div class="product_row"> <span class="quantity"><?php echo  $product['quantity'] ?></span>&nbsp;x&nbsp;<span class="product_name"><?php echo  $product['product_name'] ?></span> </div>
                              <?php if ( !empty($product['product_attributes']) ) : ?>
                              <div class="product_attributes"><?php echo  $product['product_attributes'] ?></div>
                              <?php endif; ?>
                              <?php endforeach; ?>
                    </div>
          </div>
          <?php endif; ?>
          <?php if ($data->totalProduct) : ?>
          <div class="total" style="float: right;"> <?php echo $data->billTotal; ?> </div>
          <div class="total_products"><?php echo $data->totalProductTxt ?></div>
          <?php endif; ?>
          <div class="show_cart"> <?php echo $data->cart_show; ?> </div>
          <noscript>
          <?php echo JText::_('MOD_VIRTUEMART_CART_AJAX_CART_PLZ_JAVASCRIPT')?>
          </noscript>
</div>
<?php endif; ?>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться