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

kzboxer

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Привет всем.
Не знаю, нужно ли оно мне только, или кому то еще, но думаю многим это фича пригодится.

Суть идеи такова. Этот модуль выводит все категории JS с ссылкой на товары этой категории.
Но кто пользуется этим модулем, задумывался о том, чтобы в скобках было написано кол-во товаров.

Допустим, имеем категорию: Холодильники
Стандартный модуль так и будет выводить: Холодильники
Предлагаю сделать: Холодильники (количество) ; Холодильники (20)

дефолт модуля

Код
<?php
  foreach($categories_arr as $curr){
      $class = "jshop_menu_level_".$curr->level;
      if ($categories_id[$curr->level]==$curr->category_id) $class = $class."_a";     
      ?>
      <div class = "<?php print $class?>">
            <a href = "<?php print $curr->category_link?>"><?php print $curr->name?>
                <?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>
      </div>
  <?php
  }
?>

Что в эту строку нужно добавить, чтобы выводить кол-во товара в данной категории?

Код
<a href = "<?php print $curr->category_link?>"><?php print $curr->name?>

Я не знаю этой переменной.. Но, если мы зайдем сюды - administrator/index.php?option=com_jshopping&controller=categories&catid=0
увидим столбец товары, где указано количество товаров, и опубликованных, и не опубликованных... Это не то. Вот вся проблема.

Подключайтесь, кому не лень)
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Количество товара в Module Category 3.0.2
« Ответ #1 : 27.01.2013, 14:37:43 »
Всё просто. есть такая функция как getCountProducts()
Надо всего лишь вызвать её для каждой категории.
В шаблоне модуля после
Код
foreach($categories_arr as $curr){
Нужно добавить:
Код
    $category = JTable::getInstance('category', 'jshop');        
    $category->load($curr->category_id);
    $count = $category->getCountProducts(array());
Ну а $count выводить где хочется. Например:
Код
<?php print $curr->name." (".$count.")"?>
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

kzboxer

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Re: Количество товара в Module Category 3.0.2
« Ответ #2 : 28.01.2013, 23:12:16 »
Всё просто. есть такая функция как getCountProducts()
Надо всего лишь вызвать её для каждой категории.
В шаблоне модуля после
Код
foreach($categories_arr as $curr){
Нужно добавить:
Код
    $category = JTable::getInstance('category', 'jshop');        
    $category->load($curr->category_id);
    $count = $category->getCountProducts(array());
Ну а $count выводить где хочется. Например:
Код
<?php print $curr->name." (".$count.")"?>

Потестил - пустые скобки :(
*

litwit

  • Осваиваюсь на форуме
  • 16
  • 3 / 0
Re: Количество товара в Module Category 3.0.2
« Ответ #3 : 29.01.2013, 02:08:23 »
*

kzboxer

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Re: Количество товара в Module Category 3.0.2
« Ответ #4 : 29.01.2013, 22:06:10 »
http://joomlaforum.ru/index.php/topic,207098.0.html - рядом ведь тема
Показывает все товары, даже которых нет в наличии, и они скрыты.
Вот бедулька в чем.
Просто у меня на сайте единичный товар. Я включил в настройках товара опцию "Скрыть товары, которые не доступны на складе" и вот.. Товар скрыт - а в этом модуле он показывает все то же количество.
« Последнее редактирование: 29.01.2013, 22:40:27 от kzboxer »
*

Galiakberow

  • Захожу иногда
  • 130
  • 2 / 0
Re: Количество товара в Module Category 3.0.2
« Ответ #5 : 14.02.2013, 16:37:44 »
Здравствуйте.
Всё просто. есть такая функция как getCountProducts()
Надо всего лишь вызвать её для каждой категории.
В шаблоне модуля после
Код
foreach($categories_arr as $curr){
Нужно добавить:
Код
    $category = JTable::getInstance('category', 'jshop');        
    $category->load($curr->category_id);
    $count = $category->getCountProducts(array());
Ну а $count выводить где хочется. Например:
Код
<?php print $curr->name." (".$count.")"?>

Спасибо за метод - прекрасно работает.

Но теперь возник вопрос - Как сделать так что бы рядом с родительской категорией выводилась сумма товаров в под категориях?
Пока выводит только "0".
*

Vliv

  • Новичок
  • 5
  • 0 / 0
Re: Количество товара в Module Category 3.0.2
« Ответ #6 : 08.04.2013, 12:04:41 »
Присоединяюсь к вопросу. Сделал все как описано выше - в родительских и подкатегориях выводятся нули. Joomla 2.5.9, JS 3.14.0. Есть-ли решение?
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Количество товара в Module Category 3.0.2
« Ответ #7 : 08.04.2013, 12:36:41 »
Не понимаю смысла этого делать, но суть проста:
Получаем сначала все подкатегории
Код
$category->getTreeParentCategories()
После для каждой из них (функция foreach()) получаем список продуктов
Код
$category = JTable::getInstance('category', 'jshop');
$category->load($category_id);
$category->getProducts(array());
После из каждого товара вытаскиваем его стоимость
Код
$product = JTable::getInstance('product', 'jshop');
$product->load($product_id);
$product->getPrice();
Ну а дальше просто суммируем эти цифры.

Учитывайте, что такой способ будет костылём и по правильному надо бы создавать 1 SQL-запрос который вернет эту сумму, но это очень, очень неправильная задача, поэтому даю только направление куда копать.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вместо названия товара - код названия товара, span и т.п

Автор Besa

Ответов: 1
Просмотров: 2308
Последний ответ 10.03.2023, 12:57:59
от kit2m2
Кастомные поля у товара при заказе?

Автор psiworm

Ответов: 2
Просмотров: 2523
Последний ответ 15.02.2022, 01:18:30
от psiworm
Все товары этого продавца (вендора) в карточке товара?

Автор shop-user

Ответов: 5
Просмотров: 2867
Последний ответ 14.05.2021, 14:18:30
от nevigen
Проблема с подсчетом скидки товара

Автор sashahz

Ответов: 4
Просмотров: 896
Последний ответ 07.06.2020, 13:17:06
от sashahz
Module Category разные шаблоны

Автор Ragivort

Ответов: 5
Просмотров: 991
Последний ответ 17.01.2019, 11:40:03
от Ragivort