Collecting my attempts to improve at tech, art, and life

PageTemplate - If, Else, and Elsif

Tags: pagetemplate coolnamehere

If

The if directive tells PageTemplate to only display a chunk of content when some condition is true. PageTemplate will skip the block and move on if the condition is false.

Syntax

[%if condition %]
  chunk
[%end if %]

Here is an example of if in use.

[%if pageowner %]
<a href="admin.cgi">Admin View</a>
[%end if %]

In this example, if the application tells PageTemplate that pageowner is true, PageTemplate inserts a link to an administrative page. Otherwise, nothing happens here.

Else

The else directive adds extra power to if, by indicating a chunk of content to use when a condition is not true.

Syntax

[%if value%]
  chunk
[%else%]
  alternate chunk
[%end if %]

Example

[%if login%]
<p>Welcome back, [%var login %]!</p>
<p><a href="logout.cgi">Log Out</a></p>
[%else %]
<form name="login" method="post">
  Login: <input type="text" name="login" /><br />
  Password: <input type="password" name="passwd" /><br />
  <input type="submit" value="Login!" />
</form>
[%end if %]

This is the situation where I use else directives the most. If the visitor is logged in to a Web application, she is shown a brief welcoming message. If not, then she will see a login form.

This example also shows a convenient approach to if conditions. We could make up a special logged_in variable, but since all we care about here is the presence of a login, we have PageTemplate test that as if it were a regular condition.

Elsif

There are many cases where a simple “yes” or “no” doesn’t do enough. You want to display something different in the same spot depending on whether or not different conditions are true. PageTemplate makes that a little easier with the elsif directive, which allows you to do exactly that by testing the truth of different variables.

Syntax

[%if condition1 %]
  Block 1
[%elsif condition2 %]
  Block 2
  ...
[%elsif conditionN> %]
  Block n
[%else %]
  Else Block
[%end if %]

Example

[%if cart.items %]
  <p>You have [%var cart.count %] items in your cart.</p>
[%elsif cart.empty %]
  <p>Your cart is empty.</p>
[%else %]
  <p>You have no cart. <a href="register.rb">Register</a> and get one!</p>
[%end if %]

Unless

Sometimes you want to ask if something is false. For example, you may want to show a login form in one spot if the user is not logged in, but nothing at all if he is logged in. That is exactly the sort of thing unless was intended for.

Syntax

[%unless condition %]
  Block
[%end unless %]

Example

[%unless user.has_donated %]
<p><a href="pay_up.cgi">Donate money, chump!</a></p>
[%end unless %]

Added to vault 2024-01-15. Updated on 2024-01-26