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

ivan.sergeev

  • Захожу иногда
  • 73
  • 1 / 0
Добрый вечер!
Возможно ли как нибудь реализовать список производителей, а рядом с каждым производителем количество его товаров?. Допустим - apple (5) Samsung (10) и т.п.
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Количество продуктов для производителя №1
Код
$manufacturer = JSFactory::getTable('manufacturer', 'jshop');
$manufacturer->load(1);
$filters = array();
$total = $manufacturer->getCountProducts($filters);
echo $manufacturer->name.' ('.$total.')';
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ivan.sergeev

  • Захожу иногда
  • 73
  • 1 / 0
Спасибо, будем пробовать!
*

ivan.sergeev

  • Захожу иногда
  • 73
  • 1 / 0
Отлично, работает!)
Только вопрос - в модуле для джшоппинга производители стоит стандартный универсальный default template для каждого производителя, как этот код переделать, чтобы он был актуален для каждого производителя, независимо от его порядкового номера?
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Рассматривался стандартный модуль для версии 4.0.1:

Если не хотите Сами думать и читать готовый код, который Вам дают, то держите следующую порцию кода, и осознавайте, что кодить Вам пока рано.
Внутри цикла в файле модуля (см. путь к файлу)
Код
foreach ($list as $key => $value){
Нужно добавить:
Код
$manufacturer = JSFactory::getTable('manufacturer', 'jshop');
$manufacturer->load($list[$key]->manufacturer_id);
$list[$key]->count_products = $manufacturer->getCountProducts(array());
Ну а в шаблоне (см. путь к файлу) соответственно вывести это количество где нужно. Оно доступно в переменной <?php print $curr->count_products; ?>
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ivan.sergeev

  • Захожу иногда
  • 73
  • 1 / 0
спасибо огромное!) я не программист, сам бы не разобрался
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
В дополнение к теме.
Тоже задумал такое прикрутить на днях
С модулем получилось, а в шаблоне производителей прописал так
Код
<?php 
$manufacturer = JSFactory::getTable('manufacturer', 'jshop');
$manufacturer->load($row->manufacturer_id);
$filters = array();
$total = $manufacturer->getCountProducts($filters);
print $manufacturer->name.' ('.$total.')';
 ?>
если что не так поправьте пожалуйста.
« Последнее редактирование: 22.08.2015, 14:36:02 от Biss »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
если уж делать запрос на каждого производителя, то хотя бы сэкономить на load.
Код
$this->manufacturer->manufacturer_id = $row->manufacturer_id;
$total = $this->manufacturer->getCountProducts(array());
print $row->name.' ('.$total.')';

а вообще лучше конечно все вытащить 1 запросом.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
только $row->name. наверно лишнее если в шаблоне делать в моем случае.
а для модуля тоже можно упростить код ? или оставить как есть...
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
лучше конечно все вытащить 1 запросом.
:)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Знать бы ещё как написать...
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Код
$db = JFactory::getDBO();
$db->setQuery('SELECT product_manufacturer_id, count(product_id) AS count FROM `#__jshopping_products` WHERE product_publish=1 GROUP BY product_manufacturer_id');
$man = $db->loadObjectList('product_manufacturer_id');
// количество для ID производителя - $man[ID производителя]->count
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
вывожу в модуле так работает
<?php print $man[2]->count; ?>
а как сделать чтоб автоматически подставлялось ид
пробовал
<?php print $man[$manufacturer_id]->count; ?>
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
ну видимо $man[$row->manufacturer_id]->count , или как там в модуле manufacturer_id получить
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
curr  ^-^  . победа!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

WT On fly image handler изображения товара JoomShopping в webp на лету

Автор sergeytolkachyov

Ответов: 13
Просмотров: 4377
Последний ответ 29.01.2025, 20:38:38
от sergeytolkachyov
Видео с Youtube вместо картинки на карточке товара

Автор ksena

Ответов: 35
Просмотров: 10214
Последний ответ 08.10.2024, 04:26:36
от kit2m2
Условие для кол-ва товара больше нуля

Автор kik84

Ответов: 3
Просмотров: 1336
Последний ответ 16.02.2024, 13:33:24
от kit2m2
Убрать модуль в карточке товара JoomShopping

Автор alexkraym

Ответов: 35
Просмотров: 5778
Последний ответ 21.08.2023, 07:17:53
от delchev
Проблема с фото в карточке товара

Автор astapon

Ответов: 18
Просмотров: 2176
Последний ответ 24.04.2023, 12:37:50
от kit2m2