Обсуждение One Page Checkout Component от Rupostel

поделитесь пожалуйста кто-нибудь версией под 3.8+, под минимум сообщений пожалуйста
Пожалуйста. Версия 2.0.346 Джумла 3.8.3 Вирт 3.2.2 Проверил, работает.
Скрытое содержимое доступно для зарегистрированных пользователей!
 
Здравствуйте. Подскажите, пожалуйста, как выводить полное название товара в корзине от One Page Checkout?
У нас установлен плагин "cartproduct" для страниц карточек товара, сейчас заказ товара берется из дочерних товаров, которые имеют вид «Парфюмированная вода 50 мл». А как выводить название дочернего товара + его родитель «Acqua di Parma Парфюмированная вода 50 мл»? Для просмотра ссылки Войди или Зарегистрируйся
 
как выводить полное название товара в корзине от One Page Checkout
Тут два варианта: логичный и, если первый не подходит. В любом случае придется вносить изменения в шаблон.
Вариант 1. Переименуйте дочерние товары так, чтобы в заголовке было все, что вам надо. Если в карточке товара это будет мозолить глаза, то в шаблоне virtuemart можно помощью str_replace вычесть из полного названия дочернего товара название родительского.
Вариант 2 (более сложный). В шаблоне onepage, в basket.html.php $product['info']->product_parent_id возвращает id родительского товара, по которому вам надо получить его имя и подставить в этот же шаблон перед $product['product_name'].
 
Тут два варианта: логичный и, если первый не подходит. В любом случае придется вносить изменения в шаблон.
Вариант 1. Переименуйте дочерние товары так, чтобы в заголовке было все, что вам надо. Если в карточке товара это будет мозолить глаза, то в шаблоне virtuemart можно помощью str_replace вычесть из полного названия дочернего товара название родительского.
Вариант 2 (более сложный). В шаблоне onepage, в basket.html.php $product['info']->product_parent_id возвращает id родительского товара, по которому вам надо получить его имя и подставить в этот же шаблон перед $product['product_name'].
Только второй вариант.
добавил в шаблон <?php echo $product['info']->product_parent_id . $product['product_name'] . $product['product_attributes'] ?>
у меня получилось в корзине название 467Для просмотра ссылки Войди или Зарегистрируйся
что делать?
 
у меня получилось в корзине название 467
467 это id родительского товара, верно?
теперь нужно по этому id найти имя товара. OPC его нам не заготовил, так что придется делать запросом, что-то типа
PHP:
$db = JFactory::getDBO();
$query = 'SELECT #__virtuemart_products_ru_ru.product_name FROM #__virtuemart_products_ru_ru WHERE #__virtuemart_products_ru_ru.virtuemart_product_id = '.$product['info']->product_parent_id;
$db->setQuery($query);
$product_parent_name = $db->loadResult();
 
[Нужен Хак] Всем привет. Есть у кого полезная информация (Joomla! 2.5.28 + VirtueMart 2.6.22 + RuposTel One Page (2.0.307.220416))

Как на странице оформления заказа реализовать кнопки "+" и "-" на против каждого товара - чтоб цена автоматически пересчитывалась в корзине по AJAX
AJAX в корзине работает только при смене области (Штата) - Он подцепляет условия доставки + по JS пересчитывает конечные суммы

Можно ли как то навесить кнопки "+" и "-" и чтоб AJAX подключался и корзину всю пересчитывал

В помощь будут статьи, личный опыт, ссылки с примера чего то подобного уже реализованного (Пусть даже на других версиях)

upload_2018-4-2_17-48-12.png
 
обновление корзины при смене количества.
ткнули в поле, поменяли кол-во, ткнули снаружи - пересчиталась корзина
update_form_ajax.tpl.php
PHP:
<input type="text" title="<?php echo OPCLang::_('COM_VIRTUEMART_CART_UPDATE'); ?>"
    class="inputbox_update form-control" size="3"
    name="quantity"
    id="quantity_for_<?php echo md5($product->cart_item_id); ?>"
    value="<?php echo $product->quantity; ?>"
    onChange="return Onepage.updateProduct(this);"
    rel="<?php echo $product->cart_item_id.'|'.md5($product->cart_item_id);?>"
    />
+ и - поставить рядом уж как-нибудь сами

UPD:
вот что-то такое попробуйте
Для просмотра ссылки Войди или Зарегистрируйся
 
Благодарю пользователя d0ublezer0 за способ решения (Опишу на примере RuposTel One Page (2.0.307.220416) + Тема Flatastic).

