Категории

[FAQ] Часто задаваемые вопросы и ответы

Проблемы и решения

Ошибки и исправления

Общие вопросы

Расширения

Установка и обновление

Модули

Шаблоны

Локализация интерфейса

Коммерческие предложения

Учимся бизнесу

Бизнес книги

Поисковая оптимизация (SEO)

Магазины на ShopOS

Хостинг для ShopOS

Предложения и пожелания

Курилка

[хак] Запрещенные модули оплаты для товара при оформлении заказа

Если у товара выбрали модуль Киви, то при оформлении заказа этого модуля оплаты не будет.

Важно помнить!
Если покупатель положил в корзину товары у которых в итоге попадут под запрет все модули оплаты, то покупатель не сможет завершить заказ. Так как не будет вообще модулей оплаты в списке!



1 - Добавление поля в таблицу товара.

Выполнить запрос в PHPMyAdmin
ALTER TABLE os_products ADD products_pay varchar(255) NOT NULL default '';

Где os_ заменить на префикс который указывали в процессе установки Shopos

Либо, если нет возможности, то создать файл, например _a.php с таким содержимым
<?php
include 'includes/top.php';

os_db_query("ALTER TABLE ".DB_PREFIX."products ADD products_pay varchar(255) NOT NULL default '';");

И в строке браузера выполнить ваш-сайт/_a.php, после чего удалить этот файл.


2 - Добавление поля на страницу добавление\редактирования товара.
Открываем файл \admin\includes\modules\new_product.php
И ищем строку
<!--// Products URL begin //-->

Перед ней вставляем
          <tr>
            <td></td>
            <td></td>
            <td></td>
            <td valign="top" class="main">Запрещенные модули оплаты</td>
            <td valign="top" class="main">
                <?php
                // Модули оплаты в зависимости от товара

                // Если есть модули, которые запрещены
                $products_pay = array();
                if (!empty($pInfo->products_pay))
                {
                    // то формируем массив
                    $products_pay = explode(',', $pInfo->products_pay);
                }

                // Подключаем класс модулей оплаты
                require (_CLASS.'payment.php');
                $payment_modules = new payment;
                $selection = $payment_modules->selection();

                // Список модулей
                $paymentModules = '';
                if (is_array($selection))
                {
                    foreach($selection AS $k => $v)
                    {
                        // если какой-то выбран, то выделяем
                        $selected = (in_array($v['id'], $products_pay) ? 'selected' : '');
                        $paymentModules .= '<option value="'.$v['id'].'" '.$selected.'>'.$v['module'].'</option>';
                    }
                }
                // Модули оплаты в зависимости от товара
                ?>
                <select size="8" name="products_pay[]" multiple>
                    <option value="">Нет</option>
                    <?php echo $paymentModules; ?>
                </select>
            </td>
          </tr>

Сохраняем (utf8 без бом! используем notepad++, если нет опыта правки файлов)
Больше нам этот файл не нужен.


3 - Сохранение изменений
Открываем файл \admin\includes\classes\categories.php
И ищем строку
$sql_data_array = array ('products_quantity' => os_db_prepare_input($products_data['products_quantity']),

Перед ней вставляем
        // Модули оплаты в зависимости от товара
        $products_pay = '';
        if (!empty($products_data['products_pay']) && is_array($products_data['products_pay']))
        {
            $products_pay = implode(',', $products_data['products_pay']);
        }
        // Модули оплаты в зависимости от товара


Ищем строку
'yml_cbid' => os_db_prepare_input($products_data['yml_cbid']),

После нее вставляем
'products_pay' => os_db_prepare_input($products_pay),

Сохраняем.
Больше нам этот файл не нужен.


4 - Изменения на странице выбора оплаты.
Открываем файл \checkout_payment.php
Ищем строку
$selection = $payment_modules->selection();

Выше или ниже, не важно, вставляем
    // Модули оплаты в зависимости от товара
    $cpids = array();
    foreach ($_SESSION['cart']->get_products() AS $pids)
    {
        $cpids[] = $pids['id'];
    }
    $paymentDisabled = array();
    $pProductsQuery = os_db_query("SELECT products_id, products_pay FROM ".DB_PREFIX."products WHERE products_id IN (".implode(',', $cpids).")");
    if (os_db_num_rows($pProductsQuery) > 0)
    {
        while($pd = os_db_fetch_array($pProductsQuery))
        {
            if (!empty($pd['products_pay']))
            {
                $aModules = explode(',', $pd['products_pay']);
                foreach ($aModules AS $mod)
                {
                    $paymentDisabled[] = $mod;
                }
            }
        }
    }
    // Модули оплаты в зависимости от товара

Ищем код
            if (($selection['id'] == $payment) || ($n == 1)) {
                $selection['checked'] = 1;
            }
Ниже вставляем
            // Модули оплаты в зависимости от товара
            if (!empty($paymentDisabled) && in_array($selection['id'], $paymentDisabled)) {
                $selection['disabled'] = 1;
            }
            // Модули оплаты в зависимости от товара
Сохраняем.
Больше нам этот файл не нужен.

Теперь идем в файл шаблона \themes\<шаблон>\module\checkout_payment_block.html
Ищем код
{foreach name=aussen item=module_data from=$module_content}

Ниже вставляем
{if !$module_data.disabled}

Ищем код самый нижний(!)
{/foreach}

Выше вставляем
{/if}


Все.


Вы умеете читать мысли !!!! :)


I have never read anything that contains this bad before.


Источник



Copyright ShopOS