Убираем дублирование при добавлении роутинга

При расширении функциональности LS и добавлении новых роутов приходится править данные в двух местах: config/config.route.php и classes/modules/sys_viewer/Viewer.class.php для добавления объявленных констант в шаблоны.

Небольшое исправление 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()}/">

Немного страдает читабельность кода, но убираются лишние вызовы методов или проход по циклу.
Спасибо vist.

6 комментариев

avatar
блин, век живи век учись :) не знал о get_defined_constants, спасибо
  • ort
  • +7
avatar
avatar
// константа определена в PHP
define('_MY_CONST_VAL','CHERRIES'); 
{* вывод константы PHP в шаблоне *}
{$smarty.const._MY_CONST_VAL}


пруфлинк
  • vist
  • +2
avatar
Совсем забыл о возможностях смарти :)
Да, так будет более правильно, спасибо!
avatar
Не один ты забыл :)
avatar
вам в кодеры LS надо :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.