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

sanek2281

  • Захожу иногда
  • 85
  • 7 / 0
Всем привет!
Подскажите пжлс как вывести на странице категории список производителей, чьи товары есть в данной категории.
За ранее спасибо!
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Ну для начала нужно понять куда Вы хотите вывести !!
Если прямо туда где товары - то тогда нужно найти в шаблоне  макет - где выводятся товары !!
И перед перебором товаров нужно их крутануть к примеру forech  и получить информацию о производителях....
а потом подумать как вывести ! - но это уже не так сложно !
*

nevigen

  • Moderator
  • 10451
  • 863 / 25
  • http://n*****n.com
Всем привет!
Подскажите пжлс как вывести на странице категории список производителей, чьи товары есть в данной категории.
За ранее спасибо!
достаточно вывести фильтры в категории (настройки ЖШ)
http://prntscr.com/u7a8d3
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

sanek2281

  • Захожу иногда
  • 85
  • 7 / 0
Ну для начала нужно понять куда Вы хотите вывести !!
Если прямо туда где товары - то тогда нужно найти в шаблоне  макет - где выводятся товары !!
И перед перебором товаров нужно их крутануть к примеру forech  и получить информацию о производителях....
а потом подумать как вывести ! - но это уже не так сложно !

Ув. gartes, вы правильно поняли, того как и где нужно вывести http://prntscr.com/u7q0kv
В двух словах опишу скрин, есть категория Пряжа и в ней товары двух производителей. Вот этих двух производителей нужно вывести на странице категории(список товаров категории) над фильтрами, сортировкой, товарами.

Примерно так себе и представлял, что нужно, перебрать товары на производителей, только как правильно это сделать - знаний не хватает((

Буду очень благодарен за любую помощь!
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Цитировать
доброго времени
сори что поздно и в личку)
не поможете по этой задаче?
Ну - Ок ! Давайте постепенно решать ! (так как многое зависит от самого вашего шаблона ! )
Для Вас задача номер один !
1. создайте в том месте разметку - и просто руками (словами) напишите Manufacture 1 и Manufacture 2
Как вы это сделаете - пишите !!

не всегда могу смотреть почту - можете в скайп ссылки кидать на Ваши сообщения !
Skype : agroparknew (За вопросы по скайпу забаню !! :)  )

*

sanek2281

  • Захожу иногда
  • 85
  • 7 / 0
Ну - Ок ! Давайте постепенно решать ! (так как многое зависит от самого вашего шаблона ! )
Для Вас задача номер один !
1. создайте в том месте разметку - и просто руками (словами) напишите Manufacture 1 и Manufacture 2
Как вы это сделаете - пишите !!

не всегда могу смотреть почту - можете в скайп ссылки кидать на Ваши сообщения !
Skype : agroparknew (За вопросы по скайпу забаню !! :)  )



Спасибо, готово, отписался в лс
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Ок  - Вы молодец !! ))
относительный Путь какой к файлу где правили ?
*

sanek2281

  • Захожу иногда
  • 85
  • 7 / 0
Ок  - Вы молодец !! ))
относительный Путь какой к файлу где правили ?

/templates/mytemplate/html/com_jshopping/category/category_default.php
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Не мое дело конечно - но так на заметку
немного некорректно работает поиск !
в URL результатов поиска отсутствует само поисковое слово !
*

sanek2281

  • Захожу иногда
  • 85
  • 7 / 0
Не мое дело конечно - но так на заметку
немного некорректно работает поиск !
в URL результатов поиска отсутствует само поисковое слово !

Спасибо, потом будем смотреть)
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Код
$manufacturer = \JTable::getInstance('manufacturer', 'jshop');
foreach ( $this->rows as $i => $row )
{
    $manufacturer->load( $row->manufacturer->id  );
    $href = SEFLink('index.php?option=com_jshopping&controller=manufacturer&task=view&manufacturer_id=' . $row->manufacturer->id);

    # Наверное так путь к картинке но тут я не уверен !
    //    $manufacturer->manufacturer_logo

    ?>
    <h3>
        <a href="<?= $href ?>">
            <?= $manufacturer->getName()?>
        </a>
    </h3>
    <?php
}#END FOREACH
*

sanek2281

  • Захожу иногда
  • 85
  • 7 / 0
Код
$manufacturer = \JTable::getInstance('manufacturer', 'jshop');
foreach ( $this->rows as $i => $row )
{
    $manufacturer->load( $row->manufacturer->id  );
    $href = SEFLink('index.php?option=com_jshopping&controller=manufacturer&task=view&manufacturer_id=' . $row->manufacturer->id);

    # Наверное так путь к картинке но тут я не уверен !
    //    $manufacturer->manufacturer_logo

    ?>
    <h3>
        <a href="<?= $href ?>">
            <?= $manufacturer->getName()?>
        </a>
    </h3>
    <?php
}#END FOREACH

Спасибо большое, в целом получилось!
Только теперь дублируются производители, думаю всех товаров на странице. http://prntscr.com/u8jr42
Так как на каждой страницы пагинации разное количество http://prntscr.com/u8jrpl

