Новости Joomla

Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list

👩‍💻 Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list.При работе над плагином возникла необходимость указать стандартный набор из нескольких элементов стандартного поля списка. И хотелось указать их в стандартном же атрибуте default для полей. Когда это нужно?Когда Ваши пользователи устанавливают плагин и НЕ заходят в настройки - в коде вы можете использовать значения по умолчанию с помощью класса Registry (писал об этом ранее) и всегда быть уверенным, что хоть какие-то жизненно необходимые параметры к вам придут всегда. 🧐 Но как сделать то же самое для интерфейса админки?Пользователя нужно направлять, предлагать очевидный работоспособный сценарий для начала, а дальше он уже сам разберется. Когда человек заходит в параметры свежеустановленного плагина в Form ещё нет данных и параметры по умолчанию выставляются из атрибутов default в xml-полях.
<field name="showdesc" type="radio"                       label="PLG_CFI_PARAM_SHOWDESC"                       class="btn-group btn-group-yesno"                       default="1">                    <option value="0">JNO</option>                    <option value="1">JYES</option>                </field>
Здесь по умолчанию будет включено "Да". И если пользователь не переключит параметр, то при сохранении мы ожидаемо получим "да" в params плагина.Для поля списков type=&quot;list&quot; можно указать значение по умолчанию и многие знают, что его можно указать только одно.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default="id"                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
Но у нас поле с множественным выбором (атрибут multiple) и хотелось бы указать несколько значений по умолчанию...Оказывается, так можно сделать. Для этого в атрибуте default нужно указать json с нужными параметрами в виде {int}key : {string} value.Например, default='{"0":"id","1":"title"}'.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default='{"0":"id","1":"title"}'                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
⚠️ Обратите внимание на кавычки! Поскольку json_decode не понимает одинарные кавычки собственно json нужно писать с двойными, а значение для атрибута default писать в одинарные.🙏 За подсказанное решение огромное спасибо участникам нашего сообщества - разработчикам Дмитрию Васюкову (@fictionlabs) и Игорю Бердичевскому (@septdir).@joomlafeed#joomla #разработка #webdev #development

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

dmayak

  • Захожу иногда
  • 80
  • 5 / 0
Конкретно интересуют настройки количества товаров в ряду и на странице для  бестселлеров, случайных продуктов, последних продуктов и т.п. Видно, что это храниться в базе в _jshopping_config, но в /administrator/components/com_jshopping/controllers/config.php я вижу только сохранение количества для всех категорий:
Код
if ($tab==6 && $post['update_count_prod_rows_all_cats']){
            $count_products_to_page = intval($post['count_products_to_page']);
            $count_products_to_row = intval($post['count_products_to_row']);
            $query = "update `#__jshopping_categories` set `products_page`='".$count_products_to_page."', `products_row`='".$count_products_to_row."'";
            $db->setQuery($query);
            $db->query();
            $query = "update `#__jshopping_manufacturers` set `products_page`='".$count_products_to_page."', `products_row`='".$count_products_to_row."'";
            $db->setQuery($query);
            $db->query();
        }

и сохранение остальных параметров:
Код
$array = array('show_buy_in_category','show_tax_in_product','show_tax_product_in_cart','show_plus_shipping_in_product','hide_product_not_avaible_stock','hide_buy_not_avaible_stock','show_sort_product','show_count_select_products','show_delivery_time','demo_type','product_show_manufacturer_logo','product_show_weight',
                       'product_attribut_first_value_empty', 'show_hits', 'allow_reviews_prod', 'allow_reviews_only_registered','hide_text_product_not_available','use_plugin_content', 'product_list_show_weight', 'product_list_show_manufacturer','show_product_code','product_list_show_min_price', 'show_product_list_filters',
                       'product_list_show_vendor','product_show_vendor','product_show_vendor_detail','product_show_button_back','product_list_show_product_code','radio_attr_value_vertical','attr_display_addprice','product_list_show_price_description','display_button_print','product_list_show_price_default');
        if ($tab == 6){
            foreach ($array as $key => $value) {
                if (!isset($post[$value])) $post[$value] = 0;
            }
            $result = array();
            if ($jshopConfig->other_config!=''){
                $result = unserialize($jshopConfig->other_config);
            }
            include($jshopConfig->path.'lib/default_config.php');
            foreach($catprod_other_config as $k){
                $result[$k] = $post[$k];
            }
            $post['other_config'] = serialize($result);
        }
