Если в инструкции указана необходимость создания файла, а в вашем шаблоне уже присутствует такой файл, то файл дополняется по правилам составления Дизайн-хуков. Для быстрого включения/выключения дизайн-хука нужно поставить знак решетки # перед его определением в 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] должен быть уникален, если требуется создать новый хук на тот же класс(ключ), то требуется объединить хуки по правилам составления дизайн-хуков.

Поиск

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

В форме вывода результат поиска используется ячейка в один товар, нужно его поменять на вывод в 2 ячейки в длину.
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/search.hook.php с содержанием
    /**
     * Изменение сетки товаров в поиске
     */
    function words_searchcore_hook($obj,$row,$rout) {
    
        if($rout == 'START'){
    
        // Задаем новую сетку
        $obj->cell=2;
    
        // Добавляем для красоты разделите между сеткой
        $obj->line=true;
        $obj->grid=true;
    
        // Корректировка количества товара на странице поиска
        $obj->num_row=50;
        }
    }
    
    $addHandler=array
            (
            'words'=>'words_searchcore_hook',
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopsearch="php/hook/search.hook.php";

Изменение логики поиска и/или

В форме вывода результат поиска используется по умолчанию логика поиска "и", нужно поменять на "или" и поиск по всем полям сразу.
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/search.hook.php с содержанием
    /**
     * Изменение логики поиска
     */
    function words_searchcore_hook($obj,$row,$rout) {
    
        if($rout == 'START'){
    
        // Длина пагинации
        $obj->nav_len = 7;
    
    
        // Задаем новые параметры логики поиска
        if(empty($_REQUEST['pole'])) $_REQUEST['pole']=2;
        if(empty($_REQUEST['set'])) $_REQUEST['set']=2;
        }
    }
    
    $addHandler=array
            (
            'words'=>'words_searchcore_hook',
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopsearch="php/hook/search.hook.php";

Товары

Вывод хлебных крошек в подробном описании товара под ценой

  1. Создать файл /phpshop/templates/имя шаблона/php/hook/uid.hook.php с содержанием
    /**
     * Хук хлебных крошек 
     */
    function uid_bread_crumbs_hook($obj, $row, $rout) {
    
         if($rout == 'MIDDLE'){
    
         // Навигация хлебных крошек с сылками
         $obj->navigation($obj->category, $row['name']);
    
         // Имя каталога
         $obj->set('catalogCategory', $obj->category_name);
    
         // ID категории
         $obj->set('pcatalogId', $obj->category);
         }   
    }
    
    $addHandler = array
        (
        'UID' => 'uid_bread_crumbs_hook'
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopshop="php/hook/uid.hook.php";
  3. Добавить @breadCrumbs@,@catalogCategory@ и @pcatalogId@ в шаблон product/main_product_forma_full.tpl

Добавление в Title подробного описания артикул товара

  1. Создать файл /phpshop/templates/имя шаблона/php/hook/title.hook.php с содержанием
    /**
     * Хук замены title
     */
    function set_meta_hook($obj, $row) {
    
         $obj->doLoadFunction('PHPShopShop', 'set_meta', $row);
         $obj->title=str_replace($row['name'],$row['name'].' '.$row['uid'],$obj->title);
         return true;
            
    }
    
    $addHandler = array
        (
        'set_meta' => 'set_meta_hook'
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopshopcore="php/hook/title.hook.php";

Изменение количества товаров на странице спецпредложений

Требуется изменить количество товаров на странице спецпредложений /spec/.
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/spec.hook.php с содержанием
    /**
     * Изменение сетки товаров в спецпредложениях
     */
    function index_speccore_hook($obj,$row,$rout) {
    
        if($rout == 'START')
        $obj->cell=4;
    }
    
    $addHandler=array
            (
            'index'=>'index_speccore_hook',
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
     [hook]
    phpshopspec="php/hook/spec.hook.php";

Форматирование цены

Требуется отформатировать цену у товара для разделение тысяч (10 200 руб.)
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/priceformat.hook.php с содержанием
    /**
    * Форматирование цены
    */
    function price_format_hook($obj, $row, $newprice) {
    
        // Если есть новая цена
        if (empty($newprice))
            $price = $row['price'];
        else
            $price = $row['price_n'];
    
        $price = number_format(PHPShopProductFunction::GetPriceValuta($row['id'], array($price, $row['price2'], $row['price3'], $row['price4'], $row['price5']), $row['baseinputvaluta']), 2, '.', ' ');
        return $price;
    }
    
    $addHandler=array
            (
            'price'=>'price_format_hook',
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopshopcore="php/hook/priceformat.hook.php";
Форматирование цены элементов новинок и спецпредложений произведем через дизайн хук класса PHPShopProductElements.
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/priceformatelement.hook.php с содержанием
    /**
    * Форматирование цены
    */
    function price_formatelement_hook($obj, $row, $newprice) {
    
        // Если есть новая цена
        if (empty($newprice))
            $price = $row['price'];
        else
            $price = $row['price_n'];
    
        $price = number_format(PHPShopProductFunction::GetPriceValuta($row['id'], array($price, $row['price2'], $row['price3'], $row['price4'], $row['price5']), $row['baseinputvaluta']), 2, '.', ' ');
        return $price;
    }
    
    $addHandler=array
            (
            'price'=>'price_formatelement_hook',
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopproductelements="php/hook/priceformatelement.hook.php";

Вывод заданной характеристики в закладке

Требуется в подробном описании товара создать дополнительную метку вывода характеристики "Тип загрузки". За вывод подробного описания товара отвечает шаблон /phpshop/templates/имя_шаблона/product/main_product_forma_full.tpl. Для добавления новой закладки следует добавить в него переменную @addseamplysort@. Переменную вывода значение характеристики @addseamplysort@ зададим через дизайн хук класса PHPShopShop.
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/sort.hook.php с содержанием
    /**
    * Вывод значения характеристики
    */
    function UID_addseamplysort_hook($obj,$row,$rout) {
    
        if($rout == 'MIDDLE'){
        PHPShopObj::loadClass('sort');
        $search= new PHPShopSortSearch('Тип загрузки'); 
        $obj->set('addseamplysort',$search->search(unserialize($row['vendor_array'])));
        }
    }
    
    $addHandler=array
            (
            'UID'=>'UID_addseamplysort_hook',
    );
    Для вывода характеристики используем класс PHPShopSortSearch с параметров в виде имени требуемой характеристики.
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopshop="php/hook/sort.hook.php";

Изменение сортировки товара по дате в спецпредложениях

Требуется изменить сортировку по умолчанию в каталоге товаров на странице /spec/ на вывод товаров в убывающем порядке на основе параметра даты создания/изменения товара.
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/spec.hook.php с содержанием
    /**
     * Изменение сортировки товара в спецпредложениях
     */
    function query_filter_speccore_hook() {
        if (empty($_GET['f']) and empty($_GET['f']) and empty($_GET['s']))
            return array('order' => 'datas desc');
    }
    
    $addHandler = array
        (
        'query_filter' => 'query_filter_speccore_hook'
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopspec="php/hook/spec.hook.php";

Дописывание в имя товара данных из значений характеристик

Требуется дописать в имя товара значение характеристики Бренд. Имеем имя товара "Машинка для стрижки 5070", требуется выводить "Машинка для стрижки 5070 PHILIPS".
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/name.hook.php с содержанием
    // Глобальный массив данных по требуемой характеристики. Указываем имя Бренд, по которому будет производиться поиск.
    PHPShopObj::loadClass('sort');
    if(empty($GLOBALS['PHPShopSortSearch']))
    $GLOBALS['PHPShopSortSearch'] = new PHPShopSortSearch('Бренд');
    
    /**
    * Добавление имени характеристики к товару
    */
    function product_grid_hook($obj,$row) {
        global $PHPShopSortSearch;
    
        // Ищем значение характеристики
        $sort=$PHPShopSortSearch->search(unserialize($row['vendor_array']));
    
        // Дописываем бренд в конец имени товара
        $obj->set('productName',' ('.$sort.')',true);
    
        // Дописываем бренд в конец описания
        $obj->set('productDes',' Бренд: '.$sort,true);
    }
    
    $addHandler=array
            (
            'product_grid'=>'product_grid_hook',
            'UID'=>'product_grid_hook'
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopshopcore="php/hook/name.hook.php";
    phpshopproductelements="php/hook/name.hook.php";
    phpshopshop="php/hook/name.hook.php";
    Для вывода значения Мощность вместо Бренд нужно указать требуемое имя в вызове класса $GLOBALS['PHPShopSortSearch'] = new PHPShopSortSearch('Мощность'); Имя характеристики должно совпадать по базе в точности до буквы.

    Добавление пятого товара в ячейке каталога

    В карточке каталога можно выставит параметр вывода товара от 1 до 4.
    1. Создать файл /phpshop/templates/имя шаблона/php/hook/shopcore.hook.php с содержанием
      /**
       * Добавление пятого товара
       */
      function CID_Product_hook($obj,$row,$rout) {
      
          if($rout == 'START'){
          $obj->SysValue['templates']['main_product_forma_5']="product/main_product_forma_4.tpl";
          $obj->PHPShopCategory->setParam('num_row', 5);
          } 
          
      }
      
      $addHandler=array
              (
              'CID_Product'=>'CID_Product_hook'
      );
    2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
      [hook]
      phpshopshop="php/hook/shopcore.hook.php";
    3. Создать копию шаблона //phpshop/templates/имя_шаблона/product/main_product_forma_4.tpl под именем main_product_forma_5.tpl

    Снятие лимита на вывод всех товаров

    Ссылка "Показать все" по умолчанию выводит не более 100 товаров из-за возможности наложения лимитов у хостингов. При наличии мощного хостинга и нужды вывода всех товаров, можно изменить этот лимит.
    1. Создать файл /phpshop/templates/имя шаблона/php/hook/shopcore.hook.php с содержанием
      /**
       * Изменение лимита вывода товаров до 500
       */
      function CID_Product_hook($obj,$row,$rout) {
      
          if($rout == 'START'){
          $obj->max_item=500;
          } 
          
      }
      
      $addHandler=array
              (
              'CID_Product'=>'CID_Product_hook'
      );
    2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
       [hook]
      phpshopshop="php/hook/shopcore.hook.php";

    Добавление автоматического переноса строк в карточку подробного описания товара

    Необходимо заменять переводы строк n на тег
    на странице подробного описания.
    1. Создать файл /phpshop/templates/имя шаблона/php/hook/description.hook.php с содержанием
      /**
       * Добавление краткого описания
       */
      function UID_description_hook($obj,$row,$rout) {
      
          if($rout == "MIDDLE")
            $obj->set('productDes',nl2br($row['content']));
      }
      
      $addHandler=array
              (
              'UID'=>'UID_description_hook'
      );
    2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
       [hook]
      phpshopshop="php/hook/description.hook.php";
    3. В зависимости от задачи, добавить соответствующую новую переменную @productSmallDescription@ в шаблон вывода товара //phpshop/templates/имя_шаблона/product/main_product_forma_full.tpl.

    Замена информации о наличии товара на складе

    Необходимо заменить надпись при выводе товара "В наличие: кол-во шт." на картинку. Если товар есть в наличии, выводится одна картинка, если товара в наличии нету - выводится другая картинка.
    1. Создать файл /phpshop/templates/имя шаблона/php/hook/items.hook.php с содержанием
      /**
       * Изменение вида информации о складе
       */
      function checkStore_hook($obj,$row) {
      
          // Изображение наличие на складе
          if(empty($row['items']))
              $obj->set('productSklad',PHPShopText::img('/phpshop/templates/faqbootstrap/images/shop/items_on.gif'));
          else $obj->set('productSklad',PHPShopText::img('/phpshop/templates/faqbootstrap/images/shop/items_off.gif'));
      
          // Изображение товар под заказ
          if(empty($row['sklad'])) 
             $obj->set('enabledIco',PHPShopText::img('/phpshop/templates/faqbootstrap/images/shop/sklad_onn.gif'));
      
          // Изображение наличие иконки к товару
          if(!empty($row['pic_small'])) 
             $obj->set('picOn',PHPShopText::img('/phpshop/templates/faqbootstrap/images/shop/pic_on.gif'));
      
          // Изображение статуса новинки
          if(!empty($row['newtip'])) 
             $obj->set('newtipIco',PHPShopText::img('/phpshop/templates/faqbootstrap/images/shop/newtip_ok.gif'));
      
          // Изображение статуса спецпредложения
          if(!empty($row['spec'])) 
             $obj->set('newtipIco',PHPShopText::img('/phpshop/templates/faqbootstrap/images/shop/spec_ok.gif'));
      
          // Прячем вывод цена и корзины при нулевой цене
          if(!empty($row['price'])) {
              $obj->set('ComStartCart', PHPShopText::comment('<'));
              $obj->set('ComEndCart', PHPShopText::comment('>'));
              $obj->set('productPrice', null);
              $obj->set('productValutaName', null);
          }
      
          return true;
      }
      
      $addHandler=array
              (
              'checkStore'=>'checkStore_hook'
      );
      где items_on.gif - путь картинки положительного склада, items_off.gif - отрицательного склада и т.д. Картинки должны лежать в папке //phpshop/templates/имя_шаблона//phpshop/templates/faqbootstrap/images/shop/
    2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
      [hook]
      phpshopshopcore="php/hook/items.hook.php";
    3. В зависимости от задачи, добавить соответствующие новые переменные @newtipIco@, @enabledIco@, @picOn@ в шаблоны вывода товара main_product_forma_х.tpl], где х - значение кол-ва товаров в ряд (1-5).

    Замена изображений

    Требуется заменить вывод маленького изображение на большое в списке товаров для переменной @productImg@
    1. Создать файл /phpshop/templates/имя шаблона/php/hook/image.hook.php с содержанием:
      function checkStore_hook($obj,$row) {
      
          // Большое изображение товара вместо маленького
          $obj->set('productImg',$obj->checkMultibase($row['pic_big']));
          return true;
      }
      
      $addHandler=array
              (
              'checkStore'=>'checkStore_hook'
      );
    2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
      [hook]
      phpshopshopcore="php/hook/image.hook.php";

    Добавление второй цены

    Требуется вывести вторую цену товара.
    1. Создать файл /phpshop/templates/имя шаблона/php/hook/items.hook.php с содержанием
      function checkStore_hook($obj,$row) {
      
          // Вторая цена
          $obj->set('productPrice2',PHPShopProductFunction::GetPriceValuta($row['id'],$row['price2'],$row['baseinputvaluta']));
      
          // Если нужны остальные цены
          $obj->set('productPrice3',PHPShopProductFunction::GetPriceValuta($row['id'],$row['price3'],$row['baseinputvaluta']));
          $obj->set('productPrice4',PHPShopProductFunction::GetPriceValuta($row['id'],$row['price4'],$row['baseinputvaluta']));
          $obj->set('productPrice5',PHPShopProductFunction::GetPriceValuta($row['id'],$row['price5'],$row['baseinputvaluta']));
          return true;
      }
      
      $addHandler=array
              (
              'checkStore'=>'checkStore_hook'
      );
    2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
       [hook]
      phpshopshopcore="php/hook/items.hook.php";
    3. Добавить переменную @productPrice2@ во все требуемые шаблоны вывода товара из папки /phpshop/templates/имя шаблона/product/main_product_forma_XX.tpl

    Добавление второй цены в другой валюте

    Требуется вывести вторую цену товара в другой валюте рядом с первой.
    1. Создать файл /phpshop/templates/имя шаблона/php/hook/items.hook.php с содержанием
      function checkStore_hook($obj,$row) {
          global $PHPShopValutaArray;
      
          // ИД второй валюты
          $duo_currency=5;
      
          $Valuta=$PHPShopValutaArray->getArray();
          $format = $obj->PHPShopSystem->getSerilizeParam("admoption.price_znak");
      
          // Если валюта совпадает
          if($_SESSION['valuta'] == $duo_currency) {
              $currency=$obj->PHPShopSystem->getValue('dengi');
          }
          else
              $currency=$duo_currency;
      
          $price=PHPShopProductFunction::GetPriceValuta($row['id'],$row['price'],$row['baseinputvaluta']);
          $code=$Valuta[$currency]['code'];
      
          // Если валюта совпадает
          if($_SESSION['valuta'] == $duo_currency) {
              echo 1;
              $price=$price/$Valuta[$duo_currency]['kurs'];
          }
          else {
              $price=$price*$Valuta[$currency]['kurs'];
      
          }
          
          // Наценка
          $price=($price+(($price*$obj->PHPShopSystem->getValue('percent'))/100));
      
          $obj->set('productPrice2',number_format($price,$format,'.','').' '.$code);
          return true;
      }
      
      $addHandler=array
              (
              'checkStore'=>'checkStore_hook'
      );
    2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
      [hook]
      phpshopshopcore="php/hook/items.hook.php";
    3. Добавить переменную @productPrice2@ во все требуемые шаблоны вывода товара из папки /phpshop/templates/имя шаблона/product/main_product_forma_XX.tpl
    4. Указать ИД требуемой валюты для второй цены в переменной $duo_currency.

© PHPShop™, 2004-2019г. Все права защищены.
Тел: +7-495-989-11-15 (многоканал.), пн - пт, 10.00 - 18.00