PageTemplate 2.1.5 → 2.1.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,267 +0,0 @@
1
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
2
- <title>PageTemplate</title>
3
- <link rel="STYLESHEET" href="base.css" type="text/css" title="base.css">
4
- </head>
5
- <body>
6
- <h1>Yo!</h1>
7
- <hr />
8
- <p class="navbar">
9
- <a href="SiteMap.html">Sitemap</a> || PageTemplate</p>
10
- <h1>PageTemplate</h1>
11
- <hr />
12
-
13
- <table width='100%' border='0'><tr>
14
- <td><p>&lt;- <a href='SiteMap.html'>SiteMap</a></p>
15
- </td>
16
- <td align='right'><p><a href='install.html'>Getting It</a>- &gt;</p>
17
- </td>
18
- </tr></table>
19
-
20
- <h2>Vital Information and Links</h2>
21
-
22
-
23
- <table>
24
- <tr>
25
- <td>Version</td>
26
- <td>2.0.0</td>
27
- </tr>
28
- <tr>
29
- <td>Project Page</td>
30
- <td><a href="http://rubyforge.org/projects/pagetemplate">PageTemplate on RubyForge</a></td>
31
- </tr>
32
- <tr>
33
- <td>Instructions</td>
34
- <td>Start with <a href="products/pagetemplate/install.html">Installing It</a></td>
35
- </tr>
36
- <tr>
37
- <td>API Documenation</td>
38
- <td><a href="products/pagetemplate/doc/index.html">Generated by RDoc</a></td>
39
- </tr>
40
- <tr>
41
- <td>Download</td>
42
- <td><a href="http://rubyforge.org/frs/?group_id=407">Grab the File</a></td>
43
- </tr>
44
- <tr>
45
- <td>Forums</td>
46
- <td><a href="http://rubyforge.org/forum/?group_id=407">Talk about PageTemplate</a></td>
47
- </tr>
48
- <tr>
49
- <td>Bugs</td>
50
- <td><a href="http://rubyforge.org/tracker/?atid=1626&amp;group_id=407&#38;func=browse">Report a Bug</a></td>
51
- </tr>
52
- <tr>
53
- <td>Features</td>
54
- <td><a href="http://rubyforge.org/tracker/?atid=1629&amp;group_id=407&#38;func=browse">Request a Feature</a></td>
55
- </tr>
56
- <tr>
57
- <td>Project Changes</td>
58
- <td><a href="http://rubyforge.org/cgi-bin/viewcvs.cgi/*checkout*/PageTemplate/Changes?cvsroot=pagetemplate">Latest <span class="caps">CVS </span>Copy of Changes</a></td>
59
- </tr>
60
- </table>
61
-
62
-
63
-
64
-
65
- <p class="note">PageTemplate 2.x is in a major state of flux. Loads of new features were added by Greg Millam in
66
- short order, and we are still streamlining and testing the code. All that means for you is that the docs
67
- are not as up to date as we would like. Still, we try. Shouldn&#8217;t be <em>too</em> bad. Until then, look at
68
- the <a href="products/pagetemplate/version2.html">2.0 overview page</a>.</p>
69
-
70
-
71
- <h2>Introduction</h2>
72
-
73
-
74
- <p>PageTemplate is a Ruby package which allows you to utilize text
75
- templates for your Web projects. It is mainly intended for use in
76
- a <span class="caps">CGI</span> environment, but has been designed to be useful in a broad
77
- range of similar applications. It is inspired by, yet almost entirely
78
- unlike, the <a href="http://html-template.sourceforge.net/">HTML::Template</a> package
79
- available for Perl. It has many features in common with other templating
80
- engines:</p>
81
-
82
-
83
- <ul>
84
- <li>Variable substitution</li>
85
- <li>&#8220;if/else&#8221; blocks &#8211; inserting chunks of content depending on the
86
- existence of a flag variable</li>
87
- <li>&#8220;loop/no&#8221; blocks &#8211; repeatedly inserting a chunk of content, using
88
- values from a list</li>
89
- <li>A simple default syntax</li>
90
- <li>The ability to include external files</li>
91
- </ul>
92
-
93
-
94
- <p>It also has a few features of its own <em>(otherwise, where&#8217;s the fun?)</em>.</p>
95
-
96
-
97
- <ul>
98
- <li>Customizable markup syntax to simplify integration with your own
99
- tools.</li>
100
- <li>Loop metavariables for special cases like the first or last step through
101
- a loop.</li>
102
- <li>Variable preprocessor to handle things like escaping <span class="caps">HTML</span> entities and
103
- displaying <span class="caps">URL</span>-encoded strings.</li>
104
- <li>Access to the accessors of a variable. <em>(like <code>circle.radius</code>)</em></li>
105
- </ul>
106
-
107
-
108
- <p>More features are planned, such as support for localization to allow
109
- native-language markup. PageTemplate already does what I want it to do, so it
110
- has hit the stage of refinement and addition of requested features.</p>
111
-
112
-
113
- <h2>What PageTemplate Is Not</h2>
114
-
115
-
116
- <ul>
117
- <li>It&#8217;s not a programming language. If you want a programming language
118
- for your Web pages, try <a href="http://www.php.net/">PHP</a>.</li>
119
- <li>It&#8217;s not a tool for embedding Ruby code into your Web pages.
120
- <a href="http://www.modruby.org/">eruby</a> already does a fine job of that.</li>
121
- <li>It is <em>definitely</em> not <span class="caps">XML</span>. PageTemplate serves a much narrower field.
122
- If you want to use Ruby with <span class="caps">XML</span>, there are
123
- <a href="http://www.rubyxml.com/">excellent resources</a> for that.</li>
124
- <li>PageTemplate is a personal project, which means that it&#8217;s not a
125
- commercial product. As much as I hope that it&#8217;s useful and stable on
126
- your computer, I can&#8217;t make any promises. If installing PageTemplate
127
- levels New Jersey, there&#8217;s nothing I can do about it. This is my
128
- version of the standard <b>no warranty</b> warranty.</li>
129
- <li>Last but not least, PageTemplate is not <span class="caps">HTML</span>::Template. <span class="caps">HTML</span>::Template
130
- has been growing and evolving for a few years, while PageTemplate was originally
131
- the result of a week alone with 5 pounds of coffee. PageTemplate has
132
- matured over the last couple of years, but it is still just a small
133
- project maintained by a couple of guys in their spare time.</li>
134
- </ul>
135
-
136
-
137
- <h2>Motivation</h2>
138
-
139
-
140
- <p>I&#8217;ve been a fan of Perl&#8217;s <span class="caps">HTML</span>::Template package for a long time, and I
141
- miss its robust usefulness whenever I&#8217;m using a language that isn&#8217;t Perl.
142
- After delving deeper into other languages, I thought it might be fun to make
143
- some of that usefulness available in <a href="geekery/ruby/index.html">Ruby</a>.
144
- It would give me a decent-sized personal project, which would help me stretch
145
- my skills with project development and unit testing. Plus, if I had a
146
- templating system available to me, maybe I wouldn&#8217;t miss Perl so badly.</p>
147
-
148
-
149
- <p>So those are my primary motivations: personal education and homesickness.</p>
150
-
151
-
152
- <p>Once the code started taking shape, though, I decided that I wanted
153
- this to be useful for other people. &#8220;Download and use&#8221; kind
154
- of useful.</p>
155
-
156
-
157
- <p>The road since PageTemplate 1.0 has been shaped almost entirely by
158
- user suggestions. My own needs for PT were modest, and it&#8217;s
159
- pretty much been complete for me since 0.3. All of the additions since
160
- then, such as include, unless, comments, and loop metavariables, have
161
- been added because <em>you</em> wanted more out of PT. If it wasn&#8217;t you, then
162
- maybe it was that guy behind you. I&#8217;m delighted that people have
163
- been pushing and redefining PageTemplate to fit their own nefarious
164
- goals. And heck, I&#8217;ll admit it. Loop metavariables are cool.</p>
165
-
166
-
167
- <p>So if there&#8217;s anything I can do to make it easier for you
168
- to put it to use in your own projects, please <a href="contact">tell me</a>!</p>
169
-
170
-
171
- <h2>Using PageTemplate</h2>
172
-
173
-
174
- <p>First, you&#8217;ll want to <a href="products/pagetemplate/install.html">download and install</a> the latest version of
175
- PageTemplate. Then, <a href="products/pagetemplate/designer.html">designers</a> will make templates,
176
- <a href="products/pagetemplate/programmer.html">programmers</a> will write code, and some of us will do both.
177
- Eventually, you will probably get tired of the default syntax, and want to
178
- make your own. If you&#8217;re an especially geeky sort of person, you&#8217;ll no doubt
179
- want to look at the
180
- <a href="products/pagetemplate/doc/index.html">reference</a> to classes and methods that are available in the PageTemplate
181
- package.</p>
182
-
183
-
184
- <p>Most importantly, <em>enjoy yourself</em>! PageTemplate is
185
- supposed to be good geeky fun, not hard work with lots of sweat
186
- and turmoil!</p>
187
-
188
-
189
- <h2>Examples</h2>
190
-
191
-
192
- <p>There&#8217;s nothing like an example or two to see how something works in
193
- the real world. Making new examples is a priority now, so this list will
194
- contain more items in the near future.</p>
195
-
196
-
197
- <p>Unfortunately, I haven&#8217;t really gotten around to making or finding examples.
198
- What do I have so far?</p>
199
-
200
-
201
- <ul>
202
- <li><a href="contact">The <span class="caps">COOLNAMEHERE</span> contact page</a> is written with Ruby and
203
- PageTemplate.</li>
204
- </ul>
205
-
206
-
207
- <h2>Users</h2>
208
-
209
-
210
- <p>We would love to hear about what you&#8217;ve done with PageTemplate.
211
- <a href="contact">Contact me</a> with your stories and links, and I&#8217;ll put it in this
212
- section.</p>
213
-
214
-
215
- <h2>The License</h2>
216
-
217
-
218
- <p>PageTemplate is distributed under The <span class="caps">MIT </span>License, which is detailed
219
- below.</p>
220
-
221
-
222
- <h3>The <span class="caps">MIT </span>License</h3>
223
-
224
-
225
- <p>Copyright&#169; 2002-2005 Brian Wisti, Greg Millam</p>
226
-
227
-
228
- <p>Permission is hereby granted, free of charge, to any person obtaining a copy
229
- of this software and associated documentation files (the &#8220;Software&#8221;), to
230
- deal in the Software without restriction, including without limitation the
231
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
232
- sell copies of the Software, and to permit persons to whom the Software is
233
- furnished to do so, subject to the following conditions:</p>
234
-
235
-
236
- <p>The above copyright notice and this permission notice shall be included in all
237
- copies or substantial portions of the Software.</p>
238
-
239
-
240
- <p><strong>
241
- <span class="caps">THE SOFTWARE IS PROVIDED </span>&#8220;AS IS&#8221;, <span class="caps">WITHOUT WARRANTY OF ANY KIND</span>, EXPRESS <span class="caps">OR </span>
242
- <span class="caps">IMPLIED</span>, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY</span>,
243
- <span class="caps">FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT</span>. IN <span class="caps">NO EVENT SHALL THE </span>
244
- <span class="caps">AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM</span>, DAMAGES <span class="caps">OR OTHER </span>
245
- <span class="caps">LIABILITY</span>, WHETHER <span class="caps">IN AN ACTION OF CONTRACT</span>, TORT <span class="caps">OR OTHERWISE</span>, ARISING <span class="caps">FROM</span>,
246
- <span class="caps">OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE </span>
247
- <span class="caps">SOFTWARE</span>.
248
- </strong></p>
249
-
250
-
251
- <h2>Subpages:</h2>
252
-
253
- <ul>
254
- <li><A HREF="install.html">Getting It</A></li>
255
- <li><A HREF="designer.html">The Designer&#8217;s Perspective</A></li>
256
- <li><A HREF="programmer.html">The Programmer&#8217;s Perspective</A></li>
257
- <li><A HREF="version2.html">PageTemplate Version 2: What&#8217;s New?</A></li>
258
- <li><A HREF="SiteMap.html">SiteMap</A></li>
259
- </ul><hr />
260
-
261
- <p class="navbar">
262
- <a href="SiteMap.html">Sitemap</a> || PageTemplate</p>
263
-
264
- <h1>Yo!</h1>
265
- <hr />
266
- </body>
267
- </html>
@@ -1,125 +0,0 @@
1
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
2
- <title>Getting It</title>
3
- <link rel="STYLESHEET" href="base.css" type="text/css" title="base.css">
4
- </head>
5
- <body>
6
- <h1>Yo!</h1>
7
- <hr />
8
- <p class="navbar">
9
- <a href="SiteMap.html">Sitemap</a> || <a href="index.html">PageTemplate</a>
10
- / Getting It</p>
11
- <h1>Getting It</h1>
12
- <hr />
13
-
14
- <table width='100%' border='0'><tr>
15
- <td><p>&lt;- <a href='index.html'>PageTemplate</a></p>
16
- </td>
17
- <td align='right'><p><a href='designer.html'>The Designer&#8217;s Perspective</a>- &gt;</p>
18
- </td>
19
- </tr></table>
20
-
21
- <h2>The Easy Way</h2>
22
-
23
-
24
- <p>I finally got around to making a
25
- <a href="http://rubygems.rubyforge.org/wiki/wiki.pl">RubyGems</a> gem package of
26
- PageTemplate available. This means that you can install the latest
27
- release of PageTemplate with one simple command:</p>
28
-
29
-
30
- <pre class="console">
31
- gem install -r PageTemplate
32
- </pre>
33
-
34
- <p>You can always download your own copy of the gem file and install
35
- locally, if that&#8217;s your preference:</p>
36
-
37
-
38
- <pre class="console">
39
- gem install -l PageTemplate
40
- </pre>
41
-
42
- <h2>The Slightly Less Easy Way</h2>
43
-
44
-
45
- <p>Maybe you don&#8217;t use RubyGems, or you just don&#8217;t feel like mucking
46
- about with the gem system at all. That&#8217;s okay, I&#8217;ve got you covered.
47
- You only need to download and install the source package from Rubyforge.</p>
48
-
49
-
50
- <h3>Download</h3>
51
-
52
-
53
- <p>In order to save on the bandwidth for my home machine, I&#8217;ve opened
54
- a <a href="http://rubyforge.org/">RubyForge</a> account for
55
- PageTemplate. That means that you can always find the latest version
56
- of the PageTemplate package from my project download page:</p>
57
-
58
-
59
- <blockquote>
60
- <p><a href="http://rubyforge.org/projects/pagetemplate/">http://rubyforge.org/projects/pagetemplate/</a></p>
61
- </blockquote>
62
-
63
-
64
- <p>Once you&#8217;ve downloaded the latest version, unpack it into a temporary or
65
- source directory.</p>
66
-
67
-
68
- <pre class="console">
69
- $ tar xfvzC PageTemplate-1_2_0.tar.gz ~/src/
70
- </pre>
71
-
72
- <h3>Test</h3>
73
-
74
-
75
- <p>If you have Ruby 1.8, or <a href="http://testunit.talbott.ws/">Test::Unit</a>
76
- installed on your machine, you can run the test cases that are
77
- used during development of PageTemplate.</p>
78
-
79
-
80
- <pre class="console">
81
- $ ruby -w TC_PageTemplate.rb
82
- </pre>
83
-
84
- <p>If you get messages about any sort of failures, please let me know! I know
85
- that the tests run smoothly on my machine, but I have no idea how it&#8217;ll work
86
- on yours.</p>
87
-
88
-
89
- <h3>Install</h3>
90
-
91
-
92
- <h4>Using <code>install.rb</code></h4>
93
-
94
-
95
- <p>PageTemplate uses the standard ruby <code>install.rb</code> script for installation,
96
- which makes the process very easy:</p>
97
-
98
-
99
- <pre class="console">
100
- ruby install.rb config
101
- ruby install.rb setup
102
- (su or sudo)
103
- ruby install.rb install
104
- </pre>
105
-
106
- <h4>Using Rake</h4>
107
-
108
-
109
- <p>If you have the <a href="http://rake.rubyforge.org/">Rake</a> tool, you can use that to
110
- take care of testing and installing PageTemplate.</p>
111
-
112
-
113
- <pre class="console">
114
- rake
115
- sudo rake install
116
- </pre><hr />
117
-
118
- <p class="navbar">
119
- <a href="SiteMap.html">Sitemap</a> || <a href="index.html">PageTemplate</a>
120
- / Getting It</p>
121
-
122
- <h1>Yo!</h1>
123
- <hr />
124
- </body>
125
- </html>
@@ -1,289 +0,0 @@
1
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
2
- <title>The Programmer's Perspective</title>
3
- <link rel="STYLESHEET" href="base.css" type="text/css" title="base.css">
4
- </head>
5
- <body>
6
- <h1>Yo!</h1>
7
- <hr />
8
- <p class="navbar">
9
- <a href="SiteMap.html">Sitemap</a> || <a href="index.html">PageTemplate</a>
10
- / The Programmer's Perspective</p>
11
- <h1>The Programmer's Perspective</h1>
12
- <hr />
13
-
14
- <table width='100%' border='0'><tr>
15
- <td><p>&lt;- <a href='designer.html'>The Designer&#8217;s Perspective</a></p>
16
- </td>
17
- <td align='right'><p><a href='version2.html'>PageTemplate Version 2</a>- &gt;</p>
18
- </td>
19
- </tr></table>
20
-
21
- <h2>Getting Started</h2>
22
-
23
-
24
- <p>Before you dig into the code, you might want to take a look at
25
- the <a href="products/pagetemplate/designer.html">designer</a> perspective of PageTemplate.</p>
26
-
27
-
28
- <h2>Using PageTemplate In Your Ruby Code</h2>
29
-
30
-
31
- <p>This is a <em>very</em> quick overview, because I have realized lately that <em>more</em>
32
- documentation isn&#8217;t necessarily <em>better</em> documentation. <a href="contact">Send me</a>
33
- any questions you have, or clarifications you&#8217;d like to see, and I will be
34
- happy to incorporate them into future revisions of this article.</p>
35
-
36
-
37
- <p>First, of course, you&#8217;ll want to <a href="products/pagetemplate/install.html">install</a> the PageTemplate package.
38
- Once that&#8217;s done, <code>require</code> the package.</p>
39
-
40
-
41
- <pre class="code">
42
- require "PageTemplate"
43
- </pre>
44
-
45
- <p>You&#8217;ll need a PageTemplate object to hold values and parse template files.</p>
46
-
47
-
48
- <pre class="code">
49
- template = PageTemplate.new()
50
- </pre>
51
-
52
- <p>At some point, you will want the PageTemplate object to load a
53
- template text file, bristling with directives. The template file should
54
- be readable by the script, and the path must be either absolute
55
- or relative to the script&#8217;s working directory.</p>
56
-
57
-
58
- <pre class="code">
59
- template.load("/var/www/templates/template.txt")
60
- </pre>
61
-
62
- <p>To assign a value for use by PageTemplate, use hash-style
63
- assignment, with the name to be used by the template as the key,
64
- and the value assigned as &#8230; well &#8230; the value. The only rule is
65
- that the value must evaluate to a String (either it <em>is</em> a
66
- String or it has a <code>to_s</code> method). Page designers
67
- would probably be grateful if the key was a string, too. Much
68
- easier to type it into a text template that way.</p>
69
-
70
-
71
- <pre class="code">
72
- template["title"] = "My PageTemplate Script"
73
- </pre>
74
-
75
- <p>The easiest way to handle flags used in <code>if</code> directives
76
- is to take advantage of Ruby&#8217;s boolean values.</p>
77
-
78
-
79
- <pre class="code">
80
- template["flag"] = true
81
- template["otherflag"] = false
82
- </pre>
83
-
84
- <p>You can use the truth of a regular variable or loop variable in
85
- an <code>if</code> directive, but remember that Ruby is more specific
86
- about <code>false</code> than other languages you might be used to.
87
- For example, the number zero is not false, it&#8217;s just zero. Same
88
- with empty strings. If you want a variable to be interpreted as
89
- <code>false</code>, you should explicitly set it.</p>
90
-
91
-
92
- <p>PageTemplate uses arrays of objects for lists. Each object provides a local
93
- namespace which lasts only for the current iteration through the chunk of
94
- content. Otherwise, you&#8217;d have to manually set loop variables, and I don&#8217;t
95
- like that idea!</p>
96
-
97
-
98
- <p>The classic approach is to borrow from <span class="caps">HTML</span>::Template and use a list of hashes
99
- for your namespaces.</p>
100
-
101
-
102
- <pre class="code">
103
- listing = [
104
- { "name" =&gt; "Swordfishtrombones", "artist" =&gt; "Tom Waits" },
105
- { "name" =&gt; "Dirt Track Date", "artist" =&gt; "Southern Culture On The Skids"},
106
- { "name" =&gt; "Amnesiac", "artist" =&gt; "Radiohead" }
107
- ]
108
-
109
- template["albums"] = listing
110
- </pre>
111
-
112
- <p>What about nested lists? They are handled the same way. One of
113
- the keys in your item hash points to another array of hashes, which
114
- will be used for the inner loop.</p>
115
-
116
-
117
- <pre class="code">
118
- favorites = [
119
- { "topic" =&gt; "Interesting Comic Books",
120
- "items" =&gt; [
121
- { "title" =&gt; "Dropsie Avenue",
122
- "creator" =&gt; "Will Eisner"},
123
- { "title" =&gt; "Cerebus",
124
- "creator" =&gt; "Dave Sim"},
125
- { "title" =&gt; "Jar Of Fools",
126
- "creator" =&gt; "Jason Lutes"}
127
- ]},
128
- { "topic" =&gt; "Favorite Albums",
129
- "items" =&gt; [
130
- { "title" =&gt; "Amnesiac",
131
- "creator" =&gt; "Radiohead"},
132
- { "title" =&gt; "The Moon and Antarctica",
133
- "creator" =&gt; "Modest Mouse"},
134
- { "title" =&gt; "Dirt Track Date",
135
- "creator" =&gt; "Southern Culture On The Skids"},
136
- { "title" =&gt; "My Motor",
137
- "creator" =&gt; "Dorkweed"},
138
- { "title" =&gt; "Swordfishtrombones",
139
- "creator" =&gt; "Tom Waits"}
140
- ]}
141
- ]
142
- </pre>
143
-
144
- <p>Using objects in a list requires a little more research, but it&#8217;s
145
- still a practical solution. Say you&#8217;re trying to figure out how
146
- to use PageTemplate in an image gallery. You might have an Image class with
147
- accessors that look something like this:</p>
148
-
149
-
150
- <pre class="code">
151
- class Image
152
- attr_reader :url, :height, :width, :caption
153
- end
154
- </pre>
155
-
156
- <p>You can build your template armed with this knowledge.</p>
157
-
158
-
159
- <pre>
160
- [%in images%]
161
- &lt;td&gt;
162
- &lt;img src="[%var url%]" height="[%var height%]" width="[%var width%]" alt="[%var caption%]" /&gt;&lt;br /&gt;
163
- [%var caption%]
164
- &lt;/td&gt;
165
- [%endin%]
166
- </pre>
167
-
168
- Then, rather than waste precious minutes altering class
169
- <code>Image</code> to respond to hash-based access, you can
170
- assign a list of <code>Image</code> objects to the template list.
171
-
172
- <pre class="code">
173
- gallery = Gallery.new()
174
- # ...
175
- galleryPage['images'] = gallery.current.images
176
- </pre>
177
-
178
- <p>This approach definitely encourages maintaining a consistent
179
- interface. I wouldn&#8217;t want to go altering my template files (or
180
- telling the designer to alter her files) every time I get a bright
181
- idea for how <code>Image</code> should work.</p>
182
-
183
-
184
- You can also refer to public methods of the object in your
185
- template, but that&#8217;s still a bit shaky. The methods have to accept
186
- calls with no arguments or blocks (Ex:
187
- <code>image.thumbnail()</code> would be referenced as
188
- <code>[%var thumbnail%]</code>).
189
-
190
- <p>Once you&#8217;ve told your PageTemplate object which file to load and
191
- what values to remember, you&#8217;ll probably want to display the
192
- neat custom page.</p>
193
-
194
-
195
- <pre class="code">
196
- output = template.output
197
- print output
198
- </pre>
199
-
200
- <p>Of course, if you do things this way you&#8217;ll have to remember all of
201
- the <acronym title="Hypertext Transfer Protocol"><span class="caps">HTTP</span></acronym>
202
- header information. Life will be much easier for you if you just use
203
- the functionality provided by the standard <span class="caps">CGI</span> module for ruby.</p>
204
-
205
-
206
- <pre class="code">
207
- cgi.out { template.output }
208
- </pre>
209
-
210
- <h3>Including Files</h3>
211
-
212
-
213
- <p>PageTemplate lets you insert text from other files. Even better: PageTemplate
214
- will parse those files as templates, using your current Namespace. The only
215
- issue that you must be aware of as a developer is the search path used by
216
- PageTemplate.</p>
217
-
218
-
219
- <ul>
220
- <li>Variable includes</li>
221
- <li>Filenames, relative to the search path.</li>
222
- </ul>
223
-
224
-
225
- <p>Now I will explain each of these.</p>
226
-
227
-
228
- <h4>Variable Includes</h4>
229
-
230
-
231
- <pre>[%include weather%]</pre>
232
-
233
- <pre class="code">
234
- weather = some_file_path_returned_by_a_method()
235
- template['weather'] = weather
236
- </pre>
237
-
238
- <h4>Filenames</h4>
239
-
240
-
241
- <pre>[%include weather.html%]</pre>
242
-
243
- <p>The include path defaults to the script&#8217;s working directory (accessed via
244
- <code>Dir.getwd</code>). You can add additional paths if this isn&#8217;t good enough
245
- for you.</p>
246
-
247
-
248
- <pre class="code">
249
- template = PageTemplate.new(
250
- 'include_paths' =&gt; ["/var/www/templates"]
251
- )
252
- </pre>
253
-
254
- <p><code>template</code> now has an include path of the script&#8217;s working directory and <code>/var/www/templates/</code>.
255
- The include path Array is accessible via the <code>paths</code> accessor.</p>
256
-
257
-
258
- <pre class="code">
259
- template = PageTemplate.new()
260
- template.paths.source += [ 'templates/blue', 'templates/alpha' ]
261
- </pre>
262
-
263
- <h3>Digging Deeper</h3>
264
-
265
-
266
- <p>The stuff covered in this tutorial should remain pretty consistent
267
- through future versions. If you&#8217;re curious to see inside
268
- PageTemplate.rb, though, you will definitely want to go over the
269
- <a href="products/pagetemplate/doc/">reference pages</a>. It describes PageTemplate and the classes that back it
270
- up. Be warned, though: anything not described in this page is definitely
271
- subject to change, so your clever hack might be useless with the next release.
272
- That never stopped me, though. Go, have fun!</p>
273
-
274
-
275
- <h3>Creating Your Own Syntax</h3>
276
-
277
-
278
- <p>Syntax glossaries are high on the list of things I want to change,
279
- so I&#8217;m not going to write an extensive tutorial on creating your
280
- own custom syntax yet. For now, use the <a href="products/pagetemplate/doc/">reference pages</a> as a guideline.</p><hr />
281
-
282
- <p class="navbar">
283
- <a href="SiteMap.html">Sitemap</a> || <a href="index.html">PageTemplate</a>
284
- / The Programmer's Perspective</p>
285
-
286
- <h1>Yo!</h1>
287
- <hr />
288
- </body>
289
- </html>