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

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Уважаемые Знатоки J!
Бьюсь два дня.
При любых манипуляциях с кодом Ругается на:  Invalid argument supplied for foreach()
 !

Как я понял нужно править кусок кода модели:

Код
	public function getItem() 
{
if (!isset($this->item))
{
$id = $this->getState('message.id');
$this->_db->setQuery($this->_db->getQuery(true)
->from('#__helloworld as h')
->leftJoin('#__categories as c ON h.catid=c.id')
->select('h.greeting, h.params, c.title as category')
->where('h.id=' . (int)$id));
if (!$this->item = $this->_db->loadObject())
{
$this->setError($this->_db->getError());
}
else
{
// Load the JSON string
$params = new JRegistry;
$params->loadJSON($this->item->params);
$this->item->params = $params;
 
// Merge global params with item params
$params = clone $this->getState('params');
$params->merge($this->item->params);
$this->item->params = $params;
}
}
return $this->item;
}

и шаблон:
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
?>
<h1><?php echo $this->item->greeting.(($this->item->category and $this->item->params->get('show_category'))? (' ('.$this->item->category.')') : ''); ?></h1>

Помогите разобраться!
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #1 : 03.12.2013, 17:58:45 »
А что вы пытаетесь в цикле перебрать если получаете одиночный объект! У вас же возврат не массива!
и где у вас ругается? на какой строке? где полный код, и копипаст ошибки?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #2 : 03.12.2013, 18:25:47 »
Нужно как минимум создать представление, которе будет выводить список записей.
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #3 : 03.12.2013, 18:52:17 »
функцию getItem сократил до минимума:

   public function getItem()
   {
         $this->_db->setQuery
         ($this->_db->getQuery(true)
            ->from('#__helloworld')
            ->select('*'));
         $this->item = $this->_db->loadObject();
      return $this->item;
   }


шаблон:

<?php foreach($items as $item) : ?>
<div class="comm_box_top">
<span class="comm_greeting"> <?php echo $item->greeting; ?> </span>
<span class="comm_id"> <?php echo $item->id; ?> </span>
</div>
<?php endforeach;  ?>

как внедрить loadObjectList не знаю.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #4 : 03.12.2013, 19:00:29 »
У вам метод getItem вы пытаетесь перебрать items..
в нем вы получаете одиночный объект, а вам нужно массив объектов...
покажите ваш вид!, как вы получаете $this->items...
что бы получить массив объектов нужно юзать не $this->_db->loadObject(),  а $this->_db->loadObjectList()!
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #5 : 03.12.2013, 19:00:46 »
так?

   public function getItem()
   {
      $db = JFactory::getDbo();      
      $query = $db->getQuery(TRUE);
      $query->select("*");
      $query->from("#__helloworld");
      $db->setQuery($query);
      $items = $db->loadObjectList();
      return $items;
}
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #6 : 03.12.2013, 19:01:30 »
так
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #7 : 03.12.2013, 19:04:17 »
Получаем:
Warning: Invalid argument supplied for foreach() in Z:\home\joomla.loc\www\components\com_helloworld\views\helloworld\tmpl\default.php on line 8

<?php foreach($items as $item) : ?>    ---------- line 8
<div class="comm_box_top">
<span class="comm_greeting"> <?php echo $item->greeting; ?> </span>
<span class="comm_id"> <?php echo $item->id; ?> </span>
</div>
<?php endforeach;  ?>
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #8 : 03.12.2013, 19:19:07 »
Нужно и views\helloworld\view.html.php править?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #9 : 03.12.2013, 19:22:02 »
ну для начала покажите что у вас в view.html.php
но 99% там $this->item = $this->get('Item');
а потом вы пробуете перебрать $tems откуда у вас эта переменная вообще взялась? в шаблоне?
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #10 : 03.12.2013, 19:24:34 »
Там всё как было

