Не зарегистрирован
Вход
Забыли пароль?
Регистрация
Подписаться
Сэкономьте время — перед вопросом на форуме узнайте, как найти ответ быстрее
По техническим проблемам необходимо обращаться в Консультационный центр

Поиск по форуму: 

Приглашаем в блог Amiro.CMS. Регулярные обзоры, опыт, решения, практикумы.
Форум  ->   Разработка плагинов, вопросы по API  ->  ЧПУ для фильтра


Показать все сообщения в этой ветке


Добавлено: 28.01.17 11:45:40  



Регистрация: 19.01.15
Сообщений: 102


Обратиться по имени

Запросил в тех поддержке как сделать чпу при фильтрации товаров допустим по производителю, дали такой ответ:

Потребуется доработка роутера в обработчике событии custom_on_system_start как это делается, например, в модуле http://www.amiro.ru/market/catalog/free/sokraschenie-ssylok-296
Простой пример работы с событием custom_on_system_start, реализующий ЧПУ для фильтра типа //site.addr/kat/param1/value1/param2/value2/... -

define('AMI_FIRE_ON_SYSTEM_START', TRUE);
AMI_Event::addHandler('custom_on_system_start', 'customStartHandler', AMI_Event::MOD_ANY);

function customStartHandler($name, array $aEvent, $handlerModId, $srcModId){
    if(strpos($_SERVER['REQUEST_URI'], '/kat/') === 0) {
        $parts = explode('/', $_SERVER['REQUEST_URI']);

        // prepare search query params
        $params = array(
            'pf' => 1,
            'flt_force_values' => 1,
            'action' => 'search',
            'search_subcats' => 1
        );
        for($i = 0; $i < count($parts) - 1; $i++) {
            if(preg_match('/cst([0-9]+)/ui', $parts[$i], $matches)) {
                  $params['ext_custom_' . $matches[1]] = $parts[$i + 1];
            }
        }

        // build query string
        $_SERVER['QUERY_STRING'] = $GLOBALS['ROOT_PATH_WWW'] . '/katalog?';
        foreach($params as $name => $value) {
            $_SERVER['QUERY_STRING'] .= '&' . $name . '=' . $value;
        }

        // force to use QUERY_STRING instead of REQUEST_URI
        unset($_SERVER['REQUEST_URI']);
    }
    return $aEvent;
}

И дополнительно изменить ссылки на сортировку, и параметры robots на сгенерированной странице перед выдачей - 

AMI_Event::addHandler('v5_on_apply_data', 'cstFinalizeLinks', AMI_Event::MOD_ANY);
function cstFinalizeLinks($name, array $aEvent, $handlerModId, $srcModId) {
    if($aEvent['type'] != 'page_finalize') {
        return $aEvent;
    }
    // $aPageInfo = AMI_Registry::get('page'); // массив с информацией о странице
    $aEvent['aData'] = preg_replace('...', '...', $aEvent['aData']); // в $aEvent['aData'] сгенерированный системой код страницы перед выдачей
    return $aEvent;
}


вставляю этот код в /_local/common_functions.php или в /_local/front_functions.php у меня сайт "летит", отображает только "Работает на Amiro.CMS" на белом фоне и ничего больше, в чем может быть причина?



0


Создать новую тему Ответить