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

Sam-vdv

  • Захожу иногда
  • 145
  • 13 / 0
  • знание - сила
Здравствуйте все любители Joom Shoping'a
очень хочется прикрутить к модулю jshopping_categories древовидное меню на JQuery или на чем нибудь подобном, можно например вот этим плагином http://docs.jquery.com/Plugins/Treeview/treeview#options
так бы было прекрасно щелкаешь открылось,щелкаешь закрылось красота!
Понимаю что нужно подшаманить над modules\mod_jshopping_categories\tmpl\default.php но самая главная проблема как связать все это

Если бы кто нибудь взялся за это дело, я был бы очень признателен этому отзывчивому человеку
(Возможно за денежку)
Если у Вас есть какие то вопросы обращайтесь - чем смогу помогу!
*

Sam-vdv

  • Захожу иногда
  • 145
  • 13 / 0
  • знание - сила
люди добрые помогите с php. В нем я не шарю. Есть содержимое
Код
<?php foreach($categories_arr as $curr){
      $class = "jshop_menu_level_".$curr->level;
      if ($categories_id[$curr->level]==$curr->category_id) $class = $class."_a";      
      ?>
 
<li 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>
</li>

  <?php
  }
?>
Этот массив генерирует вывод категорий по дефолту вместо спика li там стоял div. Мне нужно чтобы формирование категорий происходило как в списке
<ul id="red" class="treeview-red">
    <li>категория1</li>
    <li>категория2</li>
</ul>
когда я пишу в цикл
Код
<?php foreach($categories_arr as $curr){
      $class = "jshop_menu_level_".$curr->level;
      if ($categories_id[$curr->level]==$curr->category_id) $class = $class."_a";      
      ?>
 <ul id="red" class="treeview-red">
<li 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>
</li>
</ul>

  <?php
  }
?>
выводит так
<ul id="red" class="treeview-red">
    <li>категория1</li>
</ul>
<ul id="red" class="treeview-red">
    <li>категория2</li>
</ul>
как правильно прописать это в цикле? знающие люди помогите пожалуйста.Заранее спасибо
Если у Вас есть какие то вопросы обращайтесь - чем смогу помогу!
*

Sam-vdv

  • Захожу иногда
  • 145
  • 13 / 0
  • знание - сила
вот помог разобраться victorantoniak
Код
<ul>
<?php
$prev_level = 0;
$openul = 0;
foreach($categories_arr as $curr){
    $class = "";
    if ($categories_id[$curr->level]==$curr->category_id) $class = "active";     
    ?>
    <?php if ($prev_level < $curr->level) { $openul++;?><ul><?php }?>
    <?php if ($prev_level > $curr->level) { for($i=1;$i<=$prev_level-$curr->level;$i++) {$openul--;?></ul><?php }}?>
        <li 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>
        </li>
<?php
    $prev_level = $curr->level;
}
for($i=1;$i<=$openul;$i++){
    print "</ul>";
}
?>
</ul>
теперь только бы сделать,чтобы подкатегории сразу грузились в список , а не формировались из активной категории было бы вообще отлично
« Последнее редактирование: 08.08.2011, 17:41:53 от Sam-vdv »
Если у Вас есть какие то вопросы обращайтесь - чем смогу помогу!
*

ars-vita

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Цитировать
теперь только бы сделать,чтобы подкатегории сразу грузились в список , а не формировались из активной категории было бы вообще отлично

У меня та же проблема и я застопарися на этом же этапе. Проблема в том, что мой модуль показывает только категории самого верхнего уровня. После нажатия на какую-либо категорию, вся страница перегружается и появляется возможность открыть выпадающий список с подкатегориями только для данной категории. А как сделать так, чтобы все подкатегории загружались сразу?
*

ars-vita

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
*

Vitaly

  • Новичок
  • 8
  • 1 / 0
В приведенном решении
список категорий формируется вида
<ul>
<li>Категория 1</li>
<li>Категория 2</li>
    <ul>
    <li>Подкатегория 1</li>
    <li>Подкатегория 2</li>
    </ul>
