Куда идем?

Часто, для привлечения внимания к определенным товарам интернет-магазина, на них добавляются ярлыки. Это может быть «Новинка», «Скидка», «Акция» и другие. Данных трюк позволяет быстрее продавать товары, или, как минимум, заинтересовать пользователей. Все любят скидки, даже если это просто рекламный ход. Virtuemart 2 позволяет достаточно легко реализовать данную функцию, но почему-то в Интернете описаны лишь способы требующие хаков ядра, либо оплаты за дополнительное расширение. В этой статье я расскажу, как самостоятельно, быстро и бесплатно добавить любые ярлыки к товарам Virtuemart 2 не используя дополнительных расширений и не прибегая к хакам.

Планирование

Прежде, чем приступать к реализации, было бы неплохо все спланировать. Весь процесс добавления ярлыков будет состоять из следующих этапов:

  1. Выбор и подготовка изображений ярлыков.
  2. Создание дополнительного поля Virtuemart 2 для ярлыков.
  3. Добавление кода вызова дополнительного поля Virtuemart 2 в макетах категории и товара.
  4. Добавление дополнительного поля для определенных товаров.
  5. Оформление ярлыка в контексте товара.

Здесь этапы описаны кратко, но дают возможность понять, что именно требуется сделать. Ниже разберем каждый этап подробно и с примерами.

Выбор и подготовка изображений ярлыков

Во-первых, нужно определиться, сколько мы хотим добавить ярлыков, подобрать подходящие изображения и привести их к единому стилю и размерам. Предположим, нам нужно создать три различных ярлыка с возможностью добавлять любой из них к любому товару. Пусть это будет «Скидка», «Новинка» и «Акция». На самом деле ярлыков может быть сколько угодно. Добавить их позже также не составит большого труда.

Вот наши ярлыки:

virtuemart 2 product labels

Они представляют собой три картинки формата PNG размеров 48x48 px. Если вы планируете поместить ярлыки непосредственно на изображения товаров, то картинки ярлыков обязательно должны иметь прозрачный фон, а соответственно быть форматов PNG или GIF.

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

  1. Через FTP загрузить изображения ярлыков в папку:
     images\stories\virtuemart\product
  2. Перейти в Медиа-менеджер Virtuemart 2 (Магазин –> Медиа-файлы) и нажать кнопку «Синхронизировать с Virtuemart».

Файлы ярлыков должны появиться в списке:

virtuemart 2 product labels

Когда ярлыки готовы и загружены на сайт можно переходить к следующему этапу.

Создание дополнительного поля Virtuemart 2 для ярлыков

Добавлять ярлыки к товарам мы будем с помощью дополнительного поля Virtuemart 2. Причем поле потребуется только одно. Переходим в менеджер дополнительных полей Virtuemart 2 и создаем новые поле типа «Изображение» с настройками, как показано на рисунке ниже:

virtuemart 2 product labels

Не забудьте указать позицию макета. Она должна быть уникальной и использоваться только для этого поля.

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

Добавление кода вызова дополнительного поля Virtuemart 2 в макетах категории и товара

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

Код вызова дополнительного поля ярлыков на странице категории товаров.

1. Копируем файл:

components/com_virtuemart/views/category/tmpl/default.php

в папку:

templates/[ваш_шаблон]/html/com_virtuemart/category/

Если каких-то каталогов не хватает, создаем их самостоятельно. Если файл уже присутствует в конечной папке, то заменять его не нужно.

2. В скопированном файле (который находится в папке с шаблоном), находим код вызова основного изображения и добавляем после него приведенный код:

<div class="product floatleft<?php echo $Browsecellwidth . $show_vertical_separator ?>">
	<div class="spacer">
		<div class="width30 floatleft center">
			<a title="<?php echo $product->product_name ?>" rel="vm-additional-images" href="/<?php echo $product->link; ?>"><?php echo $product->images[0]->displayMediaThumb('class="browseProductImage"', false);?>
			 </a> <!-- Окончание кода основоного изображения. После него нужно вставлять код, который представлен ниже!  -->
 <?php // Код вывода ярлыка
if (!empty($product->customfields)) { //проверяем, есть ли дополнительные поля у текущего товара ?>
<?php foreach ($product->customfields as $field){ // если поля есть, просматриваем все в поисках поля ярлыка
if($field->layout_pos == 'product-label'){ // ищем поля ярлыка через позицию ?> <div class="category-product-label"><?php echo $field->display; //выводим ярлык ?> </div>
<?php }}} ?>

