summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitattributes1
-rw-r--r--HISTORY1
-rw-r--r--buildscripts/texbuilder/pages.php4
-rw-r--r--demos/blog/protected/application.xml5
-rw-r--r--demos/quickstart/protected/controls/TopicList.tpl1
-rw-r--r--demos/quickstart/protected/pages/Configurations/UrlMapping.page75
6 files changed, 86 insertions, 1 deletions
diff --git a/.gitattributes b/.gitattributes
index 6151c07d..5f00c740 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -806,6 +806,7 @@ demos/quickstart/protected/pages/Configurations/PageConfig.page -text
demos/quickstart/protected/pages/Configurations/Templates1.page -text
demos/quickstart/protected/pages/Configurations/Templates2.page -text
demos/quickstart/protected/pages/Configurations/Templates3.page -text
+demos/quickstart/protected/pages/Configurations/UrlMapping.page -text
demos/quickstart/protected/pages/Construction.page -text
demos/quickstart/protected/pages/Controls/Button.page -text
demos/quickstart/protected/pages/Controls/CheckBox.page -text
diff --git a/HISTORY b/HISTORY
index 4b7dc4d1..60b71526 100644
--- a/HISTORY
+++ b/HISTORY
@@ -7,6 +7,7 @@ ENH: Added an interactive PHP shell, usage: "prado-cli.php shell" (Wei)
ENH: Ticket#379 - TAuthorizationRule performance enhancement (Qiang)
ENH: Easier to customize the TDatePicker using CssClass (Wei)
NEW: TLiteralColumn (Qiang)
+NSW: TUrlMapping (Wei)
Version 3.0.4 September 4, 2006
===============================
diff --git a/buildscripts/texbuilder/pages.php b/buildscripts/texbuilder/pages.php
index 4d285162..44728924 100644
--- a/buildscripts/texbuilder/pages.php
+++ b/buildscripts/texbuilder/pages.php
@@ -29,7 +29,9 @@ $pages['Configurations'] = array(
'Configurations/Templates2.page',
'Configurations/Templates3.page',
'Configurations/AppConfig.page',
- 'Configurations/PageConfig.page');
+ 'Configurations/PageConfig.page',
+ 'Configurations/UrlMapping.page'
+ );
$pages['Control Reference : Standard Controls'] = array(
'Controls/Button.page',
diff --git a/demos/blog/protected/application.xml b/demos/blog/protected/application.xml
index 4a18c74b..f15c4fe4 100644
--- a/demos/blog/protected/application.xml
+++ b/demos/blog/protected/application.xml
@@ -15,6 +15,11 @@
<route class="TFileLogRoute" Categories="BlogApplication" />
</module>
<module class="System.Util.TParameterModule" ParameterFile="Application.Data.Settings" />
+ <module id="friendly-url" class="System.Web.TUrlMapping">
+ <url pageClass="Posts.ViewPost" pattern="post/{id}/?" parameters.id="\d+" />
+ <url pageClass="Posts.ListPost" pattern="archive/{time}/?" parameters.time="\d{6}" />
+ <url pageClass="Posts.ListPost" pattern="category/{cat}/?" parameters.cat="\d+" />
+ </module>
</modules>
<services>
<!-- page service -->
diff --git a/demos/quickstart/protected/controls/TopicList.tpl b/demos/quickstart/protected/controls/TopicList.tpl
index 677a727e..1b0bfb2f 100644
--- a/demos/quickstart/protected/controls/TopicList.tpl
+++ b/demos/quickstart/protected/controls/TopicList.tpl
@@ -35,6 +35,7 @@
<li><a href="?page=Configurations.Templates3">Templates: Part III</a></li>
<li><a href="?page=Configurations.AppConfig">Application Configurations</a></li>
<li><a href="?page=Configurations.PageConfig">Page Configurations</a></li>
+ <li><a href="?page=Configurations.UrlMapping">URL Mapping (Friendly URLs)</a></li>
</ul>
</div>
diff --git a/demos/quickstart/protected/pages/Configurations/UrlMapping.page b/demos/quickstart/protected/pages/Configurations/UrlMapping.page
new file mode 100644
index 00000000..22cb866a
--- /dev/null
+++ b/demos/quickstart/protected/pages/Configurations/UrlMapping.page
@@ -0,0 +1,75 @@
+<com:TContent ID="body" >
+
+<h1>URL Mapping (Friendly URLs)</h1>
+
+<com:DocLink ClassPath="System.Web.TUrlMapping" />
+
+<p>Using the <tt>TUrlMapping</tt> module different URLs can be
+mapped into any existing Prado pages or services. This allows
+the application to use nice looking and friendly URLs.
+</p>
+
+<p>
+The <tt>TUrlMapping</tt> module allows aributary URL path to be mapped to a
+particular service and page class. This module must be configured
+before a service is initialized, thus this module should be configured
+globally in the <a href="?page=Configurations.AppConfig">application configuration</a>
+file and before any services.
+</p>
+
+<p>The mapping format is as follows.
+<com:TTextHighlighter Language="xml" CssClass="source">
+<module id="friendly-url" class="System.Web.TUrlMapping">
+ <url pageClass="ClassName" pattern="regexp" parameters.id="regexp" />
+</module>
+</com:TTextHighlighter>
+</p>
+
+<p>The <tt>PageClass</tt> set the name of class that the matched URL will
+be requested.</p> The <tt>Pattern</tt> and <tt>Parameters</tt> attribute
+values are regular expression patterns that
+determine the mapping criteria. The <tt>Pattern</tt> property takes
+a regular expression with parameter names enclosed between a left brace '<tt>{</tt>'
+and a right brace '<tt>}</tt>'. The pattens for each parameter can be set
+using <tt>Parameters</tt>attribute collection.
+For example,
+<com:TTextHighlighter Language="xml" CssClass="source">
+<url pageClass="Pages.ShowArticles" pattern="articles/{year}/{month}/{day}"
+ parameters.year="\d{4}" parameters.month="\d{2}" parameters.day="\d+" />
+</com:TTextHighlighter>
+</p>
+The example is equivalent, using regular expression only, to
+<com:TTextHighlighter Language="xml" CssClass="source">
+<url pageClass="Pages.ShowArticles">
+<![CDATA[
+ articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d+)
+]]>
+</url>
+</com:TTextHighlighter>
+<p>
+In the above example, the pattern contains 3 parameters named "<tt>year</tt>",
+"<tt>month</tt>" and "<tt>day</tt>". The pattern for these parameters are,
+respectively, "<tt>\d{4}</tt>" (4 digits), "<tt>\d{2}</tt>" (2 digits)
+and "<tt>\d+</tt>" (1 or more digits).
+</p>
+
+<p>For example, an URL "<tt>http://example.com/index.php/articles/2006/07/21</tt>" will be matched
+and valid. However, "<tt>http://example.com/index.php/articles/2006/07/hello</tt>" is not
+ valid since the "<tt>day</tt>" parameter pattern is not satisfied.
+ In the default <tt>TUrlMappingPattern</tt> class, the pattern is matched against the
+<b>path</b> property of the URL only. For example, only the
+"<tt>/index.php/articles/2006/07/21</tt>" portion of the URL is considered and the rest
+is ignored.
+ </p>
+
+
+<p>The parameter values are available through the standard <tt>Request</tt>
+object. For example, <tt>$this->Request['year']</tt>.
+</p>
+
+<p>The URL mapping are evaluated in order they are place and only the first mapping that matches
+ the URL will be used. Cascaded mapping can be achieved by placing the URL mappings
+ in particular order. For example, placing the most specific mappings first.
+ </p>
+
+</com:TContent> \ No newline at end of file