/components/com_onepage/themes/flatastic/overrides/update_form.tpl.php // Вешаем на input события
/components/com_onepage/themes/flatastic/overrides/basket.html.php // Вешаем скрипты обработки "+" и "-"

// update_form.tpl.php // Выводит строку товара в корзине
PHP:
<button type="button" class="opc_basket__bt-quant opc_basket__bt-sub">-</button>
                <input type="text" title="<?php echo OPCLang::_('COM_VIRTUEMART_CART_UPDATE'); ?>"
                    class="inputbox_update quantity-input form-control" size="3"
                    name="quantity"
                    id="quantity_for_<?php echo md5($product->cart_item_id); ?>"
                    value="<?php echo $product->quantity; ?>"
                    onChange="return checkQuantityProduct(this);"
                    rel="<?php echo $product->cart_item_id.'|'.md5($product->cart_item_id);?>"
                />
                <button type="button" class="opc_basket__bt-quant opc_basket__bt-add">+</button>
                <?php
                    if(count($this->cart->products) == 1) {
                ?>
                    <a class="opc_basket__a-del" title="<?php echo OPCLang::_('COM_VIRTUEMART_CART_DELETE');?>" href="<?php echo JRoute::_('index.php?option=com_virtuemart&view=cart&task=delete&cart_virtuemart_product_id='.$product->cart_item_id, true, $useSSL  ); ?>"><i class="opc_basket__bt-del-i">x</i></a>
                <?php
                    } else {
                ?>
                    <button title="<?php echo  OPCLang::_('COM_VIRTUEMART_CART_DELETE'); ?>" type="button" name="delete" value="" class="opc_basket__bt-del" onClick="delQuantityProduct(document.getElementById('quantity_for_<?php echo md5($product->cart_item_id); ?>'));"><i class="opc_basket__bt-del-i">x</i></button>
                <?php
                    }
                ?>

// basket.html.php // Выводи весь товар в корзине ч/з foreach (После вывода всех товаров пишем скрипт)
HTML:
<script>
function checkQuantityProduct(input) {
    if(input.value == 0 || input.value == '') {
        input.value = 1;
        Onepage.updateProduct(input);
    } else {
        Onepage.updateProduct(input);
    }
};
function delQuantityProduct(input) {
    input.value = 0;
    Onepage.updateProduct(input);
}
jQuery( function($) {
    // 2018.04.02   Хак Плюс и Минус в корзине
    $('.opc_basket__bt-sub').click(function () {
        if($(this).next().val() == 1) {
            null;
        } else if ($(this).next().val() > 1) {
            $(this).next().val(+$(this).next().val() - 1);
        };
        $(this).next().change();
    });
    $('.opc_basket__bt-add').click(function () {
        $(this).prev().val(+$(this).prev().val() + 1);
        $(this).prev().change();
    });
});
</script>
upload_2018-4-2_21-43-47.png
 
Я бы еще добавил таймаут на пересчёт с блокировкой корзины, иначе беспорядочные тычки вам создадут реактивную нагрузку и понизят отзывчивость. Например, посетителю нужно заказать 15 экземпляров каждой позиции - каждый клик будет честно пересчитывать корзину целиком. А в реальности нужно это делать, когда посетитель "успокоился".

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

Уже получил NaN )) сейчас буду фиксить. Благодарю

Пофиксил NaN + Блокировка функции пересчета на 700
Код:
<script>
var timer;
console.log(timer);
function checkQuantityProduct(input) {
    timer = window.setTimeout(function() {
        input.value = Number(input.value);
        if(input.value == 0 || input.value == '' || isNaN(input.value)) {
            input.value = 1;
            Onepage.updateProduct(input);
        } else {
            Onepage.updateProduct(input);
        }
    }, 700);
};
function cartClearTimeout(){
    window.clearTimeout(timer);
}
function delQuantityProduct(input) {
    input.value = 0;
    Onepage.updateProduct(input);
}
jQuery( function($) {
    // 2018.04.02   Хак Плюс и Минус в корзине
    $('.opc_basket__bt-sub').click(function () {
        cartClearTimeout();
        if($(this).next().val() == 1) {
            null;
        } else if ($(this).next().val() > 1) {
            $(this).next().val(+$(this).next().val() - 1);
        };
        $(this).next().change();
    });
    $('.opc_basket__bt-add').click(function () {
        cartClearTimeout();
        $(this).prev().val(+$(this).prev().val() + 1);
        $(this).prev().change();
    });
});
</script>
 
Последнее редактирование:
Назад
Сверху