Template Boxes
1. Multi-line actions and formatters
The main goal is that the user can move each argument on a own line for better readability.
- info boxes
- content templates
methods | syntax | dynamic | parsed | processing | folder |
---|---|---|---|---|---|
Action | {{name param... }} | yes | each non cached request | PostWacko | action/ |
Formatter | %%(type param... ) content%% | no | once | WackoFormatter | formatter/ |
These are the two favorite ways to expand the markup rules. Among other things, the use of these methods does not require a detailed analysis of the initial class of the Wacko formatter.
So you can write your own actions or a dedicated formatter which parses your predefined syntax.
-
{{tpl_name param... }}
-
%%(tpl param... ) content%%
Thus, whether you chose a action or a formatter, depends on the necessity to have methods for combining static and dynamic data, such as database queries, or not.
To make this approach expandable to whatever you like we just should treat wiki-pages as data objects.
Then one can use as I have mentioned before or any other kind of a new tool to work with such objects.
We have already page_langVARCHAR(5)
in pages table - to set language, and formattingVARCHAR(20)
that can be used to say that some pages are not ordinary wiki-pages but "data objects".
This requires some changes to catalog, revisions, history tracking tools etc. -- Elar9000
2. How to write your own content templates.
Very simple example without advanced array usage, functions, styles or filters.
2.1. Action
This action has no dynamic data, it serves here only as a example in comparison to the formatter below. Usually you don't want use a action for only static data.
{{tpl_movie title="A Civil Action" image="a_civil_action_poster.jpg" author="Jonathan Harr" country="United States" language="English" published="1998-12-25" runtime="115 minutes" starring= ... }}
action/tpl_movie.php
<?php
if (!defined('IN_WACKO'))
{
exit;
}
$info = <<<EOD
Description:
Displays a movie info box.
Usage:
{{movie
title="The Movie Title"
image="movie_poster.jpg"
author="Author Name"
country="Country"
language="Language"
published="2022-02-25"
runtime="120 minutes"
starring= ...
}}
EOD;
// set defaults
$help ??= 0;
$title ??= '';
$image ??= '';
$author ??= '';
$country ??= '';
$language ??= '';
$published ??= '';
$runtime ??= '';
// ...
if ($help)
{
$tpl->help = $this->help($info, 'tpl_movie');
return;
}
// args
// display movie infobox
{
$tpl->enter('m_');
// $tpl->var = $var or function with $var;
$tpl->title = $title;
$tpl->image = $this->link('file:/' . $image, '', $text);
$tpl->author = $author;
$tpl->country = $country;
$tpl->language = $language;
$tpl->published = $published;
$tpl->runtime = $runtime;
// ...
// include another action
# $tpl->include = $this->action('tpl_' . $name, $param);
$tpl->leave(); // m_
}
action/template/tpl_movie.tpl
[ === main === ] [ ' help ' ] [= m = <table class="usertable"> <tr> <th>Title[ ' _t: Title ' ]</th> <td>[ ' title ' ]</td> </tr> <tr> <td colspan="2">[ ' image ' ]</td> </tr> <tr> <th>Author[ ' _t: Author ' ]</th> <td>[ ' author ' ]</td> </tr> <tr> <th>Country[ ' _t: Country ' ]</th> <td>[ ' country ' ]</td> </tr> [ ' // more here ... ' ] </table> [ '' include // <--- output of Template sub-action '' ] =]
2.1.1. Example
tpl_movie
2.2. Formatter
%%(tpl_movie) title = A Civil Action image = a_civil_action_poster.jpg author = Jonathan Harr country = United States language = English published = 1998-12-25 runtime = 115 minutes starring = ... %%
<?php
if (!defined('IN_WACKO'))
{
exit;
}
// set defaults
# $options['type'] ??= 'none';
// get data
$lines = preg_split('/[\n]/u', $text);
$item = [];
foreach ($lines as $line)
{
// blank
if (preg_match('/^#|^\s*$/u', $line))
{
continue;
}
$_item = explode('=', $line);
{
// debug line
#Ut::debug_print_r($item);
$items = [
'author',
'country',
'description',
'image',
'language',
'published',
'runtime',
'title',
// ...
];
$key = trim($_item[0]);
if (in_array($key, $items))
{
$item[$key] = $_item[1];
}
}
}
// debug item
#Ut::debug_print_r($item);
// display movie infobox
{
$tpl->enter('m_');
// $tpl->var = $var or function with $var;
$tpl->title = $item['title'];
$tpl->image = $this->link('file:/' . $item['image'], '', 'nixda');
$tpl->author = $item['author'];
$tpl->country = $item['country'];
$tpl->language = $item['language'];
$tpl->published = $item['published'];
$tpl->runtime = $item['runtime'];
// ...
#$tpl->description = $this->format($description, 'wiki', ['post_wacko' => true]);
// include another action
# $tpl->include = ...;
$tpl->leave(); // m_
}
formatter/highlight/template/tpl_movie.tpl
[ === main === ] [= m = <table class="usertable"> <tr> <th>Title[ ' _t: Title ' ]</th> <td>[ ' title ' ]</td> </tr> <tr> <td colspan="2">[ ' image ' ]</td> </tr> <tr> <th>Author[ ' _t: Author ' ]</th> <td>[ ' author ' ]</td> </tr> <tr> <th>Country[ ' _t: Country ' ]</th> <td>[ ' country ' ]</td> </tr> [ ' // more here ... ' ] </table> [ '' include // <--- output of Template sub-action '' ] =]
2.2.1. Example
Title | A Civil Action |
---|---|
file:/a_civil_action_poster.jpg | |
Author | Jonathan Harr |
Country | United States |
Referring pages: