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

m_smirnoff

  • Осваиваюсь на форуме
  • 46
  • 2 / 0
Вводные:
Joomla 2.5.14
JoomShopping 3.15
Шаблон магазина default_div (шаблон на дивах от Nevigen)
Итак, ситуация в следующем:
Редактирую отображение страницы товара (файл product_default.php), а именно вывод превью изображений. Хочу сделать их списком и обрамить каждое изображение в <li></li>.
В исходно коде за вывод превьюшек отвечает код:
Код
<span id='list_product_image_thumb'>
   <?php if ( (count($this->images)>1) || (count($this->videos) && count($this->images)) ) {?>
      <?php foreach($this->images as $k=>$image){?>
         <img class="jshop_img_thumb" src="<?php print $this->image_product_path?>/<?php print $image->image_thumb?>" alt="<?php print htmlspecialchars($image->_title)?>" title="<?php print htmlspecialchars($image->_title)?>" onclick="showImage(<?php print $image->image_id?>)" />
      <?php }?>
   <?php }?>
</span>

Мой код для вывода списком выглядит так:
Код
<ul class="thumbnails" id="list_product_image_thumb">
   <?php if ( (count($this->images)>1) || (count($this->videos) && count($this->images)) ) {?>
      <?php foreach($this->images as $k=>$image){?>
      <li class="span3">
         <img class="jshop_img_thumb" src="<?php print $this->image_product_path?>/<?php print $image->image_thumb?>" alt="<?php print htmlspecialchars($image->_title)?>" title="<?php print htmlspecialchars($image->_title)?>" onclick="showImage(<?php print $image->image_id?>)" />
      </li>
      <?php }?>
   <?php }?>
</ul>

Вроде как все нормально работает и после легких манипульций с CSS все выглядит так, как требовалось:

Скриншот: http://redpen.io/r3w5qd

И тут сама проблема. Если я выбираю на странице товара значение какого-либо из атрибутов, то отображение превьюшек ломается. При обзоре исходного кода выясняется что мои теги <li></li> просто исчезают:

Скриншот: http://redpen.io/x2zv4s

После некоторого ковыряния нашел, что если в файле /components/com_jshopping/controllers/product.php закомментировать или убрать строки (примерно 522-526 строка):
Код
$displayimgthumb = intval( (count($images)>1) || (count($videos) && count($images)) );
$rows[] = '"images":['.implode(",", $tmp).'],"displayimgthumb":"'.$displayimgthumb.'"';
то эта проблема исчезает и все прекрасно работает.
Вопрос вот в чем: это какой-то глюк или я просто не там копаю. Хотелось бы выяснить этот вопрос ибо не хочется править файлы магазина, а обходиться только шаблоном.

Надеюсь понятно описал проблему.
*

dmitry_stas

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

m_smirnoff

  • Осваиваюсь на форуме
  • 46
  • 2 / 0
не глюк. просто при обновлении атрибута обновляются в том числе привязанные к нему (атрибуту) картинки. внешний вид их определяется в functions.js функция reloadAttribSelectAndPrice. этим хаком при обновлении атрибута убираете смену картинок. можно изменить так как вам надо в функции. а можно даже плагином, чтобы без хаков.

Спасибо за разъяснение. Получается что в любом случае надо хакать файлы самого магазина, что не есть хорошо для обновления. Ну а написать плагин я пока не силен. Может есть существующие плагины? Да и зачем вообще делать смену картинок?
*

dmitry_stas

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

m_smirnoff

  • Осваиваюсь на форуме
  • 46
  • 2 / 0
ну как зачем? затем что разные атрибуты могут иметь разные изображения.
Ну хорошо, с этим понятно. И с functions.js разобрался — такое решение гораздо правильней, чем мое. Но это не выход.
Плохо что элементарное изменение разметки нельзя провести без хаков или написания дополнительного плагина. Задача-то простая — обернуть превьюшку или в <div> или в <li>, кому как удобнее для задания стилей. И тут приходится писать дополнительные расширения или хакать файлы. Как-то не совсем правильно на мой взгляд. Сама-то структура шаблонов весьма удобна для редактирования.
Может все-таки есть какие-то пути. Или никто не сталкивался?
« Последнее редактирование: 09.09.2013, 17:57:56 от m_smirnoff »
*

