Еще раз огромное спасибо! Все отлично заработало!
Я вам очень признателен за подробное решение, так как, если честно, большую часть вашего кода я просто не понимаю, и самому довести его до ума в приемлемые сроки у меня шансов было мало. :)
Еще раз огромное спасибо! Все отлично заработало!
Я вам очень признателен за подробное решение, так как, если честно, большую часть вашего кода я просто не понимаю, и самому довести его до ума в приемлемые сроки у меня шансов было мало. :)
совсем ленитесь))
ошибка небольшая закралась, другое свойоство надо использовать
$aRelatedProductCustomFields = VmModel::getModel('customfields')->getproductCustomslist($field->custom_value);
ну и в цикле
<?php if(is_array($aRelatedProductCustomFields) && count($aRelatedProductCustomFields)) { ?>
//ставите вместо 4 id нужного вам кастомного поля
if($cf->virtuemart_custom_id == 4) { ?>
//выводите как вам нужно
<?php } ?>
<?php } ?>
Доброго дня, Артем.
Мне нужно в карточке товара выводить значение определенного дополнительного поля для сопутствующих товаров. Стандартно там выводятся только картинка и название сопутствующего товара, которые являются ссылкой на него.
Хотелось бы выводить еще и нужное конкретное доп. поле и чтобы оно тоже было ссылкой, как и картинка и название.
В ПХП я почти не понимаю. Попробовал прикрутить ваш хелпер к файлу components\com_virtuemart\views\productdetails\tmpl\default_relatedproducts.php - здесь, как я понял, формируется список сопутствующих товаров, но не вышло, хелпер выдает ошибку (Invalid argument supplied for foreach())
Возможно, требуемые изменения совсем просты, но я в этом не понимаю. Можете помочь?
Здравствуйте.
какая у вас версия виртуемарта?
и полностью ошибку можете указать? с номером строки)
появилось время разобраться с вашим вопросом, поставил вашу версию виртуемарт.
1. я вам не рекумендую делать изменения здесь components\com_virtuemart\views\productdetails\tmpl\default_relatedproducts.php, потому что при обновлении ваши правки потеряются
Лучше скопируйте это файл в папку вашего темплейта по пути /templates/[TEMPLATE NAME]/html/com_virtuemart/productdetails/default_relatedproducts.php
если такого пути не существует в вашей файловой системе, то смело создавайте. Таким образом вы создадите вашу собственную версию темплейта и не потеряете ее при обновлении виртуемарта. в дальнейшем будем работать с ней, потому что будет грузиться именно она. Но не стоит удалять components\com_virtuemart\views\productdetails\tmpl\default_relatedproducts.php, просто скопируйте в новое место, указанное выше.
Дальше вам дам просто пример, возможно, нужно будет его модифицировать под ваши нужды, я лишь вывожу список кастомных полей у сопутствующего продукта (Related product's custom fields)
Это код из вашего нового файла /templates/[TEMPLATE NAME]/html/com_virtuemart/productdetails/default_relatedproducts.php
<?php defined ( '_JEXEC' ) or die ( 'Restricted access' ); ?>
<div class="product-related-products">
<h4><?php echo JText::_('COM_VIRTUEMART_RELATED_PRODUCTS'); ?></h4>
<?php
foreach ($this->product->customfieldsRelatedProducts as $field)
{
$productModel = VmModel::getModel('customfields');
$aRelatedProductCustomFields = $productModel->getproductCustomslist($field->virtuemart_custom_id);
if(!empty($field->display)) { ?>
<div class="product-field product-field-type-<?php echo $field->field_type ?>">
<span class="product-field-display"><?php echo $field-&rt;display ?></span>
</div>
<?php } ?>
<?php if(is_array($aRelatedProductCustomFields) && count($aRelatedProductCustomFields)) { ?>
<div class="custom-fields">
<?php foreach($aRelatedProductCustomFields as $cf) { ?>
<span class="custom-field"><b><?=strtoupper($cf->custom_title)?>:</b> <?=$cf->custom_value?></span><br /><br />
<?php } ?>
</div>
<?php } ?>
<?php } ?>
</div>
Обратите внимание на добавленніе мной строки
$productModel = VmModel::getModel('customfields');
$aRelatedProductCustomFields = $productModel->getproductCustomslist($field->virtuemart_custom_id);
а также
<?php if(is_array($aRelatedProductCustomFields) && count($aRelatedProductCustomFields)) { ?>
<div class="custom-fields">
<?php foreach($aRelatedProductCustomFields as $cf) { ?>
<span class="custom-field"><b><?=strtoupper($cf->custom_title)?>:</b> <?=$cf->custom_value?></span&rt;<br /><br />
<?php } ?>
</div>
<?php } ?>
</p>
Ну а дальше уже под свои нужды и свой темплейт модифицируйте
Огромное спасибо за помощь!
К сожалению код у меня не работает как нужно. Код пытатется выводить все кастомные поля для сопутствующих товаров, при этом выводит их неверно - значения берутся из основного товара, а не из сопутствующих. Кроме того, есть какие-то лишние строки.
Вот картинка того что получается, для ясности:
Мне нужно не все поля, а только одно - с конкретнім ID.
Доброго дня, Артем.
Мне нужно в карточке товара выводить значение определенного дополнительного поля для сопутствующих товаров. Стандартно там выводятся только картинка и название сопутствующего товара, которые являются ссылкой на него.
Хотелось бы выводить еще и нужное конкретное доп. поле и чтобы оно тоже было ссылкой, как и картинка и название.
В ПХП я почти не понимаю. Попробовал прикрутить ваш хелпер к файлу components\com_virtuemart\views\productdetails\tmpl\default_relatedproducts.php - здесь, как я понял, формируется список сопутствующих товаров, но не вышло, хелпер выдает ошибку (Invalid argument supplied for foreach())
Возможно, требуемые изменения совсем просты, но я в этом не понимаю. Можете помочь?
Здравствуйте.
какая у вас версия виртуемарта?
и полностью ошибку можете указать? с номером строки)
появилось время разобраться с вашим вопросом, поставил вашу версию виртуемарт.
1. я вам не рекумендую делать изменения здесь components\com_virtuemart\views\productdetails\tmpl\default_relatedproducts.php, потому что при обновлении ваши правки потеряются
Лучше скопируйте это файл в папку вашего темплейта по пути /templates/[TEMPLATE NAME]/html/com_virtuemart/productdetails/default_relatedproducts.php
если такого пути не существует в вашей файловой системе, то смело создавайте. Таким образом вы создадите вашу собственную версию темплейта и не потеряете ее при обновлении виртуемарта. в дальнейшем будем работать с ней, потому что будет грузиться именно она. Но не стоит удалять components\com_virtuemart\views\productdetails\tmpl\default_relatedproducts.php, просто скопируйте в новое место, указанное выше.
Дальше вам дам просто пример, возможно, нужно будет его модифицировать под ваши нужды, я лишь вывожу список кастомных полей у сопутствующего продукта (Related product's custom fields)
Это код из вашего нового файла /templates/[TEMPLATE NAME]/html/com_virtuemart/productdetails/default_relatedproducts.php
<?php defined ( '_JEXEC' ) or die ( 'Restricted access' ); ?>
<div class="product-related-products">
<h4><?php echo JText::_('COM_VIRTUEMART_RELATED_PRODUCTS'); ?></h4>
<?php
foreach ($this->product->customfieldsRelatedProducts as $field)
{
$productModel = VmModel::getModel('customfields');
$aRelatedProductCustomFields = $productModel->getproductCustomslist($field->virtuemart_custom_id);
if(!empty($field->display)) { ?>
<div class="product-field product-field-type-<?php echo $field->field_type ?>">
<span class="product-field-display"><?php echo $field-&rt;display ?></span>
</div>
<?php } ?>
<?php if(is_array($aRelatedProductCustomFields) && count($aRelatedProductCustomFields)) { ?>
<div class="custom-fields">
<?php foreach($aRelatedProductCustomFields as $cf) { ?>
<span class="custom-field"><b><?=strtoupper($cf->custom_title)?>:</b> <?=$cf->custom_value?></span><br /><br />
<?php } ?>
</div>
<?php } ?>
<?php } ?>
</div>
Обратите внимание на добавленніе мной строки
$productModel = VmModel::getModel('customfields');
$aRelatedProductCustomFields = $productModel->getproductCustomslist($field->virtuemart_custom_id);
а также
<?php if(is_array($aRelatedProductCustomFields) && count($aRelatedProductCustomFields)) { ?>
<div class="custom-fields">
<?php foreach($aRelatedProductCustomFields as $cf) { ?>
<span class="custom-field"><b><?=strtoupper($cf->custom_title)?>:</b> <?=$cf->custom_value?></span&rt;<br /><br />
<?php } ?>
</div>
<?php } ?>
</p>
Ну а дальше уже под свои нужды и свой темплейт модифицируйте
Здравствуйте.
какая у вас версия виртуемарта?
и полностью ошибку можете указать? с номером строки)
версия 2.0.26d
полностью ошибка:
Warning: Invalid argument supplied for foreach() in R:\home\www.qqq.com\www\components\com_virtuemart\helpers\vmsmallhelper.php on line 16
Доброго дня, Артем.
Мне нужно в карточке товара выводить значение определенного дополнительного поля для сопутствующих товаров. Стандартно там выводятся только картинка и название сопутствующего товара, которые являются ссылкой на него.
Хотелось бы выводить еще и нужное конкретное доп. поле и чтобы оно тоже было ссылкой, как и картинка и название.
В ПХП я почти не понимаю. Попробовал прикрутить ваш хелпер к файлу components\com_virtuemart\views\productdetails\tmpl\default_relatedproducts.php - здесь, как я понял, формируется список сопутствующих товаров, но не вышло, хелпер выдает ошибку (Invalid argument supplied for foreach())
Возможно, требуемые изменения совсем просты, но я в этом не понимаю. Можете помочь?
Здравствуйте.
какая у вас версия виртуемарта?
и полностью ошибку можете указать? с номером строки)
Доброго дня, Артем.
Мне нужно в карточке товара выводить значение определенного дополнительного поля для сопутствующих товаров. Стандартно там выводятся только картинка и название сопутствующего товара, которые являются ссылкой на него.
Хотелось бы выводить еще и нужное конкретное доп. поле и чтобы оно тоже было ссылкой, как и картинка и название.
В ПХП я почти не понимаю. Попробовал прикрутить ваш хелпер к файлу components\com_virtuemart\views\productdetails\tmpl\default_relatedproducts.php - здесь, как я понял, формируется список сопутствующих товаров, но не вышло, хелпер выдает ошибку (Invalid argument supplied for foreach())
Возможно, требуемые изменения совсем просты, но я в этом не понимаю. Можете помочь?
Я начинающий.Не могли бы подробнее обьяснить,что где ставлять.
Например: куда вставлять код из 3 пунка, как его подключить
Зачем 4 пункт?Что нужно дописывать в этих строках.
И куда вставлять код из 5 кода.Буду очень признателен за подробное обьяснение.
пункт 3 вставляете в тот файл, который написан /templates/[template_name]/html/com_virtuemart/category/default.php
если такого файла нет, то скопируйте его из /components/com_virtuemart/views/category/tmpl/default.php
вставлять код из пункта 3 нужно в самое начало файла. Скорее всего, эта строка там уже будет
defined('_JEXEC') or die('Restricted access');
поэтому прямо под ней нужно подключить хелпер
if(!class_exists("VmSmallHelper")) require(JPATH_VM_SITE.DS.'helpers'.DS.'vmsmallhelper.php');
пункт 4 вам просто помогает сориентироваться в коде, чтобы вы быстрее нашли, где начинается вывод продуктов. Ничего тут не надо дописывать
пункт 5 вставляете там, где вам нужно вывести значение поля. это уже зависит от вашего HTML шаблона
Я начинающий.Не могли бы подробнее обьяснить,что где ставлять.
Например: куда вставлять код из 3 пунка, как его подключить
Зачем 4 пункт?Что нужно дописывать в этих строках.
И куда вставлять код из 5 кода.Буду очень признателен за подробное обьяснение.
Спасибо, пригодилось, а к данному примеру дополнительно можно привязать "габариты/вес?"
Не совсем уверен, что я вас правильно понял, но я делал вот так
echo VmSmallHelper::getPriceItem($this->product);
5. также нужно у продукта указать, какая единица измерения используется для цены, например, чтобы указать, что ваша цена 5 долларов - это цена за 10 деревянных ящиков, вам нужно перевти в админке в продукт - Габариты/ Вес - Единица товара. и там указать единицу. Например, у меня для "чашка с блюдцем" был плевдоним cb, то есть в Единица товара я ввел cb, а в язывовых константах (см. пункт 2 данного комента) добавить константу для cb. В VmSmallHelper посмтрите метод getUnitOptions()
6. То есть хепер берет значение из "Единица товара", например, cb. Затем метод getUnitOptions() определяет, какая константа сообветствует данной единице измерения, и уже в методе getPriceItem() тект добавляется к цифре.
например, здесь http://samovar.kharkov.ua/katalog-chaya/pu-er/pu-erh-detail.html
Virtuemart 2.0.2 - настраиваемые поля на странице категории
← Назад к статьеСтатья в виде пошаговой инструкции, без лирческих отступлений:)
...