В pages.xml описываются правила для обработки url. Правило представляет собой регулярное выражение для url, описание выполняемых действий (actions) и вывод шаблон (template).
Правила выполняются последовательно. Если первым идет правило с регулярным выражением “(.*)”, а вторым – “/”, то второе правило никогда не выполнится, так как его перекрывает первое.
Для удобства правила можно определять в группы. А в группах определять глобальные действия до (атрибут boot) и после (атрибут shutdown) обработки url по найденному правилу.
<sites> <!-- Site Pages name: site name, required --> <site name=""> <!-- Pages Mapping --> <pages> <!-- Page Group. You can combine pages into pageGroups name: pagegroup name, default is empty boot: following actions (comma separated) will be loaded before actions list, default is empty shutdown: following actions (comma separated) will be loaded after actions list, default is empty --> <pageGroup boot="" shutdown=""> <!-- Page Settings @uri: regexp url, required @boot: overrided parameter from pageGroup @shutdown: overrided parameter from pageGroup --> <page uri="" boot="" shutdown=""> <!-- Comma separated actions list --> <actions></actions> <!-- Template virtual path --> <template></template> </page> </pageGroup> <!-- Page Settings @uri: regexp url, required @boot: overrided parameter from pageGroup @shutdown: overrided parameter from pageGroup --> <page uri="" boot="" shutdown=""> <!-- Comma separated actions list --> <actions></actions> <!-- Template virtual path --> <template></template> </page> </pages> <!-- Optional hosts config --> <hosts> <host name="whoopass"> <!-- Virtual Actions --> <virtualActions> <!-- Virtual Action @name: current action name value: new action name --> <action name="5uglov.Users.CheckLogin">5uglov.Users.CheckLogin_Sergeyfast</action> </virtualActions> </host> </hosts> </site> </sites>
Появилась поддержка цепочек вызовов экшенов (можно переопределять для разных хостов — это слегка модифицированные virtualActions).
<sites> <site name="Project"> <hosts> <host name="*"> <action name="Chains.GetCommonBlocks">Project.Site.GetLastNews, Project.Site.GetRandPerson, Project.Site.ProcessDelayedItems</action> </host> </hosts> <pages> <page uri="/" boot="Chains.GetCommonBlocks, Project.Site.Test"> </pages> </site> </sites>
Иногда хочется избавиться от хардкода урлов в pages.xml. В trunk появилась возможность в атрибуте uri
тега page
использовать статические методы, свойства или константы.
Но не стоит увлекаться таким вариантом. Это понижает читаемость кода.
Механизм работы следующий. При при изменении содержания pages.xml
создается новая кешированная версии pages.xml
в папке cache
. В момент создания этого кешированной версии происходит замена соответствующих конструкций на результат их выполнения. В uri могут быть следующие варианты
<page uri="/{PageManagerTest::UrlPrefix}/" /> <page uri="/{PageManagerTest::$UrlPrefix}/" /> <page uri="/{PageManagerTest::UrlPrefix()}" /> <page uri="/{PageManagerTest::UrlPrefix()}/{PageManagerTest::UrlPrefix}/combined/{2}/" />
Где PageManagerTest::UrlPrefix
- константа, $UrlPrefix
- статическое свойство, UrlPrefix()
- статический метод.
Данный метод не работает на страницах с ошибками (404.xml, 403.xml и т.д.).