пятница, 11 декабря 2020 г.

Вывод способа доставки/оплаты в VirtueMart с Rupostel OPC для определенного источника перехода на сайт

Корректный способ (без хаков) решения задачи: если посетитель зашёл на наш сайт из определённого источника (например, из Яндекс Маркета) (в ссылке на товар присутствует параметр, например, utm_source=ymarket), тогда надо скрыть в Корзине ненужные для этого случая Способы оплаты и доставки; при этом используется Joomla 3.9 + VirtueMart 3 + Rupostel One Page Checkout.

1. Сохранить источник перехода в сессию

В своём системном плагинчке на событии onAfterInitialise() запоминаем источник в сессии:


// фиксируем источник перехода из UTM метки
$input = $app->input;
$cmd_utm_source = $input->get('utm_source', '');
$cmd_utm_term = $input->get('utm_term', '');
if (!empty($cmd_utm_source) || !empty($cmd_utm_term)) {
$session = JFactory::getSession();
$session->set('utm_source', $cmd_utm_source, 'utm');
$session->set('utm_term', $cmd_utm_term, 'utm');
}

2. Если в сессии интересующий источник - не выводим способы доставки/оплаты

Правим Тему OPC (желательно, чтобы наша тема была Копией одной из стандартных).

Файл /components/com_onepage/themes/название_темы/overrides/list_shipping_methods.tpl.php


<?php
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );

// alexey@gnevyshev.ru
$session = JFactory::getSession();
$utm_source = $session->get('utm_source', '', 'utm');
$uri = JUri::getInstance();
$host = $uri->getHost();
if ($utm_source == 'ymarket' && stripos($host, 'domain_here') !== false) {
foreach ($shipping as $k => $ship_item_html) {
if (
stripos($ship_item_html, 'id="opc_ship_wrap_2"') !== false
|| stripos($ship_item_html, 'id="opc_ship_wrap_3"') !== false
) {
unset($shipping[$k]);
}
}
}
// $text = date('H:i:s').' Test 4'.PHP_EOL;
// $text .= print_r($shipping, true).PHP_EOL.PHP_EOL;
// file_put_contents(__DIR__.'/list_shipping_methods_test_log.txt', $text, FILE_APPEND);

$counter_payment = 1;
foreach ($shipping as $html)
{
echo '<div class="pay_box payment'.$counter_payment.'" style="clear: both;"><br />';
echo $html;
echo '</div>';
$counter_payment++;
}

 

Файл /components/com_onepage/themes/название_темы/overrides/list_payment_methods.tpl.php


<?php
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );

// alexey@gnevyshev.ru
$session = JFactory::getSession();
$utm_source = $session->get('utm_source', '', 'utm');
$uri = JUri::getInstance();
$host = $uri->getHost();
if ($utm_source == 'ymarket' && stripos($host, 'domain_here') !== false) {
foreach ($payments as $k => $pay_item_html) {
if (stripos($pay_item_html, 'id="opc_payment_wrap_1"') === false) {
unset($payments[$k]);
}
}
}
// $text = date('H:i:s').' Test 4'.PHP_EOL;
// $text .= print_r($payments, true).PHP_EOL.PHP_EOL;
// file_put_contents(__DIR__.'/list_payment_methods_test_log.txt', $text, FILE_APPEND);

$counter_payment = 1;
foreach ($payments as $html) {
echo '<div class="pay_box payment'.$counter_payment.'" style="clear: both;">';
echo '<br />';
echo $html;
echo '</div>';
$counter_payment++;
}

Комментариев нет:

Отправить комментарий