Редактирование шаблона ошибки perror.php

1 год 10 мес. назад #7556 от Andrey
Здравствуйте. Данная ошибка возникает если покупатель пытается купить товар, который уже не в наличии. То есть когда покупатель заходил на страницу товар еще был в наличии, а когда пытается купить - товар не в наличии (его уже кто-то купил).

Быстро воспроизвести такую ошибку можно так:
1. Заходим на страницу какого-то товара в магазине.
2. Админ-панель -> Страница редактирования товара -> вкладка Статус -> в поле В наличии ставим 0.
3. На странице товара нажимаем кнопку "Купить" -> всплывает окно с ошибкой.

Шаблон с ошибкой находится в папке /components/com_virtuemart/views/cart/tmpl/perror.php

Подскажите, пожалуйста, как в данном шаблоне вывести ссылку на товар и кнопку на страницу "Уведомить о поступлении товара" ?

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

1 год 10 мес. назад #7558 от Wedal
Andrey,

прежде всего скопируйте этот макет в
templates/имя_вашего_шаблона/html/com_virtuemart/cart/

Далее вносите изменения в этот скопированный файл.
Все доступные в этом макете данные можно посмотреть, если временно добавить в него код (в самом конце):
<pre><?php print_r($this); ?></pre>

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

1 год 10 мес. назад - 1 год 10 мес. назад #7560 от Andrey
Не совсем понял, что мне это дает?

Вот что получилось:
VirtueMartViewCart Object
(
    [_name:protected] => cart
    [_models:protected] => Array
        (
        )
    [_basePath:protected] => .../www/components/com_virtuemart
    [_defaultModel:protected] => 
    [_layout:protected] => perror
    [_layoutExt:protected] => php
    [_layoutTemplate:protected] => _
    [_path:protected] => Array
        (
            [template] => Array
                (
                    [0] => .../www/templates/jv_theme/html/com_virtuemart/cart/
                    [1] => .../www/components/com_virtuemart/views/cart/tmpl/
                )
            [helper] => Array
                (
                    [0] => .../www/components/com_virtuemart/helpers/
                )
        )

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

1 год 10 мес. назад #7562 от Wedal
Andrey, должно быть побольше информации, в макете есть переменные:

$this->continue_link
$this->errorMsg
$this->product_name

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

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

1 год 10 мес. назад #7565 от Andrey
Сделал все на тестовом сайте со стандартным шаблоном. Вот что получилось:
VirtueMartViewCart Object
(
    [_name:protected] => cart
    [_models:protected] => Array
        (
        )
 
    [_basePath:protected] => /home/u521245593/public_html/demo/components/com_virtuemart
    [_defaultModel:protected] => 
    [_layout:protected] => perror
    [_layoutExt:protected] => php
    [_layoutTemplate:protected] => _
    [_path:protected] => Array
        (
            [template] => Array
                (
                    [0] => /home/u521245593/public_html/demo/templates/vmbeez5/html/com_virtuemart/cart/
                    [1] => /home/u521245593/public_html/demo/components/com_virtuemart/views/cart/tmpl/
                )
 
            [helper] => Array
                (
                    [0] => /home/u521245593/public_html/demo/components/com_virtuemart/helpers/
                )
 
        )
 
    [_template:protected] => /home/u521245593/public_html/demo/templates/vmbeez5/html/com_virtuemart/cart/perror.php
    [_output:protected] => 
    [_escape:protected] => htmlspecialchars
    [_charset:protected] => UTF-8
    [_errors:protected] => Array
        (
        )
 
    [baseurl] => /demo
    [product] => 
    [products] => 
    [errorMsg] => Product out of stock
    [layoutName] => perror
    [cart] => VirtueMartCart Object
        (
            [products] => Array
                (
                )
 
            [_inCheckOut] => 
            [_dataValidated] => 
            [_blockConfirm] => 
            [_confirmDone] => 
            [_inConfirm] => 
            [_redirect] => 
            [_redirect_disabled] => 
            [_lastError] => Product out of stock
            [vendorId] => 1
            [lastVisitedCategoryId] => 0
            [virtuemart_shipmentmethod_id] => 0
            [virtuemart_paymentmethod_id] => 0
            [automaticSelectedShipment] => 
            [automaticSelectedPayment] => 
            [BT] => 0
            [ST] => 0
            [tosAccepted] => 
            [customer_comment] => 
            [couponCode] => 
            [order_language] => 
            [cartData] => 
            [lists] => 
            [order_number] => 
            [virtuemart_order_id] => 
            [customer_number] => nonreg_
            [pricesUnformatted] => 
            [pricesCurrency] => 
            [paymentCurrency] => 
            [STsameAsBT] => 1
            [productParentOrderable] => 1
            [_triesValidateCoupon] => Array
                (
                )
 
            [layout] => default
            [layoutPath] => 
            [useSSL] => 0
            [useXHTML] => 
        )
 
    [continue_link] => /demo/default-products
    [continue_link_html] => Continue Shopping
    [cart_link] => /demo/cart
)
Как мне это использовать?

Конпку "Уведомит о поступлении товара" пытался безуспешно вывести так:
<a href="<?php echo JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&layout=notify&virtuemart_product_id=' . $this->product->virtuemart_product_id); ?>" class="notify"><?php echo JText::_ ('COM_VIRTUEMART_CART_NOTIFY') ?></a>

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

1 год 10 мес. назад #7566 от Wedal
Andrey, видимо параметры товара в этот макет не передаются.

Придумал для вас не очень надежный, но, тем не менее, действующий способ получения ссылки на товара в этом макете:
echo isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
Так вы выводите URL предыдущей страницы, с которой пользователь попал в этот макет. Это, соответственно, либо карточка товара, если товар добавлялся в корзину из нее, либо категория товаров, если пользователь добавил товар в корзину из категории.

А вот как сделать кнопку "Уведомить о поступлении товара", без хаков я не знаю. Если в данный макет не передается ID товара, то вы не сможете передать этот ID его скрипту подписки на уведомление, без чего работать скрипт не будет. Можно, конечно исхитриться, вернув пользователя на страницу товара, передав при этом дополнительный параметр уведомления, считав его на странице товара и выполнив запуск всплывающего окошка подписки уведомления уже на странице товара, но это совсем костыль. Уж проще тогда внести хак, который будет передавать ID товара в макет perror.php.

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


Вверх