Virtuemart custom fields php

Настраиваемые поля virtuemart 3: строка (часть 1)

Настраиваемые поля значительно расширяют стандартные возможности virtuemart.

С их помощью можно добавить к товарам различные свойства, настроить учет остатков, организовать фильтрацию, вывести любую дополнительную информацию о товаре.

В этой статье рассмотрим настраиваемое поле с типом Строка, а так же на конкретных примерах покажем как его можно использовать.

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

Создание настраиваемого поля и вывод его в товаре

Прежде чем переходить к конкретным примерам, рассмотрим общие вопросы.

Создать новое настраиваемое поле можно в Virtuemart > Товары > Настраиваемые поля.

новое-настраиваемое-поле

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

Вывести поле в товаре можно выбрав его из списка во вкладке Настраиваемые поля.

добавление-поля-к-товару

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

Вывод произвольного атрибута

Этот способ подойдет для вывода любой дополнительной информации о товаре, например, сроках доставки, гарантии и т.д.

Создадим новое настраиваемое поле с настройки, как на скриншоте.

настройки поля1

Выбран тип поля, указан заголовок и позиция вывода поля (подробнее про настройку позиций). Остальные настройки оставлены по умолчанию.

При добавлении поля к товару в окне вручную укажем нужный текст.

заполение поля1

В итоге в карточке товара получим следующее.

произвольный атрибут в карточке товара

Вывод произвольного атрибута из готового списка

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

Для этого в настройках в поле Значение по умолчанию через точку с запятой укажем несколько вариантов и в поле Список выберем параметр Да.

заполение поля2

После этого в товаре можно будет выбрать атрибут из готового списка.

выбор атрибута в товаре

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

Добавление атрибута в корзину

Чтобы при добавлении товара в корзину вместе с ним добавился атрибут, который никак не влияет на конечную стоимость товара, в настройках поля активируем первый параметр Атрибут корзины.

атрибут корзины1

В итоге при оформлении заказа в корзине отобразится так же атрибут товара.

Читайте также:  Алгоритм случайных чисел java

атрибут товара в корзине

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

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

Создадим новое настраиваемое поле со следующими настройками.

настраиваемое поле2

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

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

настраиваемое поле с ценой

Важная особенность. В поле цена указывается не абсолютное значение, а разница между базовой и конечной ценой. Т.е. ноутбук из примера с жестким диском на 256 Gb будет на 1000р. дороже, чем базовая версия на 128 Gb.

Допустим так же знак «-» перед ценой для задания скидки.

Для добавления в админ панели параметров из готового списка изменим настройки настраиваемого поля на следующие.

newfield

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

select-field

В карточке товара получим следующее.

поля в карточке товара

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

При задании для параметра нулевой цены выводится надпись Без дополнительного сбора. Удалить ее можно в файле /language/ru-RU/ru-RU.com_virtuemart.ini в строке

Рассмотрим оставшиеся настройки.

Текст, введенный в настройках в поле Описание, выводится сразу после настраиваемого поля на странице товара.

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

всплывающая подсказка

Опция Add automatically an empty option позволяет автоматически добавить пустую строку для выпадающего списка параметров в карточке товара.

Опция as radiolist позволяет вместо выпадающего списка вывести параметры с радио кнопками.

radio кнопки

Чтобы скрыть стоимость дополнительной опции в файле /administrator/components/com_virtuemart/models/customfields.php закомментируйте

Кнопка Купить с внешней ссылкой

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

В следующей статье рассмотрим поле с типом Изображение.

Похожие статьи :

282 комментария

Сергей

День добрый, после прочтения статьи появился вопрос о том как можно применить «поле гарантия» ко всем товарам? Есть CSVI PRO.

stylus83

У меня есть размеры разные, у каждого размера своя цена, можно ли как-то к каждому размеру добавлять свой артикул?

admin

Михаил

Подскажите пожалуйста, при выборе типа поля строка с доп. оплатой за св-ва, т.е. размер: 1.50 +0 1.55 +20 к примеру, если создавать через админку то все в порядке выставляется сортировка значений в нужном порядке, если загружать через CSVI или Exel like manager, в карточке товара они появляются в разнобой, подскажите, как мне соблюсти иерархию 1,50 1,55, 1,60 и т.д. Так бы делал ручками в админке, но это очень не удобно т.к. свойств таких 40 а товаров в которых они однотипные примерно 1000 шт. Подскажите пожалуйста как решить данную задачу, заранее спасибо!

Читайте также:  How to Check if element has class in JavaScript

admin

Думаю, что свойства отображаются в том порядке, в котором загружаются на сайт.
Попробуйте отсортировать их в exel файле и заново загрузить.

Михаил

Именно так и делал, не помогло! Но что самое интересно, после обновления страницы они меняются выбранные по умолчанию!

admin

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

Михаил

Если кому интересно то я решил данную проблему, по крайней мере мне помогло!
В файле /administrator/components/com_virtuemart/models/customfields.php
Надо закомментировать две строки

admin

Рий

Здравствуйте!
В статье «Продажа товара разных размеров в virtuemart 2» вы описывали как отредактировать кусок кода, который отвечает за вывод настраиваемого поля «Атрибут корзины» так, чтобы список с размерами приобрел гораздо более понятный и привычный вид. Т.е. без + перед суммой, а сразу с отображением полной стоимости для каждого размера.
Скажите пожалуйста, как это же проделать для VM3?
Строки кода в файле customfields.php для VM3 отличаются от VM2

Рий

Нашел такое решение:
в administrator\components\com_virtuemart\helpers\calculationh.php
находим строчку

