Релиз NorrCompetition 3.0 — крупное обновление расширения для проведения конкурсов и голосований в Joomla.
Проект Joomla! рад сообщить о выходе Joomla 6.1.1 и Joomla 5.4.6. Это релизы безопасности и исправления ошибок для серий 5.x и 6.x.
В открытый доступ выложен видео-курс Дмитрия Гончарова по созданию интернет-магазина на связке Joomla + JoomShopping. Видеоуроки содержат пошаговые инструкции от регистрации хостинга до особенностей вёрстки, настройки способов оплаты и доставки.
В видео фигурирует JoomShopping 4 и Joomla 3, однако JoomShopping довольно консервативный компонент и многие способы и подходы в нём не менялись годами, поэтому данные видео могут быть по прежнему полезны.
Смотреть видео-курс
@joomlafeed
<field name="vid_uslug" type="catuslugi" label="COM_APARTMENT_FIELD_VID_USLUG_LABEL" multiple="true" required="true"> </field>
// Запрет прямого доступа.defined('_JEXEC') or die; // Подключаем тип поля list.jimport('joomla.form.helper');JFormHelper::loadFieldClass('list');/** * Класс поля формы HelloWorld компонента HelloWorld. */class JFormFieldCatuslugi extends JFormFieldList{ /** * Метод для получения списка опций для поля списка. * * @return array Массив JHtml опций. */ protected function getOptions() { // Получаем объект базы данных. $db = JFactory::getDbo(); // Конструируем SQL запрос. $query = $db->getQuery(true); $query->select('*') ->from('#__apartment_shopscat'); $db->setQuery($query); $cats = $db->loadObjectList(); // Массив JHtml опций. $options = array(); if ($cats) { foreach($cats as $cat) { $options[] = JHtml::_('select.option', $cat->id, $cat->title); } } $options = array_merge(parent::getOptions(), $options); //Добавляет один или несколько элементов в начало массива array_unshift($options, JHtml::_('select.option', '','')); return $options; }}
protected function loadFormData() { // Проверка сессии на наличие ранее введеных в форму данных. $data = JFactory::getApplication()->getUserState('com_apartment.edit.apartment.data', array()); $_SESSION['etag']=$data['etag']; if (empty($data)) { $data = $this->getItem(); } if($data->opcii) { $registry = new JRegistry; $registry->loadString($data->opcii); $data->opcii = $registry->toArray(); } if($data->infstrukt) { $registry = new JRegistry; $registry->loadString($data->infstrukt); $data->infstrukt = $registry->toArray(); } if($data->vid_uslug) { $registry = new JRegistry; $registry->loadString($data->vid_uslug); $data->vid_uslug = $registry->toArray(); } return $data; } public function save($data) { if (isset($data['opcii']) && is_array($data['opcii'])) { $registry = new JRegistry; $registry->loadArray($data['opcii']); $data['opcii'] = (string) $registry; } if (isset($data['infstrukt']) && is_array($data['infstrukt'])) { $registry = new JRegistry; $registry->loadArray($data['infstrukt']); $data['infstrukt'] = (string) $registry; } if (isset($data['vid_uslug']) && is_array($data['vid_uslug'])) { $registry = new JRegistry; $registry->loadArray($data['vid_uslug']); $data['vid_uslug'] = (string) $registry; } if (parent::save($data)) { return true; } return false; }