<li>Категория 3</li>
</ul>

Что изменить в скрипте, чтобы вложенный список <ul> оказался внутри родительского <li>?
Вот так вот
<ul>
<li>Категория 1</li>
<li>Категория 2
    <ul>
    <li>Подкатегория 1</li>
    <li>Подкатегория 2</li>
    </ul>
</li>

<li>Категория 3</li>
</ul>
*

artspace

  • Осваиваюсь на форуме
  • 48
  • 2 / 0
  • http://www.artspace.com.ua
Решение найдено здесь: http://joomlaforum.ru/index.php/topic,177161.msg954285.html#msg954285

Это решение делает слишком много запросов в базу, как по мне...
В принципе можно использовать замечательную функцию, которая уже есть в скрипте, делающая всего несколько запросов --  buildTreeCategory

Т.е можно вставить в default.php модуля что-то вроде:

Спойлер
[свернуть]

Сорри, за нечистый код -  написал быстро из серии как слышу, так и пою... Это для размышления, кому интересно)
*

vitoxa_ya

  • Осваиваюсь на форуме
  • 12
  • 4 / 0
Не знаю может придумал колесо, но всё же написал свой модуль древовидного меню.
Этот шаблон написанный мною для mod_jshopping_categories я тестировал на джумшоппинге 4 всё работает быстро и без лишних запросов в отличии от этой темы: http://joomlaforum.ru/index.php/topic,177161.msg954285.html#msg954285
В общем кому надо берите:
Код
<?php 
/**
*   template for mod_jshopping_categories for JoomShopping 3.15.x & 4.x.x
* autor: vitoxa_ya
* date modified: 26/10/2013
*
*/

$categories = buildTreeCategory(1); ?>
<ul class="mod_jtree_cat">
<?php
$s = "-- ";
$i = 0;
 ?>
<?php foreach($categories as $curr){
$class = "normal";
if ($category_id==$curr->category_id) $class = "active";

$level = substr_count($curr->name, $s);

if ($level != 0) {

if ($level > $i) { print '<ul>'; }
if ($level == $i) { print '</li>'; $i--;}
if ($level < $i) { print str_repeat('</li></ul>', ($i-$level)); $i = $level; if ($level == $i) $i--;}
?>
   <li class ="<?php print $class.' level'.$level?>"><a href="<?php print SEFLink('index.php?option=com_jshopping&controller=category&task=view&category_id='.$curr->category_id.'', 2);?>"><?php print str_replace('-- ', '', $curr->name); ?></a>
<?php $i++;
$close = $level;
 } else {
if ($close != '') {
if ($close == 0) {
print '</li>';
} else {
print str_repeat('</li></ul>',$close);
}
}
?>
<li class ="<?php print $class.' level'.$level; ?>"><a href="<?php print SEFLink('index.php?option=com_jshopping&controller=category&task=view&category_id='.$curr->category_id.'', 2);?>"><?php print $curr->name; ?></a>
 
<?php  if ($level < $i) { $i = $level;}
}
 }
 if ($close != '') print '</li>'; ?>
</ul>

Спасибо автору поста выше натолкнул на написание более красивое решение и к тому же генерирующее любой уровень вложенности, в моём случае было 6 уровней вложенности.
Верстку и джаву уж доделывайте сами.
Всем спасибо.
« Последнее редактирование: 17.11.2013, 18:01:32 от vitoxa_ya »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
только у автора выше
Код
buildTreeCategory(1)

и это верно, а у вас

Код
buildTreeCategory(0)

и это не очень верно :)

также у функции buildTreeCategory есть второй параметр $is_select, установка которого в 0 укажет, что не надо создавать селекты для категорий, что еще упростит создание списка категорий. только тогда имя категории получить надо будет по другому немного.

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

vladi_petrovich

  • Новичок
  • 6
  • 0 / 0