*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Только теперь дублируются производители,
Код

$manufacturer = \JTable::getInstance('manufacturer', 'jshop');
$manufacturerHistoty = [] ;
foreach ( $this->rows as $i => $row )
{
    if ( in_array( $row->manufacturer->id , $manufacturerHistoty )) continue ; #END IF
    $manufacturerHistoty[] = $row->manufacturer->id
    $manufacturer->load( $row->manufacturer->id  );
    $href = SEFLink('index.php?option=com_jshopping&controller=manufacturer&task=view&manufacturer_id=' . $row->manufacturer->id);

    # Наверное так путь к картинке но тут я не уверен !
    //    $manufacturer->manufacturer_logo

    ?>
    <h3>
        <a href="<?= $href ?>">
            <?= $manufacturer->getName()?>
        </a>
    </h3>
    <?php
}#END FOREACH
*

sanek2281

  • Захожу иногда
  • 85
  • 7 / 0
Код

$manufacturer = \JTable::getInstance('manufacturer', 'jshop');
$manufacturerHistoty = [] ;
foreach ( $this->rows as $i => $row )
{
    if ( in_array( $row->manufacturer->id , $manufacturerHistoty )) continue ; #END IF
    $manufacturerHistoty[] = $row->manufacturer->id
    $manufacturer->load( $row->manufacturer->id  );
    $href = SEFLink('index.php?option=com_jshopping&controller=manufacturer&task=view&manufacturer_id=' . $row->manufacturer->id);

    # Наверное так путь к картинке но тут я не уверен !
    //    $manufacturer->manufacturer_logo

    ?>
    <h3>
        <a href="<?= $href ?>">
            <?= $manufacturer->getName()?>
        </a>
    </h3>
    <?php
}#END FOREACH

Почти супер)
Только если на странице товары одного производителя, то не выводятся остальные производители.
Первая страница пагинации http://prntscr.com/u8jxo1
Вторая страница пагинации http://prntscr.com/u8jxw9
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Почти супер)
А так ? )
Код

    $app = \Joomla\CMS\Factory::getApplication();
    $db = \Joomla\CMS\Factory::getDbo();
    $lang =   JSFactory::getLang();
    $category_id = $app->input->get('category_id' , false , 'INT') ;

    $Query = $db->getQuery(true);
    $select = [
//        $db->quoteName( 'm.'.$lang->get('name'))
        $db->quoteName( 'cat_map.product_id'),
        $db->quoteName( 'p.product_manufacturer_id'),
        $db->quoteName( 'm.manufacturer_id'),
        $db->quoteName( 'm.manufacturer_logo'),
        'm.' . $db->quoteName( $lang->get('name') ),

    ] ;
    $Query->select($select);
    $Query->from($db->quoteName( '#__jshopping_products_to_categories' , 'cat_map' ));
    $Query->leftJoin( $db->quoteName( '#__jshopping_products' , 'p' ). ' ON ' . $db->quoteName( 'cat_map.product_id').'='. $db->quoteName( 'p.product_id') );
    $Query->leftJoin( $db->quoteName( '#__jshopping_manufacturers' , 'm' ). ' ON ' . $db->quoteName( 'p.product_manufacturer_id').'='. $db->quoteName( 'm.manufacturer_id') );
    $whereArr = [
        $db->quoteName('category_id'). '='. $category_id ,
    ];
    $Query->where($whereArr);
    $Query->group( $db->quoteName( 'm.manufacturer_id') ) ;
    $db->setQuery($Query);
    $res = $db->loadObjectList();

    foreach ( $res as $i => $row )
    {

        $href = SEFLink('index.php?option=com_jshopping&controller=manufacturer&task=view&manufacturer_id=' . $row->product_manufacturer_id  );

        # Наверное так путь к картинке но тут я не уверен !
        //    $manufacturer->manufacturer_logo

        ?>
        <h3>
            <a href="<?= $href ?>">
                <?= $row->{ $lang->get('name') } ?>
            </a>
        </h3>
        <?php
    }#END FOREACH
*

sanek2281

  • Захожу иногда
  • 85
  • 7 / 0
