Zielsetzung
Ziel dieses Beitrags ist es Ihnen die Möglichkeiten aufzuzeigen, wie sie ein vollständig dynamische Formular-Vorlage mit Hilfe von TAL erstellen.
Inhalte
Unter anderem werden folgende Inhalte in diesem Anwendungsfall gezeigt:
- Formular-Felder und Labels werden dynamisch, entsprechend der Feld-Konfiguration des Formulars, erzeugt.
- Die verschiedenen Darstellungs-Optionen werden berücksichtigt.
- Bei Bedarf greift der Schutz auf Fremdeintragung.
- Bei Bedarf wird ein Captcha generiert.
- Bei Bedarf werden versehentliche doppelte Einträge verhindert.
- Fehler werden entweder in Listen gruppiert oder am Formular-Feld ausgegeben.
- Für die verschiedenen Limitierungen werde dynamische Hinweistexte generiert.
- Der Text des Absende-Buttons wird aus einem (Sprach-)Container geladen.
Anwendung
<html xmlns="http://www.w3.org/1999/xhtml">
<head tal:define="lang THIS/getContainer/1234567">
<title>${THIS/getTitle}</title>
<style tal:content="structure THIS/getBaseCSS" type="text/css">/*<![CDATA[*/
/*]]>*/
</style>
<style tal:content="structure THIS/getAdditionalCSS" type="text/css">/*<![CDATA[*/
/*]]>*/
</style>
<script type="text/javascript">
//<![CDATA[
function disableSubmitButtonAndSubmit() {
document.forms.profileform.submit.disabled = true;
document.forms.profileform.submit_helper = HTMLFormElement.prototype.submit;
document.forms.profileform.submit_helper();
}
//]]>
</script>
</head>
<body tal:define="lang THIS/getFormLanguage">
<img alt="" src="#" tal:attributes="src THIS/getResourceImageUrl" tal:condition="THIS/hasResourceImageUrl" />
<h1 tal:condition="not:equals:string:${THIS/getCurrentUser/getValues/FIRSTNAME}/">Hallo ${THIS/getCurrentUser/getValues/FIRSTNAME},</h1>
<p tal:condition="THIS/hasShortText">${THIS/getShortText}</p>
<div tal:condition="THIS/isMultipleSubmitProtectionEnabled" tal:define="global onSubmit string:return true;;" tal:omit-tag="true">
<div tal:define="global onSubmit string:disableSubmitButtonAndSubmit();;" tal:omit-tag="true"> </div>
</div>
<div tal:condition="THIS/hasErrors" tal:omit-tag="true">
<div tal:condition="THIS/isShowValidationErrorsAsList" tal:omit-tag="true">
<p>${THIS/getValidationErrorPrefixText}:</p>
<div tal:condition="THIS/hasMandatoryErrors" tal:omit-tag="true">
<p>fehlende Pflichtfelder</p>
<ul>
<li tal:repeat="attribute THIS/getMandatoryErrorAttributes">${attribute/getLabel}</li>
</ul>
</div>
<div tal:condition="THIS/hasValidationErrors" tal:omit-tag="true">
<p>ungültige Eingaben</p>
<ul>
<li tal:repeat="attribute THIS/getValidationErrorAttributes">${attribute/getLabel}</li>
</ul>
</div>
<div tal:condition="THIS/hasCaptchaError" tal:omit-tag="true">
<p>Bitte bestätigen Sie das Captcha!</p>
</div>
</div>
<div tal:condition="THIS/hasDuplicationErrors" tal:omit-tag="true">
<p tal:condition="THIS/isShowDuplicationErrorText">${THIS/getDuplicationErrorText}</p>
<p tal:condition="not:THIS/isShowDuplicationErrorText">Profil bereits vorhanden</p>
</div>
<div tal:condition="THIS/hasIdentityErrors" tal:omit-tag="true">
<p tal:condition="THIS/isShowIdentityErrorText">${THIS/getIdentityErrorText}</p>
<p tal:condition="not:THIS/isShowIdentityErrorText">Unbekanntes Profil</p>
</div>
<div tal:condition="THIS/hasAutomatedEntryProtectionError" tal:omit-tag="true">
<p>Cookies müssen aktiviert sein</p>
</div>
</div>
<div tal:condition="THIS/isSubscriptionLimitSet" tal:omit-tag="true">
<p>Von ${THIS/getSubscriptionLimitCount} Plätzen sind bereits ${THIS/getSuccessfulSubscriptions} belegt. Es sind noch ${THIS/getSubscriptionLimitLeft} offen.</p>
</div>
<div tal:condition="THIS/isSubscriptionLimitStartTimeSet" tal:omit-tag="true">
<p tal:condition="THIS/isSubscriptionLimitEndTimeSet">Die Registierung ist bereits seit ${THIS/getTimeIntervalSinceSubscriptionLimitStarts} offen und bleibt es noch für weitere ${THIS/getTimeIntervalUntilSubscriptionLimitEnds}.</p>
<p tal:condition="not:THIS/isSubscriptionLimitEndTimeSet">Die Registierung ist bereits seit ${THIS/getTimeIntervalSinceSubscriptionLimitStarts} offen.</p>
</div>
<div tal:condition="not:THIS/isSubscriptionLimitStartTimeSet" tal:omit-tag="true">
<p tal:condition="THIS/isSubscriptionLimitEndTimeSet">Die Registierung ist noch ${THIS/getTimeIntervalUntilSubscriptionLimitEnds} offen.</p>
</div>
<form accept-charset="utf-8" action="{$FORM_ACTION}" id="profileform" method="post" name="profileform" tal:attributes="onsubmit onSubmit">
<input name="name" tal:attributes="value THIS/getCsrfToken; name THIS/getCsrfTokenName;" tal:condition="THIS/isAutomatedEntryProtectionEnabled" type="hidden" value="value" />
<table>
<tbody>
<tr tal:repeat="row THIS/getOrderedAttributes">
<td tal:repeat="attribute row">
<div tal:replace="structure attribute/renderLabelHTML"> </div>
<div tal:replace="structure attribute/renderWidgetHTML"> </div>
<div tal:condition="not:THIS/isShowValidationErrorsAsList" tal:omit-tag="true">
<div class="errormessage" tal:condition="attribute/hasValidationError">${attribute/getValidationErrorText}</div>
<div class="errormessage" tal:condition="attribute/hasMandatoryError">Bitte ausfüllen</div>
</div>
</td>
</tr>
<tr>
<td>
<label> </label>
<button name="action" type="submit" tal:content="lang/getAttributeByName/SUBMITTEXT"> </button>
</td>
</tr>
<tr>
<td tal:content="structure THIS/renderCaptcha"> </td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Formular</title>
<style type="text/css">
body {
padding: 1em;
margin: 0;
color: black;
background-color: white;
}
body,
div,
td,
th,
input,
select,
textarea {
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt
}
#shorttext {
padding: 1em 0pt;
}
label {
margin-right: 0.2em;
margin-bottom: 0.2em;
}
td,
th {
vertical-align: top;
}
th {
text-align: left;
font-weight: normal;
}
label.mandatory {
font-weight: bold;
}
input,
select,
textarea {
border: 1px solid #CCCCCC;
background-color: white;
color: black;
width: 14em;
margin-right: 0.2em;
}
.validationerror {
background-color: #FFEEDD;
}
.mandatoryerror {
background-color: #FFFFCC;
}
label.validationerror,
label.mandatoryerror {
background-color: transparent;
font-weight: bold;
}
textarea {
height: 5em;
}
input.submit,
input.checkbox {
width: auto;
}
input.checkbox {
border: none;
background-color: transparent;
}
input.submit {
border: 1px solid #333333;
}
input.attributeaddress,
input.attributecity {
width: 10em
}
input.attributestreetnumber,
input.attributezipcode {
width: 4em
}
input.attributephoneprefix,
input.attributephonenumber,
input.attributefaxprefix,
input.attributefaxnumber,
select.attributemobilenetwork,
input.attributemobilenumber {
width: 7em;
}
select.dayselect,
select.monthselect,
select.hourselect,
select.minuteselect {
width: 4em;
}
.yearselect {
width: 5em;
}
#errorlist,
#identityerrors,
#duplicateerrors,
#mandatoryerrors {
color: #933;
border: 1px solid #933;
padding: 1em;
margin-bottom: 1em;
}
</style>
<style type="text/css">
form {
width: 80em;
border: 1px solid gainsboro;
}
input,
select,
button {
margin: 0 0 1em 1em;
}
label {
float: left;
text-align: right;
width: 10em;
}
.button {
margin-left: 11em;
}
</style>
<script type="text/javascript">
//<![CDATA[
function disableSubmitButtonAndSubmit() {
document.forms.profileform.submit.disabled = true;
document.forms.profileform.submit_helper = HTMLFormElement.prototype.submit;
document.forms.profileform.submit_helper();
}
//]]>
</script>
</head>
<body><img alt="" src="/art_resource.php?sid=dse06.bkndcs" />
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>
<p>Von 100 Plätzen sind bereits 1 belegt. Es sind noch 99 offen.</p>
<p>Die Registierung ist bereits seit 3 Tage, 22 Stunden, 8 Minuten offen und bleibt es noch für weitere 15 Tage, 5 Stunden, 33 Minuten.</p>
<form accept-charset="utf-8" action="https://scnem.com/art_resource.php?sid=dxf7f.2oba410" id="profileform" method="post" name="profileform" onsubmit="disableSubmitButtonAndSubmit();">
<input name="csrftoken" type="hidden" value="YlgmIdRXfkdTDIX3S2ZhDQ==" />
<table>
<tbody>
<tr>
<td>
<label class="attributecompany typeinput" for="form_COMPANY">Firma</label>
<input type="text" name="form_COMPANY" id="form_COMPANY" class="attributecompany typeinput" value="" />
</td>
</tr>
<tr>
<td>
<label class="attributesalutation typesalutation" for="form_SALUTATION">Anrede</label>
<select name="form_SALUTATION" id="form_SALUTATION" class="attributesalutation typesalutation">
<option value="0" selected="selected">-</option>
<option value="1">Frau</option>
<option value="2">Herr</option>
<option value="3">Familie</option>
<option value="4">Firma</option>
</select>
</td>
<td>
<label class="attributefirstname typeinput mandatory" for="form_FIRSTNAME">Vorname</label>
<input type="text" name="form_FIRSTNAME" id="form_FIRSTNAME" class="attributefirstname typeinput mandatory" value="" />
</td>
<td>
<label class="attributename typeinput mandatory" for="form_NAME">Name</label>
<input type="text" name="form_NAME" id="form_NAME" class="attributename typeinput mandatory" value="" />
</td>
</tr>
<tr>
<td>
<label class="attributephonenumber typeinput" for="form_PHONENUMBER">Tel.-Nummer</label>
<input type="text" name="form_PHONENUMBER" id="form_PHONENUMBER" class="attributephonenumber typeinput" value="" />
</td>
</tr>
<tr>
<td>
<label class="attributeaddress typeinput" for="form_ADDRESS">Strasse</label>
<input type="text" name="form_ADDRESS" id="form_ADDRESS" class="attributeaddress typeinput" value="" />
</td>
<td>
<label class="attributestreetnumber typeinput" for="form_STREETNUMBER">Hausnummer</label>
<input type="text" name="form_STREETNUMBER" id="form_STREETNUMBER" class="attributestreetnumber typeinput" value="" />
</td>
</tr>
<tr>
<td>
<label class="attributezipcode typezipcode" for="form_ZIPCODE">PLZ</label>
<input type="text" name="form_ZIPCODE" id="form_ZIPCODE" class="attributezipcode typezipcode" value="" />
</td>
<td>
<label class="attributecity typeinput" for="form_CITY">Ort</label>
<input type="text" name="form_CITY" id="form_CITY" class="attributecity typeinput" value="" />
</td>
</tr>
<tr>
<td>
<label class="attributecountry typecountry" for="form_COUNTRY">Land</label>
<select name="form_COUNTRY" id="form_COUNTRY" class="attributecountry typecountry">
<option value="0" selected="selected">-</option>
<option value="62">Afghanistan</option>
<option value="63">Albanien</option>
<option value="64">Algerien</option>
<option value="128">Amerikanisch-Samoa</option>
<option value="129">Amerikanische Jungferninseln</option>
<option value="60">Anderes</option>
<option value="65">Andorra</option>
<option value="66">Angola</option>
<option value="130">Anguilla</option>
<option value="131">Antarktis</option>
<option value="132">Antigua und Barbuda</option>
<option value="134">Argentinien</option>
<option value="67">Armenien</option>
<option value="135">Aruba</option>
<option value="115">Australien</option>
<option value="68">Azerbaijan</option>
<option value="136">Bahamas</option>
<option value="69">Bahrain</option>
<option value="70">Bangladesh</option>
<option value="137">Barbados</option>
<option value="71">Belarus</option>
<option value="15">Belgien</option>
<option value="138">Belize</option>
<option value="72">Benin</option>
<option value="262">Bermuda</option>
<option value="139">Bhutan</option>
<option value="140">Bolivien</option>
<option value="29">Bosnien und Herzegowina</option>
<option value="73">Botswana</option>
<option value="142">Bouvetinsel</option>
<option value="124">Brasilien</option>
<option value="143">Britische Jungferninseln</option>
<option value="144">Britisches Territorium im Indischen Ozean</option>
<option value="145">Brunei Darussalam</option>
<option value="30">Bulgarien</option>
<option value="74">Burkina Faso</option>
<option value="146">Burundi</option>
<option value="147">Ceuta, Melilla</option>
<option value="125">Chile</option>
<option value="32">China</option>
<option value="148">Cookinseln</option>
<option value="149">Costa Rica</option>
<option value="265">Curaçao</option>
<option value="150">Côte d'Ivoire</option>
<option value="188">Demokratische Republik Kongo</option>
<option value="1">Deutschland</option>
<option value="151">Dominica</option>
<option value="152">Dominikanische Republik</option>
<option value="153">Dschibuti</option>
<option value="16">Dänemark</option>
<option value="154">Ecuador</option>
<option value="155">El Salvador</option>
<option value="156">Eritrea</option>
<option value="34">Estland</option>
<option value="157">Falklandinseln</option>
<option value="159">Fidschi</option>
<option value="17">Finnland</option>
<option value="18">Frankreich</option>
<option value="160">Französisch-Guayana</option>
<option value="161">Französisch-Polynesien</option>
<option value="162">Französische Süd- und Antarktisgebiete</option>
<option value="158">Färöer</option>
<option value="163">Gabun</option>
<option value="79">Gambia</option>
<option value="80">Georgien</option>
<option value="81">Ghana</option>
<option value="164">Gibraltar</option>
<option value="165">Grenada</option>
<option value="19">Griechenland</option>
<option value="20">Großbritannien</option>
<option value="166">Grönland</option>
<option value="167">Guadeloupe</option>
<option value="168">Guam</option>
<option value="169">Guatemala</option>
<option value="170">Guernsey</option>
<option value="171">Guinea</option>
<option value="172">Guinea-Bissau</option>
<option value="173">Guyana</option>
<option value="174">Haiti</option>
<option value="175">Heard- und McDonald-Inseln</option>
<option value="176">Honduras</option>
<option value="116">Hongkong</option>
<option value="82">Indien</option>
<option value="83">Indonesien</option>
<option value="177">Insel Man</option>
<option value="84">Iran</option>
<option value="85">Iraq</option>
<option value="21">Irland</option>
<option value="35">Island</option>
<option value="36">Israel</option>
<option value="22">Italien</option>
<option value="178">Jamaika</option>
<option value="37">Japan</option>
<option value="179">Jersey</option>
<option value="38">Jordanien</option>
<option value="180">Kaimaninseln</option>
<option value="181">Kambodscha</option>
<option value="75">Kamerun</option>
<option value="31">Kanada</option>
<option value="182">Kanarische Inseln</option>
<option value="183">Kap Verde</option>
<option value="264">Karibische Niederlande</option>
<option value="86">Kazakhstan</option>
<option value="87">Kenya</option>
<option value="89">Kirgisistan</option>
<option value="184">Kiribati</option>
<option value="185">Kokosinseln</option>
<option value="186">Kolumbien</option>
<option value="187">Komoren</option>
<option value="77">Kongo</option>
<option value="263">Kosovo</option>
<option value="40">Kroatien</option>
<option value="189">Kuba</option>
<option value="88">Kuwait</option>
<option value="190">Laos</option>
<option value="191">Lesotho</option>
<option value="41">Lettland</option>
<option value="42">Libanon</option>
<option value="192">Liberia</option>
<option value="90">Libyen</option>
<option value="91">Liechtenstein</option>
<option value="43">Litauen</option>
<option value="23">Luxemburg</option>
<option value="193">Macao</option>
<option value="194">Madagaskar</option>
<option value="92">Malawi</option>
<option value="121">Malaysia</option>
<option value="195">Malediven</option>
<option value="196">Mali</option>
<option value="45">Malta</option>
<option value="95">Marokko</option>
<option value="197">Marshallinseln</option>
<option value="198">Martinique</option>
<option value="199">Mauretanien</option>
<option value="200">Mauritius</option>
<option value="201">Mayotte</option>
<option value="44">Mazedonien</option>
<option value="122">Mexico</option>
<option value="202">Mikronesien</option>
<option value="93">Moldawien</option>
<option value="94">Monaco</option>
<option value="203">Mongolei</option>
<option value="204">Montenegro</option>
<option value="205">Montserrat</option>
<option value="96">Mozambique</option>
<option value="206">Myanmar</option>
<option value="207">Namibia</option>
<option value="208">Nauru</option>
<option value="97">Nepal</option>
<option value="209">Neukaledonien</option>
<option value="117">Neuseeland</option>
<option value="210">Nicaragua</option>
<option value="24">Niederlande</option>
<option value="211">Niederländische Antillen</option>
<option value="98">Niger</option>
<option value="99">Nigeria</option>
<option value="212">Niue</option>
<option value="120">Nord-Korea</option>
<option value="214">Norfolkinsel</option>
<option value="61">Norwegen</option>
<option value="213">Nördliche Marianen</option>
<option value="46">Oman</option>
<option value="215">Osttimor</option>
<option value="100">Pakistan</option>
<option value="216">Palau</option>
<option value="101">Palästinensische Gebiete</option>
<option value="217">Panama</option>
<option value="218">Papua-Neuguinea</option>
<option value="219">Paraguay</option>
<option value="220">Peru</option>
<option value="221">Philippinen</option>
<option value="222">Pitcairninseln</option>
<option value="47">Polen</option>
<option value="25">Portugal</option>
<option value="223">Puerto Rico</option>
<option value="102">Qatar</option>
<option value="225">Ruanda</option>
<option value="48">Rumänien</option>
<option value="49">Russland</option>
<option value="224">Réunion</option>
<option value="227">Saint-Barthélemy</option>
<option value="228">Saint-Martin</option>
<option value="226">Salomonen</option>
<option value="229">Samoa</option>
<option value="230">San Marino</option>
<option value="50">Saudi-Arabien</option>
<option value="26">Schweden</option>
<option value="3">Schweiz</option>
<option value="232">Senegal</option>
<option value="39">Serbien</option>
<option value="233">Seychellen</option>
<option value="234">Sierra Leone</option>
<option value="114">Singapur</option>
<option value="267">Sint Maarten (niederl. Teil)</option>
<option value="51">Slowakei</option>
<option value="52">Slowenien</option>
<option value="235">Somalia</option>
<option value="27">Spanien</option>
<option value="103">Sri Lanka</option>
<option value="236">St. Helena</option>
<option value="237">St. Kitts und Nevis</option>
<option value="238">St. Lucia</option>
<option value="239">St. Pierre und Miquelon</option>
<option value="240">St. Vincent und die Grenadinen</option>
<option value="104">Sudan</option>
<option value="242">Suriname</option>
<option value="243">Svalbard und Jan Mayen</option>
<option value="105">Swaziland</option>
<option value="106">Syrien</option>
<option value="231">São Tomé und Príncipe</option>
<option value="118">Süd-Korea</option>
<option value="126">Südafrika</option>
<option value="241">Südgeorgien und die Südlichen Sandwichinseln</option>
<option value="266">Südsudan</option>
<option value="244">Tadschikistan</option>
<option value="119">Taiwan</option>
<option value="107">Tanzania</option>
<option value="245">Thailand</option>
<option value="246">Togo</option>
<option value="247">Tokelau</option>
<option value="248">Tonga</option>
<option value="249">Trinidad und Tobago</option>
<option value="250">Tschad</option>
<option value="53">Tschechien</option>
<option value="55">Tunesien</option>
<option value="251">Turkmenistan</option>
<option value="252">Turks- und Caicosinseln</option>
<option value="253">Tuvalu</option>
<option value="54">Türkei</option>
<option value="57">USA</option>
<option value="108">Uganda</option>
<option value="109">Ukraine</option>
<option value="56">Ungarn</option>
<option value="254">United States Minor Outlying Islands</option>
<option value="255">Uruguay</option>
<option value="110">Uzbekistan</option>
<option value="256">Vanuatu</option>
<option value="257">Vatikanstadt</option>
<option value="258">Venezuela</option>
<option value="58">Vereinigte Arabische E.</option>
<option value="123">Vietnam</option>
<option value="259">Wallis und Futuna</option>
<option value="260">Weihnachtsinsel</option>
<option value="261">Westsahara</option>
<option value="111">Yemen</option>
<option value="112">Zambia</option>
<option value="76">Zentralafrikanische Republik</option>
<option value="113">Zimbabwe</option>
<option value="59">Zypern</option>
<option value="28">Ägypten</option>
<option value="133">Äquatorialguinea</option>
<option value="78">Äthiopien</option>
<option value="127">Åland</option>
<option value="2">Österreich</option>
</select>
</td>
</tr>
<tr>
<td>
<label class="attributeemail typeemail mandatory" for="form_EMAIL">eMail</label>
<input type="text" name="form_EMAIL" id="form_EMAIL" class="attributeemail typeemail mandatory" value="" />
</td>
</tr>
<tr>
<td>
<label> </label>
<button name="action" type="submit">Abschicken</button>
</td>
</tr>
<tr>
<td>
<script type="text/javascript" src="https://www.google.com/recaptcha/api.js"></script>
<div class="g-recaptcha" data-sitekey="6LfPKisUAAAAAKa0Aym-r82nonuuLititQIxLN8R"></div>
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
Folgende Funktionen kommen zur Anwendung:
- Formular:getAdditionalCSS
- Formular:getBaseCSS
- Formular:getContainer
- Formular:getCsrfToken
- Formular:getCsrfTokenName
- Formular:getCurrentUser
- Formular:getDuplicationErrorText
- Formular:getIdentityErrorText
- Formular:getMandatoryErrorAttributes
- Formular:getOrderedAttributes
- Formular:getResourceImageUrl
- Formular:getShortText
- Formular:getSubmitLabel
- Formular:getSubscriptionLimitCount
- Formular:getSubscriptionLimitLeft
- Formular:getSuccessfulSubscriptions
- Formular:getTimeIntervalSinceSubscriptionLimitStarts
- Formular:getTimeIntervalUntilSubscriptionLimitEnds
- Formular:getTitle
- Formular:getValidationErrorAttributes
- Formular:getValidationErrorPrefixText
- Formular:hasAutomatedEntryProtectionError
- Formular:hasCaptchaError
- Formular:hasDuplicationErrors
- Formular:hasErrors
- Formular:hasIdentityErrors
- Formular:hasMandatoryErrors
- Formular:hasResourceImageUrl
- Formular:hasShortText
- Formular:hasValidationErrors
- Formular:isAutomatedEntryProtectionEnabled
- Formular:isMultipleSubmitProtectionEnabled
- Formular:isShowDuplicationErrorText
- Formular:isShowIdentityErrorText
- Formular:isShowValidationErrorsAsList
- Formular:isSubscriptionLimitEndTimeSet
- Formular:isSubscriptionLimitSet
- Formular:isSubscriptionLimitStartTimeSet
- Formular:renderCaptcha
- Formular-Attribut:renderLabelHTML
- Formular-Attribut:renderWidgetHTML
- Formular-Attribut:getLabel
- Formular-Attribut:hasValidationError
- Formular-Attribut:getValidationErrorText
- Formular-Attribut:hasMandatoryError
Standard TAL-Funktionen und Modifier (offizielle TAL-Dokumentation)
- tal:define (offizielle TAL-Dokumentation)
- tal:condition (offizielle TAL-Dokumentation)
- tal:repeat (offizielle TAL-Dokumentation)
- tal:omit-tag (offizielle TAL-Dokumentation)
- tal:content (offizielle TAL-Dokumentation)
- tal:attributes (offizielle TAL-Dokumentation)
- string: (offizielle TAL-Dokumentation)
- structure (offizielle TAL-Dokumentation)