Не знаю может придумал колесо, но всё же написал свой модуль древовидного меню.
Этот шаблон написанный мною для mod_jshopping_categories я тестировал на джумшоппинге 4 всё работает быстро и без лишних запросов в отличии от этой темы: http://joomlaforum.ru/index.php/topic,177161.msg954285.html#msg954285
В общем кому надо берите:
*****************
Спасибо автору поста выше натолкнул на написание более красивое решение и к тому же генерирующее любой уровень вложенности, в моём случае было 6 уровней вложенности.
Верстку и джаву уж доделывайте сами.
Всем спасибо.
Я так понимаю что этот код нужно вставить вместо кода который в файле modules/mod_jshopping_categories/tmpl/default.php .
Если да, то у меня почему-то последняя категория не в классе mod_jtree_cat .
Что я не так сделал?


И еще заметил, что если в админке JoomShopping снимаю с публикации категорию, на сайте она все равно есть.
« Последнее редактирование: 09.11.2013, 23:18:38 от vladi_petrovich »
*

vladi_petrovich

  • Новичок
  • 6
  • 0 / 0
Неужели такая проблема только у меня?
*

dmitry_stas

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

vladi_petrovich

  • Новичок
  • 6
  • 0 / 0
Ясно. Это сайт пока закрыт. Если я его открою (или предоставлю данные для входа), мне сможет кто-то чем-то помочь?
*

vitoxa_ya

  • Осваиваюсь на форуме
  • 12
  • 4 / 0
Спойлер
[свернуть]

По поводу не закрытого тега, решение не идеальное, я заметил если поменять сортировку главных категорий то код обрабатывается не так как хотелось бы.

По поводу снятых с публикации товаров, вам скорее всего надо поменять  buildTreeCategory(0) на buildTreeCategory(1)
« Последнее редактирование: 20.11.2013, 07:25:47 от vitoxa_ya »
*

vladi_petrovich

  • Новичок
  • 6
  • 0 / 0
А что значит "сортировку главных категорий". У меня сортировка категорий идет по умолчанию.
*

vitoxa_ya

  • Осваиваюсь на форуме
  • 12
  • 4 / 0
А что значит "сортировку главных категорий". У меня сортировка категорий идет по умолчанию.

Сортировка не в модуле, а в джумшоппинге, так как сортировка в модуле тут не работает а обрабатывается сортировка из джумшоппинга, и ещё такой момент, если вы даже поменяли сортировку в джумшоппинге, то в пред послендней "Главной" категории должна быть подкатегория, иначе код в модуле закрывает тег неправильно.
*

vladi_petrovich

  • Новичок
  • 6
  • 0 / 0
Вроде так и сделал, т.е. добавил подкатегорию "косметика2", но все равно ничего не поменялось. Или я что-то не так сделал?
*

vitoxa_ya

  • Осваиваюсь на форуме
  • 12
  • 4 / 0
Спойлер
[свернуть]

Не ну в телепатии я конечно не силён, но вы возьмите и все свои пустые Главные категории опустите в конец, за ту категорию в которой есть подкатегория хоть одна.

Если не поможет, значит не судьба, у вас карма не соответствует.
*

vladi_petrovich

  • Новичок
  • 6
  • 0 / 0
Опустил все категории (которые без подкатегорий) вниз - все равно не помогло.
Видно карма такая. :'(
*

Puzo

  • Захожу иногда
  • 75
  • 2 / 0
Уважаемые, подскажите пожалуйста, как сделать,
список категорий выглядит вот так
Спойлер
[свернуть]

а надо сделать чтобы он был открытый вот в таком виде

Спойлер
[свернуть]

установлен стандартный mod_jshopping_categories
*

nevigen

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

Puzo

  • Захожу иногда
  • 75
  • 2 / 0
Да, Вам спасибо большое, второй раз выручаете!
Если это так просто для Вас, можете написать решение...
*

nevigen

  • Moderator
  • 10451
  • 863 / 25
  • http://n*****n.com