dmitry_stas

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

victorantoniak

  • Moderator
  • 1579
  • 185 / 2
  • JoomShopping Team
1. Configuration / Shop function
Extended parameters for attributes: Отключть
 
или

2.
Свой стиль для images
нужно добавить javascript
Код
<script type="text/javascript">
reloadAttribEvents[reloadAttribEvents.length] = function(json){
     var html_thumb_img = "";
     if (json.images && json.images.length>0){
      for(var j=0;j<count_prod_img;j++){
                    html_thumb_img+='<img class="jshop_img_thumb" src="'+liveproductimgpath+'/thumb_'+json.images[j]+'" onclick = "showImage('+j+')" /> ';
                    tmp = 'style="display:none"';
                    if (j==0) tmp = '';
                    html_middle_img+='<a class="lightbox" id="main_image_full_'+j+'" href="'+liveproductimgpath+'/full_'+json.images[j]+'" '+tmp+'><img id="main_image_'+j+'" src="'+liveproductimgpath+'/'+json.images[j]+'" />'+html_zoom_img+'</a>';
                }
                if (json.displayimgthumb=="1")
                    jQuery("#list_product_image_thumb").html(html_thumb_img);
                else
                    jQuery("#list_product_image_thumb").html("");        
     }
</script>
« Последнее редактирование: 09.09.2013, 18:43:24 от victorantoniak »
*

m_smirnoff

  • Осваиваюсь на форуме
  • 46
  • 2 / 0
Всем спасибо за ответы. В чем-то помогло. Наверное действительно надо добавить в хотелки разработчикам, чтоб по-умолчанию вывод превьюшек формировался списком. Это даст больше возможностей для стилизации.
*

dmitry_stas

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

m_smirnoff

  • Осваиваюсь на форуме
  • 46
  • 2 / 0
Код
надо добавить в хотелки разработчикам, чтоб по-умолчанию вывод превьюшек формировался списком
нет. в хотелки надо добавить, чтобы вывод формировался в php, и передавался в js в готовом виде. тогда можно использовать шаблон, в котором каждый как ему надо, так и будет выводить изображения.
В принципе именно это я и хотел сказать :)
*

alikxus

  • Новичок
  • 7
  • 0 / 0
Подскажите, пожалуйста, такую вещь. Я добавил в атрибуты в файле product.php возможность увеличения картинки атрибутов. Все хорошо работает. Но появилась проблема. Так как у меня неаколько видов атрибутов, то при выборе одного (типа селект), происходит обновление всех остальных. Вот логическим путем сначала дошел до reloadAttribSelectAndPrice(), потом до if (json.images && json.images.length>0){ ну а потом с помощью Google и до этой темы. В программировании не силен, не пойму где нужно подправить, чтобы картинки атрибутов не теряли свои свойства
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Уведомление о превышении доступного количества товара

Автор goga_pgasovav

Ответов: 1
Просмотров: 840
Последний ответ 03.02.2025, 18:48:10
от kit2m2
Артикул или код товара?

Автор goga_pgasovav

Ответов: 3
Просмотров: 1086
Последний ответ 28.11.2024, 19:03:59
от goga_pgasovav
Странная задача: получить псевдоним товара по его ID в шаблоне статьи

Автор goga_pgasovav

Ответов: 4
Просмотров: 1543
Последний ответ 04.07.2024, 13:06:45
от goga_pgasovav
Ошибка при изменении статуса товара

Автор itbc

Ответов: 4
Просмотров: 1346
Последний ответ 08.05.2024, 10:31:16
от itbc
Медленно загружается карточка товара

Автор svarg

Ответов: 7
Просмотров: 1502
Последний ответ 10.07.2023, 16:14:36
от svarg