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

lustoff

  • Захожу иногда
  • 137
  • 4 / 1
Тайтл изображений товара
« : 03.06.2014, 18:57:34 »
Здравствуйте, форумчане!
Использую VirtueMart 2.6.4.
У изображений товаров есть поле "Название изображения". Если заполнить его то это название выводится при наведении на большую миниатюру в карточке товара.
Если не заполнить, то выводится имя файла изображения.

Начал рыть файлы, дошел до файла \templates\название темы\html\com_virtuemart\productdetails\defaultimages.php , где есть строчка

echo $image->displayMediaThumb("",true,"rel='vm-additional-images'");

у меня она 47. Если я правильно понял, то $image->displayMediaThumb формирует ссылку <a title="тут название картинки"

Где формируется $image->displayMediaThumb ?

--------------------------------------------------------------------------------------

Также название картинки (или имя файла, если не задано название) выводятся во всплывающем окне fancybox

Дошел до файлов
\components\com_virtuemart\assets\js\fancybox\jquery.fancybox-1.3.4.js
и
\components\com_virtuemart\assets\js\fancybox\jquery.fancybox-1.3.4.pack.js
(одно и то же, только второй сжатый для меньшего веса?)
Видимо тут формируется вывод <div id="fancybox-title-inside"

------------------------------------------------------------------------------------------

Подскажите, пожалуйста, как сделать так, чтобы если поле "Название изображения" не заполнено, то не выводились бы эти надписи (название файлов)?
Или в крайнем случае как полностью убрать эти надписи?
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Тайтл изображений товара
« Ответ #1 : 03.06.2014, 23:07:33 »
Код: php
if (empty($image->file_description))
echo $image->displayIt($image->file_url, "empty", 'title="empty"', true);
else
echo $image->displayMediaThumb("",true,"rel='vm-additional-images'");
интернет-блог: http://websiteprog.ru
*

lustoff

  • Захожу иногда
  • 137
  • 4 / 1
Re: Тайтл изображений товара
« Ответ #2 : 04.06.2014, 01:29:36 »
Код: php
if (empty($image->file_description))
echo $image->displayIt($image->file_url, "empty", 'title="empty"', true);
else
echo $image->displayMediaThumb("",true,"rel='vm-additional-images'");
Спасибо большое! Результат почти как нужно. При открытии полного изображения если нет названия картинки, то не выводится под изображением имя файла, если есть название изображение, то выводится оно.
А у большой превьюшки если нет названия изображения, то выводится <a title="empty" . Если есть название - то как нужно название. Подскажите, пожалуйста, как сделать, чтобы не добавлялось к ссылке title="empty", если нету названия изображения?
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Тайтл изображений товара
« Ответ #3 : 04.06.2014, 11:12:30 »
вместо 'title="empty"' оставьте '' : echo $image->displayIt($image->file_url, "empty", '', true);
интернет-блог: http://websiteprog.ru
*

lustoff

  • Захожу иногда
  • 137
  • 4 / 1
Re: Тайтл изображений товара
« Ответ #4 : 04.06.2014, 13:00:05 »
это первое, что вчера попробовал - не сработало, выводится title="empty". Сегодня еще почистил кэш браузера и Joomla, но результат тот же - выводится title="empty".
Причем если прописать 'title="Увеличить"', то выводится title="Увеличить" - в принципе, как вариант пойдет.
Но, нашелся еще один глюк с такой правкой - у тех изображений, у которых нет "Название изображение" в fancybox пропадает не только надпись под изображением, а и стрелки предыдущее/следующее изображения, не меняются изображения при клике на клавиатуре по клавишам "Влево"/"Вправо", а это уже нехорошо. У тех изображений, у которых есть "Название изображения" все по старому.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Тайтл изображений товара
« Ответ #5 : 04.06.2014, 13:17:55 »
У меня вобще нет никаких стрелок и версия VirtueMart более старая, изучайте administrator\components\com_virtuemart\helpers\mediahandler.php, там все эти методы описаны.
интернет-блог: http://websiteprog.ru
*

lustoff

  • Захожу иногда
  • 137
  • 4 / 1
Re: Тайтл изображений товара
« Ответ #6 : 04.06.2014, 14:01:45 »
zomby6888, спасибо большое за наводку где искать!
В этом файле, что вы указали, нашел функцию
function displayMediaThumb()
в ней есть код
Код: php
if(empty($this->file_meta)){
if(!empty($this->file_description)){
$file_alt = $this->file_description;
else if(!empty($this->file_name)) {
$file_alt = $this->file_name;
} else {
$file_alt = '';
}
} else {
$file_alt = $this->file_meta;
}
у меня с 496 строки
закомментировал пару строчек
Код: php
if(empty($this->file_meta)){
if(!empty($this->file_description)){
$file_alt = $this->file_description;
/*else if(!empty($this->file_name)) {
$file_alt = $this->file_name;*/
} else {
$file_alt = '';
}
} else {
$file_alt = $this->file_meta;
}
Теперь, если не заполнены поля "Название изображения" и "Alt текст изображения", то не выводится ничего, что и нужно было получить.
Да, изменения в default_images.php откатил до начального состояния.
« Последнее редактирование: 04.06.2014, 14:06:43 от lustoff »
*

lustoff

  • Захожу иногда
  • 137
  • 4 / 1
Re: Тайтл изображений товара
« Ответ #7 : 04.06.2014, 14:18:42 »
А подскажите, можно как-то сделать, чтоб при обновлении VirtueMart не слетели эти изменения? Переопределить, или как называется...
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Тайтл изображений товара
« Ответ #8 : 04.06.2014, 14:27:43 »
Для этого и нужно displayIt использовать вместо displayMediaThumb. В конце концов displayMediaThumb его и вызывает в итоге, если посмотрите. Посмотрите почему он косячит в вашем случае, может $image->file_url_thumb нада указать первым параметром.Сначало посмотрите какие свойства имеет $image используя:
Код: php
echo '<pre>';
print_r($image);
echo '</pre>';

И уже на основе этого делайте выводы. Можно написать плагин для переопрделения системных классов, но если этот хелпер подключается не через loader то вы его даже в плагине не сможете переопределить, так что это не вариант имхо.
интернет-блог: http://websiteprog.ru
*

lustoff

  • Захожу иногда
  • 137
  • 4 / 1
Re: Тайтл изображений товара
« Ответ #9 : 04.06.2014, 14:47:52 »
У меня от этой информации мозг сейчас взорвется - не программист я ...
Работает, ну и фиг с ним  ::)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Эффект добавления товара в корзину VM3

Автор bassez

Ответов: 0
Просмотров: 2764
Последний ответ 05.06.2020, 12:28:26
от bassez
Вывод краткого описания товара в корзине

Автор PavelK

Ответов: 2
Просмотров: 3072
Последний ответ 04.04.2020, 16:34:10
от PavelK
Редактирование карточки товара VirtueMart

Автор muserun

Ответов: 2
Просмотров: 4931
Последний ответ 31.10.2019, 12:53:51
от Sandruk1
Изменение количества товара в корзине

Автор 1AZ1

Ответов: 18
Просмотров: 3787
Последний ответ 23.09.2019, 15:41:49
от draff
Как добавить артикул в категориях и карточке товара?

Автор alexj69

Ответов: 22
Просмотров: 14469
Последний ответ 16.06.2019, 18:41:53
от AndTaran