summaryrefslogtreecommitdiff
path: root/example
diff options
context:
space:
mode:
Diffstat (limited to 'example')
-rw-r--r--example/index.php58
-rw-r--r--example/templates/src/articles.html49
-rw-r--r--example/templates/src/custom_tags.tpl19
-rw-r--r--example/templates/src/master.html41
4 files changed, 167 insertions, 0 deletions
diff --git a/example/index.php b/example/index.php
new file mode 100644
index 0000000..3d2b1ca
--- /dev/null
+++ b/example/index.php
@@ -0,0 +1,58 @@
+<?php
+
+# Example program to demonstrate the STE...
+
+require_once(dirname(__FILE__) . "/../stupid_template_engine.php");
+
+# Initialize an STECore instance
+$ste = new \ste\STECore(
+ new \ste\FilesystemStorageAccess( # The STECore needs a StorageAccess implementation, we are using the FilesystemStorageAccess, which comes with STE.
+ dirname(__FILE__) . "/templates/src", # FilesystemStorageAccess needs a directory, where the Templates are...
+ dirname(__FILE__) . "/templates/transc" # ...and a directory for the transcompiled templates (write permissions needed).
+ )
+);
+
+# First, lets define some custom tags.
+
+# <ste:uppercase> will exchange all letters with their uppercase complement
+$ste->register_tag("uppercase",
+ function($ste, $params, $sub)
+ {
+ $text = $sub($ste); # Get the tags content
+ return strtoupper($text); # Return the new text.
+ }
+);
+
+# <ste:repeat> will repeat its content n times (<ste:for> could be used too, but i needed more examples :-P )
+$ste->register_tag("repeat",
+ function($ste, $params, $sub)
+ {
+ $output = "";
+ if(!is_numeric($params["n"]))
+ throw new Exception("Sorry, but parameter n must be a number...");
+
+ for($i = 0; $i < $params["n"]; ++$i)
+ $output .= $sub($ste);
+
+ return $output;
+ }
+);
+
+# assign some data
+$ste->vars["users"] = array(
+ array("name" => "Foo", "username" => "foo", "online" => true),
+ array("name" => "Bar", "username" => "bar", "online" => false),
+ array("name" => "Baz", "username" => "baz", "online" => true)
+);
+$ste->vars["title"] = "cool";
+$ste->vars["articles"] = array(
+ array("author" => "foo", "title" => "cool article", "timestamp" => 1316553353, "excerpt" => "bla", "full" => "blablabla"),
+ array("author" => "bar", "title" => "awesome", "timestamp" => 1316552000, "excerpt" => "...", "full" => ".........."),
+ array("author" => "baz", "title" => "<ingenious", "timestamp" => 1316551000, "excerpt" => "...", "full" => ".........."),
+ array("author" => "baz", "title" => "whatever...", "timestamp" => 1316550000, "excerpt" => "...", "full" => "..........")
+);
+
+# Execute the template and output the result
+echo $ste->exectemplate("articles.html");
+
+?>
diff --git a/example/templates/src/articles.html b/example/templates/src/articles.html
new file mode 100644
index 0000000..e007f3e
--- /dev/null
+++ b/example/templates/src/articles.html
@@ -0,0 +1,49 @@
+<ste:load name="custom_tags.tpl" />
+<ste:load name="master.html" />
+<ste:comment>Lets overwrite the content section</ste:comment>
+<ste:block name="content">
+ <h2>Some Articles</h2>
+ <ste:foreach_limit array="articles" value="article" max="3" counter="i">
+ <h3><ste:uppercase><ste:escape>$article[title]</ste:escape></ste:uppercase></h3>
+ <div class="author">Author: <ste:escape>$article[author]</ste:escape></div>
+ <div class="date"><ste:date timestamp="$article[timestamp]">d. M. Y, H:i:s</ste:date></div>
+ <div class="article_content">
+ <ste:if>
+ <ste:cmp var_a="i" op="eq" text_b="0" />
+ <ste:then>
+ <ste:comment>First entry, lets show the whole text</ste:comment>
+ $article[full]
+ </ste:then>
+ <ste:else>
+ $article[excerpt]
+ </ste:else>
+ </ste:if>
+ </div>
+ <hr />
+ </ste:foreach_limit>
+ <ste:comment>There are more than 3 articles?</ste:comment>
+ <ste:set var="articles_n"><ste:arraylen array="articles" /></ste:set>
+ <ste:if>
+ <ste:cmp var_a="articles_n" op="gt" text_b="3" />
+ <ste:then>
+ <p>There are <a href="#">more articles</a>.</p>
+ </ste:then>
+ </ste:if>
+
+ <h2>Some more useless demo stuff...</h2>
+ <h3>Counting from 10 to 0...</h3>
+ <p>but take only the even ones and multiply by 5...</p>
+ <ste:for start="10" stop="0" step="-1" counter="i">
+ <ste:if>
+ <ste:even>$i</ste:even>
+ <ste:then>
+ <ste:calc>$i * 5</ste:calc><br />
+ </ste:then>
+ </ste:if>
+ </ste:for>
+
+ <h3>Repeat some text...</h3>
+ <ste:repeat n="10">
+ <p>Bla</p>
+ </ste:repeat>
+</ste:block>
diff --git a/example/templates/src/custom_tags.tpl b/example/templates/src/custom_tags.tpl
new file mode 100644
index 0000000..7e821c5
--- /dev/null
+++ b/example/templates/src/custom_tags.tpl
@@ -0,0 +1,19 @@
+<ste:comment>A foreach that will break after 'max' iterations</ste:comment>
+<ste:mktag name="foreach_limit" mandatory="array|value|max">
+ <ste:foreach array="$_tag_parameters[array]" value="$_tag_parameters[value]" counter="i">
+ <ste:if>
+ <ste:cmp var_a="i" op="gte" var_b="_tag_parameters[max]" />
+ <ste:then>
+ <ste:break />
+ </ste:then>
+ </ste:if>
+
+ <ste:if>
+ $_tag_parameters[counter]
+ <ste:then>
+ <ste:set var="$_tag_parameters[counter]">$i</ste:set>
+ </ste:then>
+ </ste:if>
+ <ste:tagcontent />
+ </ste:foreach>
+</ste:mktag>
diff --git a/example/templates/src/master.html b/example/templates/src/master.html
new file mode 100644
index 0000000..fe6b1e6
--- /dev/null
+++ b/example/templates/src/master.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en">
+<head>
+ <title>?{$title|$title - example|example}</title><ste:comment>If $title given, set title to "$title - example", else "example"</ste:comment>
+ <style type="text/css">
+ * {
+ font-family: sans-serif;
+ }
+ .online {
+ color: #0a0;
+ }
+ .offline {
+ color: #555;
+ font-style: italic;
+
+ }
+ </style>
+
+</head>
+<body>
+ <h1>example</h1>
+
+ <div id="content">
+ <ste:block name="content">
+ Default content.
+ </ste:block>
+ </div>
+ <div id="otherstuff">
+ <ste:block name="otherstuff">
+ <h2>List of users</h2>
+ <ste:comment>Lets loop through the users...</ste:comment>
+ <ul>
+ <ste:foreach array="users" value="user">
+ <li class="?{$user[online]|online|offline}">$user[name] ($user[username])</li>
+ </ste:foreach>
+ </ul>
+ </ste:block>
+ </div>
+</body>
+</html>