Теперь VM будет отображать не разницу между базовой и конечной ценой, а именно абсолютное значение.
Т.е., при добавлении полей с размерами указываем:
В первом, для 128 ГБ указываем — 39990 руб
Во втором, для 256 ГБ укзываем — 40990 руб
И так далее. Осталось только убрать/заменить знак «+» перед стоимостью.
Сделать это можно в файле customfields.php
Ищем строчки:

$price = strip_tags ( $currency -> priceDisplay ( $calculator -> calculateCustomPriceWithTax ( $customPrice ) ) ) ;

Вместо знака «+» вписываем свое значение. Я например вписал » — » В итоге, получаем отображение вида:
128 Gb — 39990 руб
256 Gb — 49900 руб На мой взгляд так намного удобней.
При добавлении товаров с несколькими размерами нет необходимости производить арифметические действия — сразу вписываем цены из прайса.
Да и для клиентов такое отображение будет намного понятней.

admin

стас

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

Татьяна

Татьяна

сама нашла) для плагина customfieldsforall убрать плюс — plugins/vmcustom/customfieldsforall/customfieldsforall/tmpl
button.php (или другой смотря что выбрано)
if($custom_price>=0)$op=’+’;

admin

vmven

Сделать это можно в файле customfields.php
Ищем строчки: static function _getCustomPrice($customPrice, $currency, $calculator) if ((float)$customPrice) $price = strip_tags ($currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($customPrice)));
if ($customPrice >0) $price =»+».$price;
>
> нет такого кода в файле. )

admin

vmven

admin

spro1

$price = strip_tags ( $currency -> priceDisplay ( $calculator -> calculateCustomPriceWithTax ( $customPrice ) ) ) ;

Мне надо было оставить только значение без цены
например вместо:
128 Gb — 39990 руб
256 Gb — 49900 руб
получить:
128 Gb
256 Gb
Для этого в файле /templates/мой шаблон/html/com_virtuemart/sublayouts/customfield.php
закомментировал строку

Читайте также:  Live at java jazz

$price = VirtueMartModelCustomfields:: renderCustomfieldPrice ( $productCustom , $product , $calculator ) ;

admin

Попробуйте в файле /administrator/components/com_virtuemart/models/customfields.php закомментировать

admin

Для замены символа ‘+’ в vm 3.6.8 и выше в файле /administrator/components/com_virtuemart/models/customfields.php внутри метода renderCustomfieldPrice перед

Рий

Здравствуйте!
Когда я выбираю опцию as radiolist для размеров, в карточке товара радио кнопки отображаются со смещением в лево (margin-left: -20px;)
Подскажите, где это исправить?

admin

BHy4eK

admin

Рий

Здравствуйте!
Скажите пожалуйста, как сделать чтобы заданные параметры были обязательными и без их выбора, товар нельзя было добавить в корзину?
При этом, если покупатель их не выбрал и нажал «Добавить в корзину», выводилась красным цветом соответствующая надпись? К примеру:
Пожалуйста выберите размер!

Человек

admin

Можно сделать так, чтобы по умолчанию уже был выбран первый вариант.
Например, как для радиокнопок с изображениями
https://virtuemart.su/custom-fields-virtuemart-3-part-2/#comment-29217

DaN

Добрый день.
Подскажите как поменять порядок отображения доп. полей?
сейчас выводится:
в
а
б
нужно:
а
б
в

admin

DarkBars

А можно ли сделать такую системную замену, чтобы не перелопачивать 100 товаров, изменяя порядок параметров в каждом отдельном товаре?

admin

DarkBars

Нашел решение через phphmyadmin. (Перед тем как делать обязательно делайте дамп БД или на тестовой БД). 1. Как предлагал товарищ 310 в БД через phpmyadmin в таблице virtuemart_customs поменять virtuemart_customs_id в нужном порядке.
* Это изменит соответствие id названию и настройкам поля, но значения полей останутся прежними. 2. Затем производим аналогичную смену поля virtuemart_customs_id в таблице virtuemart_product_custom_plg_param_values.
* Это изменит привязку значений поля, чтобы они соответствовали измененным id.
**Если значений много, то можно использовать SQL запрос UPDATE cfpn8_virtuemart_product_custom_plg_param_values SET virtuemart_custom_id =101 WHERE virtuemart_custom_id =1;
UPDATE cfpn8_virtuemart_product_custom_plg_param_values SET virtuemart_custom_id =1 WHERE virtuemart_custom_id =2;
UPDATE cfpn8_virtuemart_product_custom_plg_param_values SET virtuemart_custom_id =2 WHERE virtuemart_custom_id =101; где 1 и 2 изменяемые id, а 101 — неиспользуемый id, для буфера (чтобы после первой замены все значения не смешались). 3. Далее еще одна аналогичная замена поля virtuemart_customs_id в таблице virtuemart_product_custom_plg_param_ref.
* Это поправит съехавшие значения в параметрах самих товаров
** Здесь также можно воспользоваться SQL запросом указанным выше, только сменив имя таблицы.

admin

310

DarkBars

Попробовал как вы предложили, в итоге заменились только названия. То есть было первое поле «Ток» и второе поле «Напряжение», и до замены «Ток — 1А; Напряжение 12В» после замены id в phpmyadmin получилось, что написано «Напряжение 1А; Ток — 12В»

Alex21021

Коллеги, а можно ли совсем убрать отображаемые дополнительные цены? Чтобы происходила замена только в основном поле, а в выпадающем меню-только характеристика: в Вашем примере это 128 и 256 Гб?

admin

В конец файла /components/com_virtuemart/views/productdetails/tmpl/default.php (либо в папке с шаблоном /templates/имя_шаблона/html/com_virtuemart/productdetails/default.php) добавьте

Источник

Оцените статью