Справка по классам FriendlyUrl Extension
Версия: 2009-04-13
Лицензия: BSD
В некоторых случая некорректно определяется ссылка на страницу сайта по-умолчанию. Для исправления этого в версии 2009-04-13 необходимо наложить патч:
--- FriendlyUrlMenu.php.orig 2009-04-14 09:14:47.000000000 +0400 +++ FriendlyUrlMenu.php 2009-04-14 09:10:47.000000000 +0400 @@ -113,8 +113,8 @@ } } - $this->currentUrl = Yii::app()->urlManager->createUrl($this->controller->furl->url, - array(), NULL, $this->controller->furl->action); + $this->currentUrl = Yii::app()->urlManager->createUrl( + -$this->controller->furl->page->uniqueId); $this->buildSubMenu($parent, 0);
Исправления и заделы на будущее смотрите в конце страницы, там тоже ведётся своеобразная история.
2009-04-13
Это расширение добавляет возможность использовать по-настоящему дружественные к пользователю адреса страниц.
Расширение включает в себя класс-замену текущему CUrlManager (с версии 2009-04-13!). Поэтому большинство операций с URL будет происходить прозрачно для остальных классов и расширений Yii.
Адрес строится/разбивается по следующей схеме (на примере адреса «http://yousitename.tdl/beauty/url/delete.2.html»):
Таким образом, для приведённого адреса мы получаем следущие параметры:
После такого разбора, производится поиск запрошенной страницы путём иерархического обхода дерева страниц, созданного из PHP-файла или базы данных. На этом этапе мы получаем, допустим, переменные переменные:
После того, как контроллер для страницы определен, при создании его экземпляра добавляется (при учёте, что контроллер расширяет поставляемый класс CFriendlyUrlController) переменная $furl, хранящая результат последнего разбора адреса.
С версии 2009-04-03 появилась мозможность указывать в качестве cname пару cname/action для указания, что страница доступна только при указании соответствующего действия.
Также можно теперь можно динамически формировать пункты меню и заголовки страниц путём указания в начале соответствующих полей магической последовательности @@, а вслед за ней - PHP код, который в конце должен вернуть строку значения. Например, при значении поля menuTitle равном '@@return Yii::app()→user→name;', именем пункта меню будет имя текущего пользователя.
Для того, чтобы использовать данное расширение необходимо внести следующие изменения в файл конфигурации:
<?php return array( ... 'import'=>array( ... 'application.extensions.FriendlyUrl.*', ), 'components'=>array( ... 'urlManager'=>array( 'class'=>'CFriendlyUrlManager', ), ), ... ); ?>
Также необходимо изменить родительский класс для всех используемых контроллеров с CController на CFriendlyUrlController.
Для работы с контроллером, переработан метод CController.createUrl. Его описание теперь такое:
createUrl($url=NULL, $params=array(), $item=NULL, $action=NULL)
,где
Ну, и во всех запросах надо использовать идентификатор ($this→furl→page→pageId) страницы для ограничивания результатов только принадлежащими текущей странице.
$this->widget('FriendlyUrlMenu', array( 'levels'=>1, 'tpl'=>array( 'innerBegin'=>'<li $class>' ), ));
Основные параметры:
Дискуссия