Код вызова дополнительного поля ярлыков на странице товара.

1. Копируем файл:

components/com_virtuemart/views/productdetails/tmpl/default_images.php

в папку:

templates/[ваш_шаблон]/html/com_virtuemart/productdetails/

Если каких-то каталогов не хватает, создаем их самостоятельно. Если файл уже присутствует в конечной папке, то заменять его не нужно.

2. В скопированном файле (который находится в папке с шаблоном), находим код вызова основного изображения и добавляем после него приведенный код:

<div class="main-image"><?php echo $image->displayMediaFull("",true,"rel='vm-additional-images'"); ?>
	 <div class="clear"></div>
	<!-- Окончание кода вывода основного изображения. После него нужно вставлять код, который представлен ниже--> 
 <?php if (!empty($this->product->customfieldsSorted['product-label'])) { // Проверяем, есть ли у товара ярлык 
$this->position = 'product-label'; ?> <div class="product-label"><?php echo $this->loadTemplate('customfields'); //Выводим ярлык ?> </div>
<?php }?>

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

На этом правки кода закончены. Переходим к добавлению ярлыков для определенных товаров.

Добавление дополнительного поля ярлыков для определенных товаров

Здесь все очень просто. Выбираем в админке товар, к которому нужно добавить ярлык. Переходим в его настройки. Во вкладке «Настраиваемые поля» выбираем тип поля «Ярлык» и указываем для него необходимое изображение ярлыка.

virtuemart 2 product labels

Сохраняем. Если все сделано правильно, то после этого действия на сайте, в категории и товаре, появится наше изображение. После этого останется лишь красиво его оформить.

Оформление ярлыка в контексте товара

Всё, что касалось работы с данными, мы сделали. Осталось исключительно оформление (верстка). Поскольку в коде мы задали уникальные классы, то остается только оформить ярлык с помощью CSS. Ниже я привожу CSS-код, который подходит для стандартного шаблон Virtuemart 2. Его использовать необязательно. Можно все оформить по-своему, но для примера привожу:

.category-product-label {
    left: 30px;
    position: relative;
    top: -25px;}
 .product-label {
    left: 50px;
    position: relative;
    top: -150px;}
 .category-product-label img, .product-label img {width:48px;height:48px;}
 .category-product-label .vm-img-desc, .product-label .vm-img-desc {display:none;}

После этого наши ярлыки выглядят так:

virtuemart 2 product labels

virtuemart 2 product labels

Таким образом, мы получили функционал добавления неограниченного количества ярлыков для товаров без каких-либо дополнительных расширений и хаков. Подобным способом можно добавлять и выводить не только ярлыки, но и любые другие данные в любом месте макетов. Всё удивительное просто :-).

---------

Если вам надоело читать подобные статьи и ковыряться в коде, то ваш вариант - изготовление сайтов на заказ(http://www.savsolution.ru/). Можете воспользоваться услугами этой студии.

Об авторе
Wedal
(Виталий). Веб-разработчик полного цикла (Full Stack). Создатель и автор сайта Wedal.ru.
Основной профиль – создание сайтов и расширений на CMS Joomla.
Добавить комментарий

Комментарии  
1
У Вас отличные и полезные статьи, приятный блог, сейчас же куплю у вас вечную ссылку :) По-больше бы про VM 2, интересная тема.
0
Здравствуйте Виталий. Благодарю за полезную статью. Сделал все по вашим рекомендациям НО в карточке товаре, кроме ярлыка, выводит еще и название настраиваемого поля, т.е. "Ярлык". В категории все нормально отображается. Подскажите как исправить.
0
Нашел решение, дополнив последнюю строку SCC:
.category-product-label .vm-img-desc, .product-label .vm-img-desc, .product-fields-title {display:none;}
-1
Спасибо большое за гайд, но есть один вопрос, как повесить ярлык в модуле виртуамарт-товары. Вероятно, это надо делать как-то по аналогии с описанием, но я, увы, не сильна в кодах. Попыталась добавить дефолтный файл модуля в шаблон и вставить туда код ярлыка, но ничего не получилось =) Хелп ми, плиз =)
-2
Полина, используйте код вызова для категории. Он работает. Проверил лично.
0
А подскажите, пожалуйста, правильный путь директории, создаваемой в шаблоне. И еще, после чего ставить код ярлыка и что надо добавить в CSS? :-*
0
Полина, директория:
templates/ваш_шаблон/modules/имя_модуля/

Код нужно ставить туда, где удобнее. Там посмотрите по коду макета, посмотрите на сайте через Firebug.

С CSS опять же поможет Firebug.
0
Спасибо! Правда, пришлось немного поковыряться, учитывая мою "пряморукость", но получилось 8)
0
Я не могу найти нужное место для вставки кода, даже если получается поставить картинку, то под изображением товара образуется огромный отступ.
0
http://microshef.ru/magazin.html
0
Кстати, оказывается, отступ и в остальных местах тоже появляется.
-1
Полина, это вопрос CSS. DIV с ярлыком должен находится в DIV'е c товаром. При этом у родительского DIV'а должен быть CSS-стиль position:relative, а у дочернего: position:absolute.
0
Хотя, не совсем... В модуле Рекомендованные товары выводится, а в Случайных товарах почему-то нет...
1
Эту директорию надо создавать ил она должна быть?
0
Кстати, может что-то я сделала не так: в опере ярлыки отображаются отлично, а вот в других браузерах (Фокс, Яндекс, Хром) картинка выводится под изображением товара, а под ней еще и имя файла... Как будто на нее CSS не действует.
0
С браузерами разобралась, просто почистила в них кэш :oops: А вот насчет кода для модуля, жду ответа :-)
0

Цитирую Wedal:

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


Сорри за -, все работает
0
Все доброго времени суток, у меня не получается, может с добавлением кодом что то не так делаю, добавлял код ниже где начиналось эта тема в коде, и даже заменял.страница с товаром вообще не открывается, в коде не чего не менял просто копировал вставлял. ПОМОГИТЕ! очень надо!
-1
Terra, если страница не открывается, должна быть какая-то ошибка. Если она не отображается, то нужно включить отображение ошибок. Напишите ошибку, тогда можно будет разобраться.
0
В коде действительно есть некоторые опечатки:
1. комментарии (попробуйте аккуратно удалить комментарии автора)
2. пробелы между ключевыми словами
phpif => php if)
А вообще отличная идея, спасибо автору!!!
-1
chaban, поправил код. Спасибо, что написали.
0
Здравствуйте! в категории товара все отлично. А вот в карточке выдает ошибку.
Warning: Invalid argument supplied for foreach() \www\components\com_virtuemart\views\productdetails\tmpl\default_customfields.php on line 26

