Доработка Amiro CMS

Цена договорная • наличный расчёт, безналичный расчёт, электронные деньги
22 декабря 2014, 13:31 • 1 отклик • 10 просмотров
Требуется переработать механизм ЧПУ для каталога товаров.

Сейчас можно сократить ссылку товара до:
адрес_сайта/последняя_категория(родитель)_в_которо й_лежит_товар/название_товара

а нужно:
адрес_сайта/название_товара

Это необходимо, чтобы при перекидывании товара по структуре каталога его ссылка в поисковиках не менялась.

Есть подсказка от ТП как это сделать:

На старте системы выбираете из cms_es_items элемент по полученной ссылке, и делаете на него перенаправление.

$oQuery = DB_Query::getSnippet("select i.id, CONCAT(c.sublink, %s, i.sublink) as sublink from cms_es_items as i join cms_es_cats as c on c.id = i.id_category where i.sublink = %s limit 1")->q('/')->q( $uri ); // $uri – ссылка на конечный элемент, для /katalog/cat/subcat/item – item.

$aItem = $oDB->fetchRow($oQuery); // $aItem['sublink'] – ссылка на страницу товара относительно корня модуля, если выборка пуста, то $aItem = false.

Событие на старте системы – custom_on_system_start, простой пример –

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(!AMI::isResource('db')){ // инициализируем API, на ранних этапах работы системы оно еще не загружено.
AMI::addResourceMapping(array('db' => 'AMI_DB'));
}
$oDB = AMI::getSingleton('db', array('ami_db' => $aEvent['db']));
// ...
return $aEvent;
}

Код можно добавить в /_local/common_functions.php