#Заказы и личный кабинет

Если в инструкции указана необходимость создания файла, а в вашем шаблоне уже присутствует такой файл, то файл дополняется по правилам составления Дизайн-хуков. Для быстрого включения/выключения дизайн-хука нужно поставить знак решетки # перед его определением в config.ini, пример:

  • #phpshopprice="php/hook/price.hook.php"; - выключен
  • phpshopprice="php/hook/price.hook.php"; - включен

или поставить знак решетки # в массиве перехвата $addHandler в файле хука, пример:

  • $addHandler=array(''''#'''product'=>'product_pricecore_hook'); - выключен
  • $addHandler=array('product'=>'product_pricecore_hook'); - включен

Ключ секции [hook] должен быть уникален, если требуется создать новый хук на тот же класс(ключ), то требуется объединить хуки по правилам составления дизайн-хуков.

#Личный кабинет пользователя

#Изменение доступных файлов отчетных документов

В лично кабинете пользователя при активном режиме синхронизации с 1С доступна загрузка документов (счетов и счет-фактур) в трех разных форматах HTML, XLS и DOC. Требуется оставить лишь расширение XLS.

  1. Создать файл /phpshop/templates/имя шаблона/php/hook/userorderdoclink.hook.php с содержанием
<?
function userorderdoclink_mod_supplierdate_hook($obj, $value) {

    if (is_array($value['row'])) {

        // Описание столбцов
        $dis = $obj->caption(__('Документооборот'), __('Дата'), __('Загрузка'));
        $n = $value['val']['id'];
        foreach ($value['row'] as $row) {

            // Счета
            if ($obj->PHPShopSystem->ifValue('1c_load_accounts')) {
                $link_xls = '../files/docsSave.php?orderId=' . $n . '&list=accounts&tip=xls&datas=' . $row['datas'];
                if (file_get_contents($link_xls)){
                $dis.=$obj->tr(PHPShopText::a($link_xls, __('Счет на оплату'), false, false, false, '_blank', 'b'), PHPShopDate::dataV($row['datas']), PHPShopText::a($link_xls, __('XLS'), __('ФорматExcel'), false, false, '_blank', 'b') 
                );
                }
            }

            // Счета-фактуры
            if (!empty($row['datas_f']) and $obj->PHPShopSystem->ifValue('1c_load_invoice')) {
                $link_xls = '../files/docsSave.php?orderId=' . $n . '&list=invoice&tip=xls&datas=' . $row['datas'];
                if (file_get_contents($link_xls)){
                $dis.=$obj->tr(PHPShopText::a($link_xls, __('Счет-фактура'), false, false, false, '_blank', 'b'), PHPShopDate::dataV($row['datas_f']), PHPShopText::a($link_xls, __('XLS'), __('Формат Excel'), false, false, '_blank', 'b') );
                }
            }
        }

        return $dis;

    }

}

$addHandler = array
    (
    'userorderdoclink' => 'userorderdoclink_mod_supplierdate_hook'
);
  1. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
[hook]
userorderdoclink="php/hook/userorderdoclink.hook.php";

#Приветствие

Вывести приветственное сообщение после авторизации пользователя.

  1. Создать файл /phpshop/templates/имя шаблона/php/hook/autoload.hook.php с содержанием
<?
// Пример вывода дополнительного HTML кода для авторизованных пользователей
if (!empty($_SESSION['UsersId'])){
$disp='<Добро пожаловать, '.$_SESSION['UserLogin'].'!';
PHPShopParser::set('welcome',$disp);
}
  1. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
[autoload]
welcome="php/element/autoload.hook.php";
  1. Вставить переменную @welcome@ в нужное место шаблона.

#Закрыть доступ на сайт

Требуется закрыть доступ обычным пользователям на внешнюю часть сайта на время его разработки. Разрешить отображение только авторизованному администратору через панель управления.

  1. Создать файл /phpshop/templates/имя шаблона/php/element/lock.inc.php с содержанием
<?
// Заглушка на время заполнения сайта
if(empty($_SESSION['logPHPSHOP']))
    exit('Сайт заполняется...');
  1. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
[autoload]
lock="php/element/lock.inc.php";

Закрыть временно сайт можно так же с помощью модуля Замок.

#Заказ

#Изменение вывода доставок

Магазин имеет всего 3 доставки. Нужно сделать выбор доставок через радио-переключатели для облегчения выбора покупателям.

  1. Создать файл /phpshop/templates/имя шаблона/php/hook/order.hook.php с содержанием
<?
/**
 * Вывод доставок через переключатели
 */
function delivery_hook($obj){
    $PHPShopDeliveryArray = new PHPShopDeliveryArray();
    $DeliveryArray = $PHPShopDeliveryArray->getArray();

    $disp=null;
    if(is_array($DeliveryArray))
        foreach($DeliveryArray as $key=>$row)
            $disp.=PHPShopText::setInput('radio', 'dostavka_metod', $row['id'],false,false,'document.getElementById('d').value='.$key.';document.getElementById('makeyourchoise').value='DONE'',false,false,$row['city']);

    $disp.=PHPShopText::setInput('hidden', 'makeyourchoise', '');
    $obj->set('orderDelivery',$disp);        
    return true;
}

$addHandler=array
        (
             'delivery'=>'delivery_hook'

);
  1. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
[hook]
phpshoporder="php/hook/order.hook.php";

#Списывание товара со склада

Требуется автоматические списывать товар со склада сразу после создания нового заказа пользователем

  1. Создать файл /phpshop/templates/имя шаблона/php/hook/done.hook.php с содержанием
 <?
 /**
 * Списываем количество со склада
 */
function cancellation_from_warehouse($obj, $data, $rout) {

    $carts = $obj->PHPShopCart->getArray();
    foreach ($carts as $cart) {
        $PHPShopOrm = new PHPShopOrm($GLOBALS['SysValue']['base']['products']);
        $row = $PHPShopOrm->select(array('items'), array('id' => '=' . intval($cart['id'])));
        if (is_array($row)) {
            $PHPShopOrm->clean();
            $items = $row['items'] - $cart['num'];
            $PHPShopOrm->update(array('items_new' => $items), array('id' => '=' . $cart['id']));
        }
    }
}

$addHandler=array (
    'sms' => 'cancellation_from_warehouse'
);
  1. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
[hook]
phpshopdone="php/hook/done.hook.php";