Re: Изменение цены товара в магазине в зависимости от свойств
УРА!!!!!!!!!!!! получилось
задача решена (блин пол дня искал переменную shop_items_catalog_price)
если кому интересно решение - пишите выложу здесь (показать действие пока не могу, т.к. сайт в разработке)
Re: Изменение цены товара в магазине в зависимости от свойств
частично решение подсмотрено на частично написано самостоятельно.
поехали:
выбор свойств товара влияющих на цену (в моем случае это размер и покрытие матраса) у меня реализовано выпадающими списками (как это сделать можно прочитать в теме , на второй странице описано как это сделать при помощи радио кнопок, а чуть ниже как реализовать при помощи выпадающего списка).
1. в xsl карточки товара (файл 56.xsl) для каждого выпадающего списка добавляем действие
3. в файл hostcms.js, который лежит в /templates/папка_с_тепмлейтом_который_вы_используете (у меня /templates/template1/ - дефолтный дизайн) дописываете пару функций, которые будут обрабатывать onchange наших списков
function callbackfunction_RefreshItemPrice(responseJS)
{
// Результат принят
sended_request = false;
if (typeof responseJS != 'undefined')
{
// Данные.
if (typeof responseJS.cart != 'undefined')
{
var little_cart = document.getElementById('tovar_price');
if (little_cart)
{
// Создадим скрытый SPAN для IE, в который поместим текст + скрипт.
// Если перед <script> не будет текста, нехороший IE не увидит SCRIPT
var span = document.createElement("span");
span.style.display = 'none';
span.innerHTML = "Stupid IE. " + responseJS.cart;
4. в код настроек(именно настроек!!!) типовой динамической страницы для корзины (или через админку или файл /hostcmsfiles/lib/lib_7/lib_config_7.php) дописываем код
/* AJAX изменение цены товара в зависимости от характеристик */
if (isset ($_GET['ajax_refresh_price_item_id']))
{
$property_array = array ();
$key_property_array = array ();
if (isset ($_GET) && count($_GET))
{
foreach ($_GET as $key => $val)
{
if (preg_match("'^property([\d]*?)$'si", $key, $preg))
{
$property_array[$preg[1]] = $val;
}
}
}
$param = array ();
$param['shop_id'] = $shop_id;
$param['item_id'] = to_int($_GET['ajax_refresh_price_item_id']);
$param['user_id'] = $site_users_id;
// Все модификации товара
$all_modifications = $shop->GetAllModificationItems($param['item_id'], array('shop_items_catalog_is_active' => 1));
if ($all_modifications)
{
foreach ($all_modifications as $key => $value)
{
$item_propertys_value = array ();
// Получаем значения всех доп.свойств
foreach ($property_array as $id => $v)
{
$list_property_value = $shop->GetValueItemProperty(to_int($value['shop_items_catalog_item_id']), $id);
// Получаем значение элемента списка
Re: Изменение цены товара в магазине в зависимости от свойств
aromat,
Спасибо, работает. Вот только все эти радости перестают работать, как только добавляешь больше двух модификаций. Даже если без изменения цены, а просто передать их в корзину. Не сталкивались?
Re: Изменение цены товара в магазине в зависимости от свойств
<xsl:when test="modifications/item/property[@xml_name='sila']/node() or modifications/item/property[@xml_name='radius']/node() or modifications/item/property[@xml_name='opt']/node() or modifications/item/property[@xml_name='os']/node() or modifications/item/property[@xml_name='color']/node()">
<!-- Ссылку на добавление в корзины выводим, если:
type = 0 - простой тип товара
type = 1 - электронный товар, при этом остаток на складе больше 0 или -1,
что означает неограниченное количество -->
<xsl:if test="type = 0 or (type = 1 and (eitem_count > 0 or eitem_count = -1))">
<p>
<input type="text" size="3" value="1" id="count_{@id}"/>
<a href="{/shop/path}cart/?action=add&item_id={@id}" onclick="return AddIntoCart('{/shop/path}', {@id}, document.getElementById('count_{@id}').value + '&property139=' + GetSelectValue('property139') + '&property133=' + GetSelectValue('property133') + '&property140=' + GetSelectValue('property140') + '&property141=' + GetSelectValue('property141') + '&property142=' + GetSelectValue('property142'))" style="text-decoration: none;"><img alt="В корзину" title="В корзину" src="/hostcmsfiles/images/cart.gif" style="margin: 0px 0px -4px 10px" />
</a>
</p>
</xsl:if>
Я вот так добавляю модификации в корзину, но так они не передаются, а когда передаю только первые две то они работают и передаются. Не могу понять в чем проблема.
Re: Изменение цены товара в магазине в зависимости от свойств
Я выше привел код добавления в корзину. Там прописаны пять параметров, которые мне нужны,но они не передаются, если оставить только два, то передаются.