class RewComViewRewCom extends JView
{
   // Overwriting JView display method
   function display($tpl = null)
   {
      // Assign data to the view
      $this->item = $this->get('Item');
 
      // Check for errors.
      if (count($errors = $this->get('Errors')))
      {
         JError::raiseError(500, implode('<br />', $errors));
         return false;
      }
      // Display the view
      parent::display($tpl);
   }
}
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #11 : 03.12.2013, 19:27:06 »
Ну все правильно!
вы получаете то что в модели в методе getItem() вот тут: $this->item = $this->get('Item');
а потом вы пробуете перебрать какой то $items, откуда он у вас взялся?
<?php foreach($this->item as $item) : ?>
...
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #12 : 03.12.2013, 19:34:00 »
Всё запутался Я

Я не писал компоненты, только пара модулей и плагин!
Поэтому и не пойму, что куда.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #13 : 03.12.2013, 19:41:44 »
Всё запутался Я

Я не писал компоненты, только пара модулей и плагин!
Поэтому и не пойму, что куда.

Ваш вид view.html.php в строке:   $this->item = $this->get('Item'); обращается к модели и получает из метода (который я вам немного оптимизировал):
Код: php
public function getItem() {
      $db = JFactory::getDbo();      
      $query = $db->getQuery(true)->select('*')->from('#__helloworld');
      return  $db->setQuery($query)->loadObjectList();
}
Результат запроса в виде массива объектов! тоесть по сути $this->get('Item') обращается к getItem() тот что в модели!
После этого результат, который вернет  метод  getItem() из модели, помещается в переменную $this->item!
В шаблоне вида view/ващ_вид/default.php эта переменная будет доступна по $this->item!
Вам нужно в цикле использовать $this->item для перебора!
Код: php
<?php foreach($this->item as $item) : ?>    ---------- line 8
<div class="comm_box_top">
<span class="comm_greeting"> <?php echo $item->greeting; ?> </span>
<span class="comm_id"> <?php echo $item->id; ?> </span>
</div>
<?php endforeach;  ?>
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #14 : 03.12.2013, 19:43:56 »
ПОЛУЧИЛОСЬ! Istaan, b2z СПАСИБО! *DRINK*

Значит в модели:
public function getItem()
   {
      $db = JFactory::getDbo();     
      $query = $db->getQuery(TRUE);
      $query->select("*");
      $query->from("#__helloworld");
      $db->setQuery($query);
      $items = $db->loadObjectList();
      return $items;
}

В представлении:
$this->items = $this->get('Item');

В шаблоне:
<?php foreach($this->items as $item) : ?>
<div class="comm_box_top">
<span class="comm_greeting"> <?php echo $item->greeting; ?> </span>
<span class="comm_id"> <?php echo $item->id; ?> </span>
</div>
<?php endforeach;  ?>
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #15 : 03.12.2013, 19:45:27 »
Да все правильно, только для красоты переименуйте метод в модели с public function getItem(), в public function getItems()
и напишите $this->items = $this->get('Items'); в виде, вместо $this->items = $this->get('Item');
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #16 : 03.12.2013, 19:49:16 »
Ок! Istaan отдельное спасибо за разъяснение!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Передача переменной в таблицу #_user_usergroup_map

Автор banditman

Ответов: 8
Просмотров: 2083
Последний ответ 27.03.2015, 11:11:38
от banditman
[Решено] Как вывести строки из бд - удовлетворяющие требование SQL запроса!

Автор artemka

Ответов: 11
Просмотров: 2142
Последний ответ 21.07.2014, 20:58:07
от artemka
Как вывести ссылку на выведенную статью?

Автор artemka

Ответов: 3
Просмотров: 1708
Последний ответ 15.06.2014, 11:03:59
от artemka
Как вывести определённые материалы в статье?

Автор artemka

Ответов: 0
Просмотров: 1148
Последний ответ 13.06.2014, 12:19:32
от artemka
Строк нет - и таблицу долой! Как заскриптовать?

Автор verstalshik

Ответов: 24
Просмотров: 1608
Последний ответ 22.04.2014, 21:24:58
от verstalshik