проблема в этом куске
0
вот echo $this->loadTemplate('customfields');
-1
Даниил, что в файле components\com_virtuemart\views\productdetails\tmpl\default_customfields.php в 26 строчке?
0
foreach ($this->product->customfieldsSorted[$this->position] as $field) {
-1
Даниил, у меня только одно предположение. Название позиции в коде перед

Код:

echo $this->loadTemplate('customfields');


не

Код:

$this->position = 'product-label';


либо в настройках дополнительного поля указана другая позиция.
0
Огромное спасибо! Проблема решилась просто!) В куске кода который вставляем в default_images.php просто закоменчен был
// Проверяем, есть ли у товара ярлык $this->position = 'product-label'; :lol:
0
Добрый день. подскажите пожалуйста. очень надо!!!. всё поставила. всё работает. на странице категорий вообще отлично, но в карточке товара изображение ярлыка деформируется (сжимается и растягивается) - так понимаю что где-то прописаны размеры этой позиции - но вот только где? ПОЖАЛУЙСТА, ПОДСКАЖИТЕ
:cry:
0
а методом "перемещения кода" к сожалению ничего не получилось - картинка стала в правильных пропорциях - но очень большая
-1
Мария, чтобы изображение не деформировалось, задайте ему размеры через CSS. Пример есть в этой статье. Не забывайте про пропорцию ширины и высоты.
0
дело в том что именно это я сразу и сделала, но это никак не повлияло(((
если убрать эти строчки - пропорции восстанавливаются , но картинка становится таким размером как заданы миниатюры в шаблоне VM2.category-product-label img, .product-label img {width:60px;height:60px;}
.category-product-label .vm-img-desc, .product-label .vm-img-desc {width:60px;height:60px;}.
А может быть проблема default.php ведь проблема появляется именно в карточке товара, на странице категорий всё отлично
0
Вобщем-то в проблеме так и не разобралась. уже доделаю. сайт - тогда буду искать в чём беда. НО В ИТОГЕ ДЛЯ ТОГО ЧТОБЫ ЯРЛЫК БЫЛ 60Х60. Я ПРОПИСАЛА {width:40px;height:190px;}. ЯРЛЫК КОНЕЧНО НЕМНОГО больше чем задуман - но хотя бы в правильных пропорциях (квадратный). Как так получилось - не пойму - но вот может кто-то подскажет. СПАСИБО И АВТОРУ И ТОМУ, КОМУ НЕ ЛЕНЬ БУДЬ ПОДСКАЗАТЬ
0
Мария, если есть живой пример - покажите. Тогда сразу объясню в чем дело. Если нет, то посмотрите через Firebug, все станет много понятнее.
0
и если можно :cry: поясните немного подробнее как уменьшить расстояние после ярлыка. спасибо
0
Решение конечно интересное, я до него не додумался, но немножко фейковое :) Объясню почему. Например возьмем ярлык "Скидка". По идее он должен вешаться на товар, автоматически если у товара есть скидка. А это не так. Мы просто вручную на любой товар, лепим любую картинку, что не совсем правильно. Моё ИМХО, лучше развить идею, создать разные поля и добавить код например проверки есть скидка на товар или нет, товар по акции(рекомендованный) или нет и т.д.
Ну а так, для общего развитию - спасибо за инфу =)
0
Snake 60, в целом с вами согласен, однако, как показывает практика, чаще владельцы магазина хотят делать это именно вручную, чтобы привлечь внимание покупателей к определенным товарам. Но вообще, вы подали хорошую идею для нового кейса. Постараюсь написать howto, как это сделать.
0
Виталий здравствуйте! А можно ли тоже самое сделать применительно к вирту1, а не 2?
0
ficsa, теоретически - можно, используя типы полей. Но реально не уверен, что получится без хаков, да и реализация будет совсем другой.
0
Не выводиться ярлык в категории товара, показывается только в самом товаре, в чем может быть проблема?
0
Вот здесь показывается:
http://lindtextil.cz/ru/magazin/gotovye-shtory/cerame-1-detail

Здесь нет:
http://lindtextil.cz/ru/magazin/gotovye-shtory
0
Константин, какой код вставляли в категории?
0
Вот этот:
0
Константин, используйте кнопку "Код" для вставки. И еще, вы указали в настройках поля позицию макета product-label?
0
Здравствуйте, спасибо за прекрасную статью! Есть один вопрос: подскажите какой файл css нужно редактировать на последнем шаге (желательно еще и путь к файлу)? Заранее спасибо
0
ruskost, кликните на странице вашего сайта правой кнопкой мыши и выберите пункт "Просмотр исходного кода"(или аналогичный). Откроется исходный html-код страницы. В нем вы увидите все подключенные CSS-файлы и пути к ним. Можете добавить в любой, но лучше в тот, который содержится в используемом вами шаблоне.
0
Wedal, спасибо, что откликнулись! Я поправил файл template.css в папке css шаблона.
Все прекрасно работает за исключением двух моментов:
1) в товаре не отображается ярлык и,
2) в рекомендуемых товарах также нет этих значков.
Вы не можете подсказать как добавить ярлыки на указанные страницы?
0
Спасибо разобрался. Подскажите еще вот такой момент, может кому-то тоже пригодится.
Если в карточке товара несколько изображений, то при переходе по ним, меняется изображения встраимого ярлыка на маленькие изображения самих фото, вот пример:http://lindtextil.cz/cz/obchod/hotove-zaclony/cerame-1-detail
1) http://screencast.com/t/4ifI4OuoV
2) http://screencast.com/t/EweG0yHIyJxc
0
Константин, интересно. Такого быть не должно. Тут дело уже в скриптах. Видимо скрипт собирает все картинки по img на странице, или в определенном блоке. Нужно его поправить, либо попробовать вставить код вывода дополнительного поля лейбла в другом месте, подогнав через CSS.
1
Добрый день! Спасибо за хорошие уроки! Подскажите пожалуйста как картинки можно вставить в рекомендуемые товары, новинки?
0
Подскажите пожалуйста куда именно надо вставлять код для вывода в модулях картинки? В файле default.php в директории mod_virtuemart_product. Я никак не могу ее вывести уже все перепробовал? Вы пишите сверху что код можно вставить тот же что и для вывода в категории или его надо также редактировать? Заранее спасибо!
0
КАК оформить ярлык с помощью CSS не могу понять в каком именно css надо поправить размеры и где он находится. ОТВЕТЬТЕ пожалуйста очень хочу доделать.
-1
артем, это поможет ответить на все ваши вопросы: http://wedal.ru/internet/rukovodstvo-po-firebug.html
0
Добрый день!
В категориях сработало, а вот в карточке товара не получилось. Даже, не знаю, в чем может быть загвоздка, помогите разобраться. Смотрю html-код, div с классом product-label есть, но он пустой.
Сайт пока на локальном хостинге.
0
Спасибо!!! Все получилось! Вопрос решила, час промучавшись, как только написала Вам)

