Инструменты пользователя

Инструменты сайта


projects:yii:friendlyurl_extension

====== Расширение FriendlyUrl - Разработка прекращена! ====== [[/projects/yii/FriendlyUrlExtension_2009-04-13.tar.bz2|FriendlyUrl Extension]] [[/projects/yii/FriendlyUrlExtension_2009-04-13.tar.bz2|Справка по классам FriendlyUrl Extension]] Версия: 2009-04-13 Лицензия: BSD В некоторых случая некорректно определяется ссылка на страницу сайта по-умолчанию. Для исправления этого в версии 2009-04-13 необходимо наложить патч: <code diff> --- 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); </code> ===== История изменений ===== **Исправления** и **заделы на будущее** смотрите в конце страницы, там тоже ведётся своеобразная история. **2009-04-13** * Изменён метод работы расширения с контроллера-перехватчика на замену адресного менеджера (Yii::app()->urlManager). ===== Описание ===== Это расширение добавляет возможность использовать по-настоящему дружественные к пользователю адреса страниц. ==== Внутренние процессы ==== Расширение включает в себя класс-замену текущему CUrlManager (с версии 2009-04-13!). Поэтому большинство операций с URL будет происходить прозрачно для остальных классов и расширений Yii. Адрес строится/разбивается по следующей схеме (на примере адреса "http://yousitename.tdl/beauty/url/delete.2.html"): * Путь до страницы и страница - берутся все каталоги адреса: "beauty/url/"; * Действие - имя запрашиваемой страницы без пути, с расширением .html: "action"; * Идентификатор элемента, над которым будет производиться действие - часть запрошенной страницы сразу после действия и точки, до расширения: 2; Таким образом, для приведённого адреса мы получаем следущие параметры: * $path = beauty/url; * $action = delete; * $item = 2; После такого разбора, производится поиск запрошенной страницы путём иерархического обхода дерева страниц, созданного из PHP-файла или базы данных. На этом этапе мы получаем, допустим, переменные переменные: * $parentsArray = array('beauty'); * $page = mixed('pageId'=>1, 'cname'=>'url', 'controller'=>'site', 'pageTitle'=>'Тестовая страница', 'menuTitle'=>'Тест'); После того, как контроллер для страницы определен, при создании его экземпляра добавляется (при учёте, что контроллер расширяет поставляемый класс CFriendlyUrlController) переменная $furl, хранящая результат последнего разбора адреса. С версии 2009-04-03 появилась мозможность указывать в качестве **cname** пару **cname**/**action** для указания, что страница доступна только при указании соответствующего действия. Также можно теперь можно динамически формировать пункты меню и заголовки страниц путём указания в начале соответствующих полей магической последовательности **@@**, а вслед за ней - PHP код, который в конце должен вернуть строку значения. Например, при значении поля **menuTitle** равном '@@return Yii::app()->user->name;', именем пункта меню будет имя текущего пользователя. ===== Использование ===== Для того, чтобы использовать данное расширение необходимо внести следующие изменения в файл конфигурации: <code php> <?php return array( ... 'import'=>array( ... 'application.extensions.FriendlyUrl.*', ), 'components'=>array( ... 'urlManager'=>array( 'class'=>'CFriendlyUrlManager', ), ), ... ); ?> </code> Также необходимо изменить родительский класс для всех используемых контроллеров с CController на CFriendlyUrlController. Для работы с контроллером, переработан метод CController.createUrl. Его описание теперь такое: createUrl($url=NULL, $params=array(), $item=NULL, $action=NULL) ,где * $url - путь до страницы или её идентификатор (точнее, читайте в документации по классам), * $params - дополнительные параметры запроса, * $item - числовое значение элемента для работы, * $action - имя запрашиваемого действия. Ну, и во всех запросах надо использовать идентификатор ($this->furl->page->pageId) страницы для ограничивания результатов только принадлежащими текущей странице. ==== Пример использование виджета FriendlyUrlMenu ==== <code php> $this->widget('FriendlyUrlMenu', array( 'levels'=>1, 'tpl'=>array( 'innerBegin'=>'<li $class>' ), )); </code> Основные параметры: * parent - указывает родительскую страницу, дети которой будут выведены в меню; * levels - максимальный уровень вложенности, например, 1 - вывести страницы только первого уровеня вложенности, 3 - также второго и третьего уровней вложенности, 0 - все вложенные страницы; * tpl - массив оформления вывода меню: array('outerBegin', 'outerEnd', 'innerBegin', 'innerEnd'); * style - массив указания стилей текущей и всех других страниц: array('inactive', 'active'); ===== Исправления ===== * <del>Возникает ошибка: Parse error: syntax error, unexpected ';', expecting T_FUNCTION</del> (2009-04-03). * <del>FriendlyUrlMenu неправильно определяет активный пункт меню</del> (2009-04-03). ===== Заделы на будущее ===== * <del>Добавить возможность указания идентификатора страницы вместо $url в вызове createUrl (2009-04-09). * <del>Добавить возможность указания действия у страницы</del> (2009-04-03). * <del>Поддержка выполнения PHP кода при определении полей title и menuTitle страницы</del> (2009-04-03). * <del>Придумать как обмануть CCaptchaValidator - он определяет текущий контроллер как Yii::app()->getController(), что в данном случае неправильно, т.к. он всегда будет FriendlyUrlCatcher</del> (2009-04-13).

Дискуссия

Enter your comment
 
projects/yii/friendlyurl_extension.txt · Последние изменения: 17.02.2011 05:57 (внешнее изменение)

Инструменты страницы