Если в инструкции указана необходимость создания файла, а в вашем шаблоне уже присутствует такой файл, то файл дополняется по правилам составления Дизайн-хуков. Для быстрого включения/выключения дизайн-хука нужно поставить знак решетки # перед его определением в 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. Создать файл /phpshop/templates/имя шаблона/php/hook/sorttable.hook.php с содержанием
    /**
     * Вывод имени набора характеристики
     */
    function sort_table_get_category_name($category) {
        $PHPShopOrm = new PHPShopOrm($GLOBALS['SysValue']['base']['sort_categories']);
        $data=$PHPShopOrm->select(array('name'),array('id'=>'='.intval($category)),false,array('limit'=>1));
        return $data['name'];
    }
    
    /**
     * Вывод сортировок для товаров таблицей
     */
    function sort_table_hook($obj, $row) {
        global $SysValue;
    
        $sort = $obj->PHPShopCategory->unserializeParam('sort');
        $vendor_array = unserialize($row['vendor_array']);
        $dis = null;
    
        if (is_array($sort))
            foreach ($sort as $v) {
                $sortCat.=' id=' . $v . ' OR';
            }
        $sortCat = substr($sortCat, 0, strlen($sortCat) - 2);
    
        if (!empty($sortCat)) {
    
            // Массив имен характеристик
            $PHPShopOrm = new PHPShopOrm();
            $PHPShopOrm->debug = $obj->debug;
            $result = $PHPShopOrm->query("select * from " . $SysValue['base']['table_name20'] . " where ($sortCat and goodoption!='1') order by num");
            while ($row = mysql_fetch_assoc($result)) {
                $arrayVendor[$row['id']] = $row;
            }
    
    
            if (is_array($vendor_array))
                foreach ($vendor_array as $v) {
                    foreach ($v as $value)
                        if (is_numeric($value))
                            $sortValue.=' id=' . $value . ' OR';
                }
            $sortValue = substr($sortValue, 0, strlen($sortValue) - 2);
    
            if (!empty($sortValue)) {
    
                // Массив значений характеристик
                $PHPShopOrm = new PHPShopOrm();
                $PHPShopOrm->debug = $obj->debug;
                $result = $PHPShopOrm->query("select * from " . $SysValue['base']['table_name21'] . " where $sortValue order by num");
                while ($row = mysql_fetch_array($result)) {
                    $arrayVendorValue[$row['category']]['name'] .= ", " . $row['name'];
                }
    
    
                // Создаем таблицу характеристик с учетом сортировки
                if (is_array($arrayVendor))
                    foreach ($arrayVendor as $idCategory => $value)
                        if (!empty($arrayVendorValue[$idCategory]['name'])) {
                            if (!empty($value['name'])) {
                                
                                if(empty($SortNameCatHook[$value['category']])){
                                $dis.= PHPShopText::tr(PHPShopText::b(sort_table_get_category_name($value['category'])),'');
                                $SortNameCatHook[$value['category']]=1;
                                }
                                
                                if (!empty($value['page']))
                                    $dis.=PHPShopText::tr(PHPShopText::b($value['name']) . ': ', PHPShopText::a('../page/' . $value['page'] . '.html', substr($arrayVendorValue[$idCategory]['name'], 2)));
                                else
                                    $dis.=PHPShopText::tr(PHPShopText::b($value['name']) . ': ', substr($arrayVendorValue[$idCategory]['name'], 2));
                            }
                        }
    
                $disp = PHPShopText::table($dis);
                $obj->set('vendorDisp', $disp);
            }
        }
    
        return true;
    }
    
    $addHandler = array
        (
        'sort_table' => 'sort_table_hook',
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopshop="php/hook/sorttable.hook.php";

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

Требуется добавить вывод таблицы с характеристиками в кратком описании товара в каталогах.
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/sort.hook.php с содержанием
    /**
     * Вывод характеристик в кратком описании  товара
     */
    function checkStore_add_sorttable_hook($obj, $row) {
        if (empty($obj->category)) {
            $obj->PHPShopCategory = new PHPShopCategory($row['category']);
        }
        $obj->doLoadFunction('PHPShopShop', 'sort_table', $row, 'shop');
        return true;
    }
    
    $addHandler=array
            (
            'checkStore'=>'checkStore_add_sorttable_hook'
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopshopcore="php/hook/sort.hook.php";
  3. Добавить в шаблоны вывода краткого описания товаров //phpshop/templates/имя_шаблона/product/main_product_forma_XX.tpl переменную @vendorDisp@.

Изменение шаблона вывода фильтров товара

Требуется изменить форму вывода фильтров товара в ссылках вида (/shop/CID_XX.html) с выпадающего списка на ссылки.
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/cell.hook.php с содержанием
    function cid_product_sorttemplate_hook($obj,$row,$rout){
        if($rout == 'START'){
            $obj->sort_template = 'sorttemplatehook';
        }
    }
    
    /**
     * Шаблон вывода характеристик
     */
    function sorttemplatehook($value, $n, $title, $vendor) {
        $disp = null;
    
        if (is_array($value)) {
            foreach ($value as $p) {
                if (is_array($vendor[$n])) {
                    foreach ($vendor[$n] as $value) {
    
                        if ($value == $p[1])
                            $text = PHPShopText::b($p[0]);
                        else
                            $text = $p[0];
    
                        $disp.=PHPShopText::br() . PHPShopText::a('?v[' . $n . ']=' . $p[1], $text, $p[0], $color = false, $size = false, $target = false, $class = false);
                    }
                }else {
                    if ($vendor[$n] == $p[1])
                        $text = PHPShopText::b($p[0]);
                    else
                        $text = $p[0];
    
                    $disp.=PHPShopText::br() . PHPShopText::a('?v[' . $n . ']=' . $p[1], $text, $p[0], $color = false, $size = false, $target = false, $class = false);
                }
            }
        }
        return $disp;
    }
    
    $addHandler=array
            (
                'CID_Product'=>'cid_product_sorttemplate_hook'
    
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopshop="php/hook/cell.hook.php";
    Шаблон вывода фильтров находится в функции sorttemplatehook(), описанная на шаг выше.

Новости

Изменение количества мини-новостей на главной странице

По умочанию на главной странице выводится 5 новостей. Требуется изменить количество новостей на 3.
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/newselement.hook.php с содержанием
    /**
     * Изменение количества новостей на странице
     */
    function newselement_hook($obj, $data, $rout) {
     
             if($rout == 'START'){
                $obj->limit = 3;
             }    
    }
    
    $addHandler=array
            (
                'index' => 'newselement_hook'
    
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopnewselement="php/hook/newselement.hook.php";

Изменение количества новостей на странице /news/

По умолчанию количеством новостей для вывода на одной странице управляет опция "Количество позиций на странице в магазине", которая так же управляет выводом самих товаров. Требуется убрать эту зависимость и выводить по 100 новостей на странице.
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/news.hook.php с содержанием
    /**
     * Изменение количества новостей на странице
     */
    function news_page_hook($obj, $data, $rout) {
     
             if($rout == 'START'){
                $obj->num_row=100; 
             }    
    }
    
    $addHandler=array
            (
                'index' => 'news_page_hook'
    
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
    [hook]
    phpshopnews="php/hook/news.hook.php";

Вывод мини-новостей на всех страницах

По умолчанию мини-новости выводятся только на главной странице. Требуется убрать это ограничение.
  1. Создать файл /phpshop/templates/имя шаблона/php/hook/newselement.hook.php с содержанием
    /**
     * Изменение количества новостей на странице
     */
    function news_element_hook($obj, $data, $rout) {
     
             if($rout == 'START'){
                $obj->disp_only_index=false; 
             }    
    }
    
    $addHandler=array
            (
                'index' => 'news_element_hook'
    
    );
  2. Создать файл /phpshop/templates/имя шаблона/php/inc/config.ini с содержанием
     [hook]
    phpshopnewselement="php/hook/newselement.hook.php";

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