Мне это нужно для того чтобы я добавил к ним дополнительное поле для общего количества товаров - добавил для бестселлеров и последних товаров пагинацию, но общее количество пока захардкожено, нужно сделать редактирование его из админки. Можно конечно просто создать дополнительную колонку в таблице и там же его отдельно выдергивать и писать в базу, но хотелось бы это делать вместе с остальными параметрами чтобы все вместе было.
*

dmayak

  • Захожу иногда
  • 80
  • 5 / 0
Разобрался, правда перед этим уже просто добавил отдельные поля в базу. Как работает:
Код
include($jshopConfig->path.'lib/default_config.php');
добавляет указанный файл с дефолтными настройками, там есть массив:
Код
$catprod_other_config = array('count_products_to_page_tophits','count_products_to_page_toprating','count_products_to_page_label','count_products_to_page_bestseller','count_products_to_page_random','count_products_to_page_last','count_products_to_row_tophits','count_products_to_row_toprating','count_products_to_row_label','count_products_to_row_bestseller','count_products_to_row_random','count_products_to_row_last','display_short_descr_multiline');
Ну а дальше обратно в контроллере формируется список содержимого из поста по ключам из данного массива
Код
foreach($catprod_other_config as $k){
                $result[$k] = $post[$k];
            }
и все это подготавливается для записи в базу
Код
$post['other_config'] = serialize($result);
*

alex-ustas

  • Захожу иногда
  • 126
  • 3 / 1
 ;) в блокнот самое главное запиши! и скрин сделай! А то вдруг придёт время обновлений ...  и всё станет колом, сиди и вспоминай, что где и как правил
_____________________________________________________________________________________________________________________________________________
сам прокололся на +SMS  ^-^
*

dmayak

  • Захожу иногда
  • 80
  • 5 / 0
Как правило, компоненты никто не обновляет, поскольку взламывают в основном тех кто сидит на старых Joomlaх а не на старых компонентах (ну а до того как взломают никто и не думает об этом), а в таком случае все равно многое нужно делать по новой.
Я в данном случае не правил в админке контроллер) Я разобрался как это работает уже позже, а для того чтобы в конфиге работало любое поле, достаточно только:
1. создать в темплейте внутри формы новое поле с определенным именем
2. создать в бд поле с таким же именем
и все,  поскольку все идет через один пост-запрос, из которого конфигурация пишется в базу. Потом можно её подтягивать в контроллерах компонента.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

WT JoomShopping Favorite - кнопки избранного в категории товаров и карточке тов

Автор sergeytolkachyov

Ответов: 25
Просмотров: 35700
Последний ответ 23.09.2025, 11:22:23
от Alex_gs
Модуль карусели товаров JoomShopping на Swiper.js для Joomla

Автор sergeytolkachyov

Ответов: 2
Просмотров: 2041
Последний ответ 04.07.2025, 10:30:36
от sergeytolkachyov
[Решено] Сбросить счётчик ID товаров JoomShopping

Автор goga_pgasovav

Ответов: 3
Просмотров: 1353
Последний ответ 13.02.2025, 00:11:20
от goga_pgasovav
Плагин обновления цен и остатков товаров JoomShopping из CSV

Автор sergeytolkachyov

Ответов: 0
Просмотров: 1530
Последний ответ 24.12.2024, 14:50:42
от sergeytolkachyov
Сортировка товаров в админке

Автор Emotion

Ответов: 26
Просмотров: 6709
Последний ответ 15.08.2024, 08:00:20
от kit2m2