Код:

<?php if (!empty($this->product->customfieldsSorted['product-label'])) { // Проверяем, есть ли у товара ярлык $this->position = 'product-label'; ?>


Копировала код из статьи, а там фрагмент кода идет подряд за комментом, то есть тоже закомментирован. Надо было лишь нажать Enter)
0

Цитирую Wedal:

Полина, это вопрос CSS. DIV с ярлыком должен находится в DIV'е c товаром. При этом у родительского DIV'а должен быть CSS-стиль position:relative, а у дочернего: position:absolute.



Друзья, кто знает как правильно избавится от пробелов? Правильно ли я вставляю код?

Код:

<div class="product-images" style="position:relative">
<?php /** @todo make image popup */
echo $product->images[0]->displayMediaThumb('class="browseProductImage" border="10" title="'.$product->product_name.'" ',true,'class="modal"');
?>
<?php // Код вывода ярлыка
if (!empty($product->customfields)) { //проверяем, есть ли дополнительные поля у текущего товара ?>
<?php foreach ($product->customfields as $field){ // если поля есть, просматриваем все в поисках поля ярлыка
if($field->layout_pos == 'product-label'){ // ищем поля ярлыка через позицию ?>
<div class="category-product-label" style="position: absolute"><?php echo $field->display; //выводим ярлык ?>
</div>
<?php }}} ?>
</div>

1
ruskost, код в статье поправил.
0
Спасибо, Wedal, помогло! Сайт классный!
0
Здравствуйте, подскажите пожалуйста, как избавиться от пробела под фото. И как поставить ярлык в карточку товара. Спасибо. Всё сделано как вы написали. Большое спасибо Вам за статью!!!
0
Здравствуйте, подскажите пожалуйста как убрать отспупы. (www.vitalinna.com.ua)
Спасибо Вам огромное за Ваши статьи.
0
у меня картинка получается ниже и размером 250 на 250 в какой css вставлять этот код подскажите

.category-product-label {
left: 30px;
position: relative;
top: -25px;}
.product-label {
left: 50px;
position: relative;
top: -150px;}
.category-product-label img, .product-label img {width:48px;height:48px;}
.category-product-label .vm-img-desc, .product-label .vm-img-desc {display:none;}
0
в карточке товаров картинка ХИТ получилась под основной. как её перенести на передний план. вот ссылка на страницу пробную на неё я немного поигрался позицией но все равно вверху видно

http://онлайн31.рф/katalog/kraska-dlya-volos-prestige-vip-s-rosaimpex-bolgariya/prestizh-balzam-ottenochnyj-silver-effect-detail
0
artem2008, в класс:
.product-label
добавьте стиль:
z-index:65000;
0
стиль: z-index:65000; помог,но появилась надпись ярлык
0
artem2008, добавьте в CCS:


Код:

product-label .product-fields .product-field span.product-fields-title{
display:none;
}

0
извините за тупость. включив голову допер за 5 минут теперь всё работает
0
Что-то *.png прозрачность теряет при загрузке в магазин. Как победить? В первом вирте можно было по ftp перезагрузить файл. Как здесь быть?
0
zuzu, здесь также. Ну и убедитесь, что в PNG действительно нет фона, а он не белый, например.
0
Фона нет (он становится черным). Пробовал выкачать по ftp файл и миниатюру обратно на компьютер после инициализации магазином - фон прозрачный. Т.е. получается, что файл просто некоректоно обрабатывается магазином. Если файл загрузить не в папку images\stories\virtuemart\product, а в соседнюю папку производителей, то файл подхватывается магазином в нормальном виде.
0
zuzu, посмотрите это:
http://forum.virtuemart.net/index.php?topic=119971.0
Но не сказать, что хорошее решение.