Главная Категория_1
 -Категория
 -Категория
  --Подкатегория
Подкатегорию сделать Категория это что сложно ?
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

Puzo

  • Захожу иногда
  • 75
  • 2 / 0
Нет не сложно, но какой длинной тогда будет колонка с категориями...
я показал примерно.
уровень вложенности будет глубже, а нужно чтобы отображалась только главная категория и категория.
*

nengyryt

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Что-то Вы, друзья мои перемудрили. Мой вариант:

Код
<?php
$level_prev = -1;
foreach($categories_arr as $curr){

        $class = "cat_menu";
   $level = $curr -> level;
 
        if ($categories_id[$curr -> level] == $curr -> category_id){
$class = $class."_active";
}  
if($level < $level_prev){print '</li></ul></li>';}
if($level == $level_prev){print '</li>';}
if($level > $level_prev){print '<ul>';}

?>    
<li class = "<?php print $class?>">
<a href = "<?php print $curr->category_link?>"><?php print $curr->name?></a>

 
<?php
$level_prev = $curr -> level; // сохраняем значение уровня для последующего сравнения

}
?>
</li></ul>
« Последнее редактирование: 03.01.2014, 23:40:29 от nengyryt »
*

dmitry_stas

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

nengyryt

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
еще редактировать будете? или уже можно написать, что вариант для универсального - неверный?

нет, уже не буду редактировать. У себя проверила - все работает как надо, все теги закрыты. В чем моя ошибка?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
ну что вижу сходу не тестируя:
1. http://htmlbook.ru/html/ul -
Цитировать
Тег <ul> устанавливает маркированный список. Каждый элемент списка должен начинаться с тега <li>
т.е. вложенный <ul> также должен быть вложен в <li>. у вас же структура типа
Цитировать
<ul>
  <li>...</li>
  <li>...</li>
  <ul>
     ....
  </ul>
</ul>
а это не верно.
2. для структуры вложенности категорий типа
Код
level 0
  level 1
    level 2
level 0
теги будут закрыты неверно, поскольку при каждом большем уровне (1 и 2) будет открыто два <ul>, а закроется он только один раз
« Последнее редактирование: 04.01.2014, 01:16:05 от dmitry_stas »
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

nengyryt

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
в корне с Вами не согласна. Все теги закрываются верно! Структура меню имеет вид

<ul>
  <li>...</li>
  <li>
       <ul>
           <li>...</li>
            <li>...</li>
       </ul>
   </li>
    <li>...</li>
</ul>
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
да, извините, по п.1 это я недоглядел условие. исправил свой пост.
но по п.2 я по прежнему настаиваю :) при той структуре, что я написал (да и не только, это просто один из вариантов) теги будут закрыты не верно. просто
Цитировать
if($level < $level_prev){print '</li></ul></li>';}
априори не может быть универсально верным, поскольку нет учета разницы уровней. для правильного закрытия тегов нужно закрытие ...</ul>...  в цикле от предыдущего до текущего уровня с шагом 1
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Пункт меню продавец в JoomShopping

Автор nash17

Ответов: 8
Просмотров: 4332
Последний ответ 08.08.2023, 22:23:07
от Rinat abzyi
Вывод товара в модуле по id JoomShopping

Автор nash17

Ответов: 20
Просмотров: 5161
Последний ответ 02.09.2022, 22:13:03
от victorantoniak
Убрать родительский пункт меню для ссылок юзеров(мои заказы, мои данные и т.д.)

Автор Dolphin4ik_1

Ответов: 3
Просмотров: 647
Последний ответ 07.12.2021, 16:40:47
от draff
Количество товара в корзине в мега-меню [решено]

Автор jesus

Ответов: 13
Просмотров: 2068
Последний ответ 08.10.2021, 21:42:27
от Mister Shadow
Как создать категорию JoomShopping в отдельном пункте меню?

Автор Ponu4

Ответов: 5
Просмотров: 1259
Последний ответ 11.03.2021, 08:28:18
от nevigen