Убираем дублирование при добавлении роутинга
При расширении функциональности LS и добавлении новых роутов приходится править данные в двух местах: config/config.route.php и classes/modules/sys_viewer/Viewer.class.php для добавления объявленных констант в шаблоны.
Небольшое исправление Viewer.class.php позволяет править только один файл config.route.php, а константы, названные по маске «ROUTE_PAGE_*» автоматически будут добавлены в шаблоны.
Для этого заменяем код вида
на код:
UPD: Предложен более идеологически верный подход: доступ к константам в шаблонах через переменную $smarty, например:
Немного страдает читабельность кода, но убираются лишние вызовы методов или проход по циклу.
Спасибоvist .
Небольшое исправление Viewer.class.php позволяет править только один файл config.route.php, а константы, названные по маске «ROUTE_PAGE_*» автоматически будут добавлены в шаблоны.
Для этого заменяем код вида
/**
* Константы роутинга страниц
*/
$this->Assign("ROUTE_PAGE_ERROR",ROUTE_PAGE_ERROR);
$this->Assign("ROUTE_PAGE_REGISTRATION",ROUTE_PAGE_REGISTRATION);
$this->Assign("ROUTE_PAGE_PROFILE",ROUTE_PAGE_PROFILE);
$this->Assign("ROUTE_PAGE_MY",ROUTE_PAGE_MY);
$this->Assign("ROUTE_PAGE_BLOG",ROUTE_PAGE_BLOG);
$this->Assign("ROUTE_PAGE_PERSONAL_BLOG",ROUTE_PAGE_PERSONAL_BLOG);
$this->Assign("ROUTE_PAGE_TOP",ROUTE_PAGE_TOP);
$this->Assign("ROUTE_PAGE_INDEX",ROUTE_PAGE_INDEX);
$this->Assign("ROUTE_PAGE_NEW",ROUTE_PAGE_NEW);
$this->Assign("ROUTE_PAGE_TOPIC",ROUTE_PAGE_TOPIC);
$this->Assign("ROUTE_PAGE_PAGE",ROUTE_PAGE_PAGE);
$this->Assign("ROUTE_PAGE_LOGIN",ROUTE_PAGE_LOGIN);
$this->Assign("ROUTE_PAGE_PEOPLE",ROUTE_PAGE_PEOPLE);
$this->Assign("ROUTE_PAGE_SETTINGS",ROUTE_PAGE_SETTINGS);
$this->Assign("ROUTE_PAGE_TAG",ROUTE_PAGE_TAG);
$this->Assign("ROUTE_PAGE_COMMENTS",ROUTE_PAGE_COMMENTS);
$this->Assign("ROUTE_PAGE_TALK",ROUTE_PAGE_TALK);
$this->Assign("ROUTE_PAGE_RSS",ROUTE_PAGE_RSS);
$this->Assign("ROUTE_PAGE_LINK",ROUTE_PAGE_LINK);
$this->Assign("ROUTE_PAGE_QUESTION",ROUTE_PAGE_QUESTION);
$this->Assign("ROUTE_PAGE_BLOGS",ROUTE_PAGE_BLOGS);
$this->Assign("ROUTE_PAGE_SEARCH",ROUTE_PAGE_SEARCH);
на код:
foreach( get_defined_constants() as $constName => $constValue )
{
if( substr($constName,0,11) == 'ROUTE_PAGE_' )
$this->Assign($constName, $constValue );
}
UPD: Предложен более идеологически верный подход: доступ к константам в шаблонах через переменную $smarty, например:
<a href="{$smarty.const.DIR_WEB_ROOT}/{$smarty.const.ROUTE_PAGE_MY}/{$oUserProfile->getLogin()}/">
Немного страдает читабельность кода, но убираются лишние вызовы методов или проход по циклу.
Спасибо
6 комментариев
Да, так будет более правильно, спасибо!