Вообще дело, как я понял, в некорректной обработке при создании миниатюр изображений. Самое простое решение - использовать JPG.
0
Подскажите пожалуйста как поставить в модуль это счастье((( Выше уже этот вопрос задавался -но не могу разобраться((
0
Подскажете, как сделать чтоб ярлык был внутри тега

Код:

<a>

в котором лежит большая картинка чтоб при клике на этот ярлык открывалось увеличенное изображение в попапе.
0
ну т.е. если ярлык перекрывает изображение то получается что область ссылки под ним не активна, а надо сделать чтоб была активна
0
Михаилус, это не так просто. Вам нужно разобрать конструкцию:

Код:

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


Т.е. отдельно получить путь к изображению, отдельно получить ссылку на полное изображение и изобразить примерно то, что вы видите в html странице в коде макета. После этого вы сможете подсунуть в тег картинку ярлыка.
0
Кто-нибудь знает как то же самое сделать только в VM3???
Спасибо!
0
что-то в модуле товара не выводится ярлык ((
0
Все хорошо, но вот трабл, когда картинки меняются, скидка пропадает и вместо нее, на ее месте, мини-картинка (((
Как это можно исправить?
0
Вознаграждение!
Нужна помощь. Сделать вывод иконок статуса товара в модуле, категории и карточке товара выше описанным способом.
Joomla! 2.5 / VM 2.0.20b

Код:

e-mail: ; skype: yuri46.7; тел: +79067435440;<br />Юрий


Возможно кто знает альтернативные расширения, как платные так и халяву. Буду признателен в советах.
0
Всё отлично! Всё работает! СПАСИБО!!!
но есть маленький нюанс - как убрать лишние пробелы после вывода в категориях?
0
Константин, что за лишние пробелы?
0
появляется куча пустого места в категориях. после рисунка.http://lukar-mag.org/zhilety-iz-ovchiny.html
рядом картинка без стикера и сразу внизу название, артикул, цена.
а если со стикером, то получается куча пустого мета между картинкой и названием товара
0
Константин, замените в CSS-коде лейбла position: relative; на position: absolute;. Также блок, дочерний к блоку лейбла, должен иметь стиль position: relative;. Это будет означать, что лейбл позиционируется относительно родительского блока, накладывается на него, и не занимает места в общей структуре блоков. После этого вам останется только выставить его в нужное место с помощью стилей left и top.
0
Спасибо. Способ хороший. Но если товар присутствует в других категориях то position: absolute; не подходит - всё сбивается. Т.е. (в моем случае) если товар присутствует в категории жилеты и женские жилеты, то просто в жилетах всё ок, а в женских жилетках всё сбивается)
0
Константин, положение кнопки не зависит от контента, на который она накладывается, но зависит от макета, который группирует этот контент по странице. Возможно для женских жилеток используется другой макет, либо просто макет построен таким образом, что позволяет контенту (например, изображению товара) "скакать" на странице, из-за чего всё сбивается. Конкретнее нужно уже смотреть. Напишите обе страницы, на которые есть такая разница - я подскажу.
0
А на VM3 есть решение?
0
Guest, на VM3 все точно также, только изменились некоторые названия полей. Точно изменилось $product->customfields на $product->customfieldsSorted. Посмотрите в коде и поправьте по аналогии с другими полями, которые уже выводятся в макете.
0
Добрый день
подскажите, пожалуйста, куда нужно скопировать последний CSS-код?
.category-product-label {
left: 30px;
position: relative;
top: -25px;}
.product-label {
left: 50px;
position: relative;
top: -150px;}
.category-product-label img, .product-label img {width:48px;height:48px;}
.category-product-label .vm-img-desc, .product-label .vm-img-desc {display:none;}

все делал по Вашей инструкции кроме: Код вызова дополнительного поля ярлыков на странице товара.
у меня в карточке товара есть поле Ярлык и уже можно выбрать закруженные картинки

спасибо
0
alex, код CSS нужно вставить в файл CSS вашего шаблона Joomla. В каждом шаблоне эти файлы разные, а потому не могу сказать точно. Посмотрите исходный html-код страницы в браузере. Там вы увидите CSS-файлы, подключенные в шаблоне. Поиском найдите их: ".css".
0
все это прекрасно конечно, но Вы бы еще научили как экспортировать такие поля через csvi
0
jeka, экспортировать или все-таки импортировать?
Ярлыки и экспортируются и импортируются точно также, как и любое другое дополнительное поле VM. На сайте CSVI есть подробная инструкция по экспорту/импорту custom fields.
0
Здравствуйте, возникла некоторая проблема.
Товары стоят в определенном порядке. Например, стул 1 красный - стул 1 синий - стул 1 зеленый. На всех стоит ярлык "в наличии" (бесспорно, большое спасибо Вам за этот метод, все прекрасно работало до определенного момент), но вот возникла проблема. При добавлении сопутствующих товаров (в моем случае - похожих товаров) всплыло кое-что. Если я добавляю к красному стулу синий и зеленый в сопутствующие (и по этому же методу добавлю сопутствующие к синему и зеленому) , то ярлык только у красного (в категории, не использую ярлыки в карточке товара), если поставить сопутствующие к синему и зеленому без красного, то будут отображаться у первых двух и тд. То есть, сопутствующие товары "отрубают" ярлык у последующих по списку товаров в категории. Вы с таким не сталкивались?
0
Arta, мудрено... Я вообще не могу представить, как может повлиять "сопутствие" того или иного товара на ярлыки других. Попробуйте вывести $product->customfields через print_r в категории. Посмотрите какие дополнительные поля выводятся для каждого из товаров. Есть ли среди них ярлыки.
0
Без особой надежды, но все же спрошу. Нашли решение? )))
0
Sawell, опишите вашу проблему, по-возможности, более простым языком, чем в комментарии выше. Возможно подскажу.
0
Здравствуйте, Виталий! Есть "Товар 1" и "Товар 2". "Товар 1" в сопутствующих у "Товар 2". И "Товар 2" в сопутствующих у "Товар 1". Т.е. перелинковка между товарами. При таком кейсе, кода у товаров есть сопутствующие, и эти оба товара ("Товар 1" и "Товар 2") выводятся на одной странице категории, то, дополнительные поля подгружаются только у того товара, который был загружен первый. У второго товара просто отсутствует массив "customfields". И дело здесь не в шаблоне.
0
Sawell, думается мне, что это сделано умышленно. Ведь если в customfields есть сопутствующий товар, у которого в customfields есть исходный, то это получается объект бесконечного размера. Вроде "У попа была собака...". Конечно, я могу ошибаться, но почему-то логика видится именно такой.
0
Не думаю. В ведь в customfields идут только доп. поля. А вот в customfieldsRelatedProducts уже есть вложенные товары. Но! в customfieldsRelatedProducts тоже нет массива customfields. Это первый аргумент. Второй, на странице товара доп. поля прекрасно выводятся, даже с наличием сопутствующих товаров. И третье, даже если Товар 2 в сопутствующих у Товар 1, а Товар 1 нигде не присутствует, то, при выводе в порядке: Товар 1, Товар 2. Товар 2 снова, не будет иметь массива customfields . И в случае вывода в порядке: Товар 2, Товар 1, теперь Товар 1 будет без массива customfields.
0
Sawell, по пунктам:


Цитата:

customfieldsRelatedProducts тоже нет массива customfields

Его там и не должно быть. Слишком жирно грузить поля сопутствующих товаров в категории товаров.


Цитата:

Второй, на странице товара доп. поля прекрасно выводятся, даже с наличием сопутствующих товаров.

Это совсем другая страница и другая история. Это никак не связано со страницей категории.


Цитата:

даже если Товар 2 в сопутствующих у Товар 1, а Товар 1 нигде не присутствует, то, при выводе в порядке: Товар 1, Товар 2. Товар 2 снова, не будет иметь массива customfields . И в случае вывода в порядке: Товар 2, Товар 1, теперь Товар 1 будет без массива customfields.

Если все так, то это похоже на баг, хотя я никогда с ним не сталкивался, сколько работал с VM. В том числе часто использую и сопутствующие товары. Какая у вас версия VM? Также проверьте, что в настройках VM, на вкладке "Внешний вид", в разделе "Список товаров" стоит галочка у опции "Показывать произвольные поля товаров в представлении списков". Хотя она должна там быть, иначе бы поля вообще не показывались в категории.
0
Виталий здравствуйте!


Цитата:

Какая у вас версия VM?

VirtueMart 2.6.6


Цитата:

Также проверьте, что в настройках VM, на вкладке "Внешний вид", в разделе "Список товаров" стоит галочка у опции "Показывать произвольные поля товаров в представлении списков".

У меня вообще, нет такой настройки.

Я рассматривал решение с прямым обращение в БД для загрузки доп. полей. Но, в моём случае, это не сработает. Т.к. мне нужно выводить плагин. Плагин считает стоимость комплекта. Видимо остаётся только получать данные из плагина и производить расчёт на странице категории. Но, это конечно тот ещё костыль. Может подскажете более элегантное решение?
0
Sawell,


Цитата:

VirtueMart 2.6.6

2.6.6?, не 3.6.6? Елки-палки, что мы тогда обсуждаем? Это же древняя версия, после выпуска которой были исправлены уже тонны ошибок. Обновляйте VM. Либо можете сначала проверить на тестовом сайте с последней версией VM ветки 3(!) (VM 3.8.8), работают ли поля.
0
Виталий, безусловно, пора обновлять. Пока пытаюсь закрыть некоторые задачи. Т.к. обновление и реализация всего функционала старого сайта займёт не один месяц. Не говоря уже о переносе номенклатуры.
0
Sawell, если я правильно помню, обновление с VM2 на VM3 проходит более-менее гладко, без миграций. Но вот если у вас много хаков, то там да, беда будет.
0
На станице категории не выводится ярлык, хотя на другом сайт все получалось...
Что может быть?
Вот код:
0
Ярик, может быть что угодно. Нужно больше информации.
0
Добрый день, Виталий. На vm3 не работает, не выводятся ярлыки. Изменил $product->customfields на $product->customfieldsSorted. В чем еще может быть причина?
0
Виктор, временно добавьте в макете вывода строчки:

Код:

<pre><?php print_r($product->customfields); ?></pre>



Код:

<pre><?php print_r($product->customfieldsSorted); ?></pre>


Вы увидите, как хранятся данные. Найдите то, что вам нужно, и сможете вывести. Главное понимать, что если тип - объект, то нужно использовать ->поле, а если тип - массив, то ['поле'].
0
Здравствуйте.
VirtueMart 3.2.2
вставляю предложенный Вами код в файл "шаблон/html/com_virtuemart/category/default.php" ничего не меняется. В этом файле нет кода вызова основного изображения

Код:

<div class="product floatleft<?php echo $Browsecellwidth . $show_vertical_separator ?>"> <div class="spacer"> <div class="width30 floatleft center">


икал этот код в \components\com_virtuemart\views\category\tmpl\default.php
Вероятно я не правильно понял - подскажите решение.
Возможно в VirtueMart3 другой файл отвечает за изображение на странице категорий - подскажите куда вставлять предложенный Вами код.
Спасибо
0
Валерий, в Virtuemart 3 слегка изменили макеты. Нужный вам файл для категории:
/components/com_virtuemart/sublayouts/products.php
0
Не забудьте перед правкой переопределить(скопировать) его в шаблон Joomla и вносите изменения уже там.
0
Спасибо за участие.
Код не выводит настраиваемое поле в ViruteMart3


Код:

<a title="<?php echo $product->product_name ?>" href="<?php echo $product->link.$ItemidStr; ?>"> <?php echo $product->images[0]->displayMediaThumb('class="browseProductImage"', false); ?> </a> <?php // Код вывода ярлыка if (!empty($product->customfieldsSorted)) { //проверяем, есть ли дополнительные поля у текущего товара ?> <?php foreach ($product->customfieldsSorted as $field){ // если поля есть, просматриваем все в поисках поля ярлыка if($field->layout_pos == 'product-label'){ // ищем поля ярлыка через позицию ?> <div class="category-product-label"><?php echo $field->display; //выводим ярлык ?> </div> <?php }}} ?>


Подскажите пожалуйста, как правильно сделать.
В категории все товары одинаковые, а один особенный. Повесить на него ярлычок-картинку для выделения.