А так ? )
Код

    $app = \Joomla\CMS\Factory::getApplication();
    $db = \Joomla\CMS\Factory::getDbo();
    $lang =   JSFactory::getLang();
    $category_id = $app->input->get('category_id' , false , 'INT') ;

    $Query = $db->getQuery(true);
    $select = [
//        $db->quoteName( 'm.'.$lang->get('name'))
        $db->quoteName( 'cat_map.product_id'),
        $db->quoteName( 'p.product_manufacturer_id'),
        $db->quoteName( 'm.manufacturer_id'),
        $db->quoteName( 'm.manufacturer_logo'),
        'm.' . $db->quoteName( $lang->get('name') ),

    ] ;
    $Query->select($select);
    $Query->from($db->quoteName( '#__jshopping_products_to_categories' , 'cat_map' ));
    $Query->leftJoin( $db->quoteName( '#__jshopping_products' , 'p' ). ' ON ' . $db->quoteName( 'cat_map.product_id').'='. $db->quoteName( 'p.product_id') );
    $Query->leftJoin( $db->quoteName( '#__jshopping_manufacturers' , 'm' ). ' ON ' . $db->quoteName( 'p.product_manufacturer_id').'='. $db->quoteName( 'm.manufacturer_id') );
    $whereArr = [
        $db->quoteName('category_id'). '='. $category_id ,
    ];
    $Query->where($whereArr);
    $Query->group( $db->quoteName( 'm.manufacturer_id') ) ;
    $db->setQuery($Query);
    $res = $db->loadObjectList();

    foreach ( $res as $i => $row )
    {

        $href = SEFLink('index.php?option=com_jshopping&controller=manufacturer&task=view&manufacturer_id=' . $row->product_manufacturer_id  );

        # Наверное так путь к картинке но тут я не уверен !
        //    $manufacturer->manufacturer_logo

        ?>
        <h3>
            <a href="<?= $href ?>">
                <?= $row->{ $lang->get('name') } ?>
            </a>
        </h3>
        <?php
    }#END FOREACH

Теперь все хорошо, только лого производителя пропало http://prntscr.com/u8kj56
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
В обще в цикле там такой объект
Код
[0] => stdClass Object
        (
            [product_id] => 33463
            [product_manufacturer_id] =>
            [manufacturer_id] =>
            [manufacturer_logo] =>
            [name_ru-RU] =>
        )
*

sanek2281

  • Захожу иногда
  • 85
  • 7 / 0
$row->manufacturer_logo

Теперь все супер http://prntscr.com/u8knri
Огромнейшее спасибо!
Плюсую в карму!
*

sanek2281

  • Захожу иногда
  • 85
  • 7 / 0
Возможно кому-то пригодится, готовое решение!
Спасибо gartes

В файл /templates/mytemplate/html/com_jshopping/category/category_default.php в нужном месте вставляем код ниже(разметку\стили делаем свои):
Код

<div class="cat-manufacture">
<?php
    $app = \Joomla\CMS\Factory::getApplication();
    $db = \Joomla\CMS\Factory::getDbo();
    $lang =   JSFactory::getLang();
    $category_id = $app->input->get('category_id' , false , 'INT') ;

    $Query = $db->getQuery(true);
    $select = [
        $db->quoteName( 'cat_map.product_id'),
        $db->quoteName( 'p.product_manufacturer_id'),
        $db->quoteName( 'm.manufacturer_id'),
        $db->quoteName( 'm.manufacturer_logo'),
        'm.' . $db->quoteName( $lang->get('name') ),
    ] ;
    $Query->select($select);
    $Query->from($db->quoteName( '#__jshopping_products_to_categories' , 'cat_map' ));
    $Query->leftJoin( $db->quoteName( '#__jshopping_products' , 'p' ). ' ON ' . $db->quoteName( 'cat_map.product_id').'='. $db->quoteName( 'p.product_id') );
    $Query->leftJoin( $db->quoteName( '#__jshopping_manufacturers' , 'm' ). ' ON ' . $db->quoteName( 'p.product_manufacturer_id').'='. $db->quoteName( 'm.manufacturer_id') );
    $whereArr = [
        $db->quoteName('category_id'). '='. $category_id ,
    ];
    $Query->where($whereArr);
    $Query->group( $db->quoteName( 'm.manufacturer_id') ) ;
    $db->setQuery($Query);
    $res = $db->loadObjectList();

    foreach ( $res as $i => $row ) {
    $href = SEFLink('index.php?option=com_jshopping&controller=manufacturer&task=view&manufacturer_id=' . $row->product_manufacturer_id  ); ?>
<div class="cat-manufacture-item">
<a href="<?= $href ?>">
<img src="/components/com_jshopping/files/img_manufs/<?= $row->manufacturer_logo?>" alt="<?= $row->{ $lang->get('name') } ?> фото">
</a>
<p><?= $row->{ $lang->get('name') } ?></p>
</div>
    <?php } ?>

</div>
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Цитировать
закомандовал сделать такое же на странице производителя, не подскажете как поправить этот код!?
))) Всем хорошего Дня !!
А в чем трабла ?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор sergeytolkachyov

Ответов: 25
Просмотров: 35708
Последний ответ 23.09.2025, 11:22:23
от Alex_gs
JoomShopping, вывод всех категории к которым принадлежит товар

Автор Valent777

Ответов: 12
Просмотров: 2468
Последний ответ 01.11.2024, 14:57:28
от kit2m2
Дополнительные поля для категории JoomShopping

Автор goga_pgasovav

Ответов: 3
Просмотров: 1802
Последний ответ 07.07.2024, 08:43:15
от nevigen
Вывести название категории в списке товаров

Автор ataman

Ответов: 9
Просмотров: 4603
Последний ответ 15.09.2023, 20:31:11
от Alex_gs
Отображения описании категории только на первой странице

Автор graf

Ответов: 5
Просмотров: 1565
Последний ответ 04.05.2023, 18:52:08
от kit2m2