Kapitel 13. Anwendungsbeispiele

Inhaltsverzeichnis

13.1. Seitenvorlagen für die unterschiedlichen Seitentypen
13.1.1. Blogseiten (WCOM_BLOG)
13.1.2. Termine (WCOM_EVENT)
13.1.3. Individuelle Formulare (WCOM_GENERATOR_FORM)
13.1.4. Einfache Formulare (WCOM_SIMPLE_FORM)
13.1.5. Einfaches Gästebuch (WCOM_SIMPLE_GUESTBOOK)
13.1.6. Termine (WCOM_SIMPLE_DATE)
13.1.7. Einfache Inhaltsseiten (WCOM_SIMPLE_PAGE)
13.1.8. Externer Verweis (WCOM_URL)
13.2. Navigationen
13.2.1. Einfache Navigation
13.2.2. Verschachtelte Navigationen
13.3. Smarty Plugins
13.3.1. Breadcrumb
13.3.2. Get Glossary
13.3.3. Tag Cloud
13.3.4. Social Bookmarks
13.4. Sonstiges
13.4.1. Geschützte Seiten (Passwortschutz)

13.1. Seitenvorlagen für die unterschiedlichen Seitentypen

Die hier gelisteten Anwendungsbeispiele dienen als Blaupausen für Ihre Abschnitt 8.3, „Seitenvorlagen“. Nachdem Sie die entsprechenden inhaltlichen Seiten angelegt haben, kopieren Sie die folgenden Anwendungsbeispiele und fügen sie in Ihre jeweils angelegten Seitenvorlagen ein.

Wo es erforderlich ist auf Besonderheiten in der Beziehung zwischen Seitenvorlage und den Seiteninhalten einzugehen, finden Sie in den Quelltextdateien detaillierte Kommentare. Die Anwendungsbeispiele für die Seitenvorlagen beinhalten dort HTML-Markup, wo es zum Verständnis der Seitenvorlage sinnvoll ist. Das hier abgebildete Markup hat zumeist Beispielcharakter. Dieses HTML-Markup kann (und sollte) von Ihnen an Ihre Bedürfnisse angepasst werden.

[Anmerkung] Anmerkung

Beachten Sie, dass die Anwendungsbeispiele nur die Bereiche umfassen, die für die jeweilige Vorlage spezifischen Variablen und Abfragen enthält. Das für eine Webseite notwendige HTML-Gerüst ist nicht Teil dieser Beispiele.

Ausgenommen hiervon sind sämtliche Vorlagenbeispiele, die Feeds (RSS 2.0, Atom 1.0) abbilden. Diese fügen Sie bitte ohne weiteren HTML-Kontext in Ihre Vorlagen ein. An den entsprechenden Stellen weisen Hinweise hierauf hin.

Beispiel: Einfügen der Anwendungsbeispiele in einem HTML(5)-Kontext

<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title></title>
</head>

<body>

{* Einfügen der Vorlagenbeispiele *}

</body>
</html>	

13.1.1. Blogseiten (WCOM_BLOG)

Seiten vom Typ WCOM_BLOG stellen die typische Funktionalität eines Weblogs bereit. Neben der Verschlagwortung von Beiträgen und der Kommentarfunktion, können Feeds im Format RSS 2.0 und Atom 1.0 für die Besucher der Seiten bereitgestellt werden.

Neben dem Einsatz als klassisches Blog, ist dieser Seitentyp ebenfalls dazu geeignet, um bspw. Newsseiten (deren Einträge als Feed abonnierbar sind) abzubilden.

13.1.1.1. Blog Übersichtsseite

Vorlagentyp: blog_index

{* Wieviel Blog-Beiträge sollen pro Seite angezeigt werden? *}
{assign var="LIMIT" value="8"}

{* Blogbeiträge nachladen *}
{select_named ns="Content" class="BlogPosting" method="selectBlogPostings" var="blog_postings" order_macro="DATE_ADDED:DESC" page=$page.id tag_word_url=$request.tag start=$request.start limit=$LIMIT draft=0}

{* Foreach Schleife zum Auslesen der Blogeinträge *}
{foreach from=$blog_postings item="_blog_posting"}
<h2>{$_blog_posting.title}</h2>
<p>{$_blog_posting.user_name} am {$_blog_posting.date_added|date_format:"%d.%m.%Y"} &ndash;
<a href="{get_url page_id=$page.id action=Item posting_id=$_blog_posting.id}">{if $_blog_posting.comment_count == 0}Keine Kommentare{elseif $_blog_posting.comment_count == 1}Ein Kommentar{else}{$_blog_posting.comment_count} Kommentare{/if}</a></p>

{* Wenn Inhalte vorhanden, zeige die Zusammenfassung, sonst den Inhalt des Beitrags *}
{if !empty($_blog_posting.summary_raw)}
{$_blog_posting.summary}
<p><a href="{get_url page_id=$page.id action=Item posting_id=$_blog_posting.id}">mehr zum Thema {$_blog_posting.title}</a></p>
{else}
{$_blog_posting.content}
{/if}

{* Wenn der Beitrag verschlagwortet wurde, werden hier die Tags gelistet *}
{if $_blog_posting.tag_count > 0}
<p>Abgelegt unter:</p>
<ul>
  {foreach from=$_blog_posting.tag_array|unserialize item=_tag}
  {if $_tag.word_url == $request.tag}
  <li>{$_tag.word}</li>
  {else}
  <li><a href="{get_url page_id=$page.id action=Index tag_word=$_tag.word_url}">{$_tag.word}</a></li>
  {/if}
  {/foreach}
</ul>
{/if}

{* Ende der Foreach Schleife zum Auslesen der Blogeinträge *}
{/foreach}

{* Pager *}
{select_named ns="Content" class="BlogPosting" method="countBlogPostings"
var="blog_posting_count" tag_word_url=$request.tag draft=0 page=$page.id}

{page_index var="page_index" item_count=$blog_posting_count interval=$LIMIT}

{if !empty($page_index) && $blog_posting_count > $LIMIT}
<ul>
  {foreach from=$page_index item=_item}
  {if $_item.self == $request.start}
  <li>{$_item.page}</li>
  {else}
  <li><a href="{get_url page_id=$page.id action=Index tag_word=$request.tag start=$_item.self}">{$_item.page}</a></li>
  {/if}
  {/foreach}
</ul>
{/if}
{* EOF Pager *}

13.1.1.2. Blog Eintragsseite

Vorlagentyp: blog_item

{* Titel des Beitrags *}
<h2>{$blog_posting.title}</h2>

{* Meta-Daten des Beitrags *}
<p>{$blog_posting.user_name} am {$blog_posting.date_added|date_format:"%d.%m.%Y"} &ndash; {if $blog_posting.comment_count == 0}Keine Kommentare{elseif $blog_posting.comment_count == 1}Ein Kommentar{else}{$blog_posting.comment_count} Kommentare{/if}</p>

{* Zeige die Zusammenfassung an, wenn das Feld nicht leer ist *}
{if !empty($blog_posting.summary_raw)}
{$blog_posting.summary}
{/if}

{* Inhalt des Beitrags *}
{$blog_posting.content}

{select_named ns="Community" class="BlogComment" method="selectBlogComments" var="blog_comments" posting=$blog_posting.id order_macro="DATE_ADDED"}

{if !empty($blog_comments)}
{select_named ns="Community" class="BlogComment" method="countBlogComments" var="blog_comment_count"
posting=$blog_posting.id}

<h3>{if $blog_comment_count == 1}{$blog_comment_count} Kommentar{else}{$blog_comment_count} Kommentare{/if}</h3>
{foreach from=$blog_comments item=_comment}
{$_comment.content}
<p>{if !empty($_comment.homepage)}<a href="{$_comment.homepage}">{/if}{$_comment.name|escape:"html"}{if !empty($_comment.homepage)}</a>{/if} am {$_comment.date_added|date_format:"%d.%m.%Y"}</p>
{/foreach}
{/if}

{if $blog_posting.comments_enable == 1}
<h2>Kommentar hinzufügen</h2>

{* Beispiel:  XHTML als Textkonverter für Kommentareinträge *}
<p>Bitte füllen Sie alle Felder mit einem * aus. Ihre E-Mail-Adresse
wird nicht ver&ouml;ffentlicht. (X)HTML ist erlaubt.</p>

{* Beispiel: MARKDOWN als Textkonverter für Kommentareinträge *}
<p>Bitte füllen Sie alle Felder mit einem * aus. Ihre E-Mail-Adresse
wird nicht ver&ouml;ffentlicht. HTML ist nicht erlaubt, dafür
<a href="http://daringfireball.net/projects/markdown/syntax">Markdown</a>.</p>

{* Beispiel: TEXTILE als Textkonverter für Kommentareinträge *}
<p>Bitte füllen Sie alle Felder mit einem * aus. Ihre E-Mail-Adresse
wird nicht ver&ouml;ffentlicht. HTML ist nicht erlaubt, dafür
<a href="http://textism.com/tools/textile/">Textile</a>.</p>

{if !empty($form.errors)}
<ul>
{foreach from=$form.errors item="error"}
<li>{$error}</li>
{/foreach}
</ul>
{/if}

{if $session.form_submitted == 1}
<h2>Danke für Ihren Kommentar!</h2>
{/if}

<form {$form.attributes}>
{$form.javascript}

<fieldset>
{$form.hidden}

<label for="name">{$form.name.label}{qt el=$form.name}</label> {$form.name.html}<br />
<label for="email">{$form.email.label}{qt el=$form.email}</label> {$form.email.html}<br />
<label for="homepage">{$form.homepage.label}{qt el=$form.homepage}</label> {$form.homepage.html}<br />
<label for="comment">{$form.comment.label}{qt el=$form.comment}</label> {$form.comment.html}<br />

{* Beispiel: Wenn ein numerische Captcha genutzt werden soll *}
<p>Zur Spamvermeidung nutzt das Formular ein sogenanntes 
<a title="Externer Link zu Wikipedia - Begriffserklärung" href="http://de.wikipedia.org/wiki/Captcha">Captcha</a>. Bitte tragen Sie das Ergebnis der Rechenaufgabe in das nachfolgende Feld ein (Beispiele: <em>max(3,5)</em> = <strong>5</strong>; <em>min(2,8)</em> = <strong>2</strong>; <em>3 + 5</em> = <strong>8</strong>).</p>
<p><strong>{$captcha}</strong></p>
<label for="_qf_captcha">&nbsp;</label>{$form._qf_captcha.html}<br />

{* Beispiel: Wenn ein Bild-Captcha genutzt werden soll *}
<p>Zur Spamvermeidung nutzt das Formular ein sogenanntes <a title="Externer Link zu Wikipedia - Begriffserklärung"
 href="http://de.wikipedia.org/wiki/Captcha">Captcha</a>. Bitte tragen Sie die Zeichenfolge in das nachfolgende Feld ein.</p>
<p><img src="{$captcha}" width="200" height="60" alt="Captcha" /></p>
<label for="_qf_captcha">{$form._qf_captcha.label}</label> {$form._qf_captcha.html}<br />

{$form.submit.html}
</fieldset>
</form>

{/if}
[Anmerkung] Anmerkung

Für jeden Blog-Eintrag einer Blog-Seite kann festgelegt werden, ob Kommentare zu diesem erlaubt sind oder nicht (Kommentare?).

Die Einstellungen für Kommentare von Blog-Beiträgen erreichen Sie über den Navigationsbereich Community und dort im Unterbereich Community-Einstellungen. Dort legen Sie u.a. fest welcher Textkonverter in den Kommentaren zum Einsatz kommt und ob mit Captcha nutzen ein Spam-Schutz eingesetzt werden soll.

Alle dort gemachten Angaben gelten übergreifend für die Kommentare aller angelegten Seiten vom Seitentyp WCOM_BLOG.

13.1.1.3. Blog Jahresarchiv

Vorlagentyp: blog_archive_year

{* Nachladen der Blog Einträge nach Monatsvorkommen auf jeweils ein Jahr bezogen *}
{select_named ns="Content" class="BlogPosting" method="selectDifferentMonths" var="months_this_year" year=$request.posting_year_added order_macro="DATE_ADDED" limit=12}

{* Überschrift mit dynamischer Jahresnennung *}
<h2>Archiv {$request.posting_year_added}</h2>
<ul>
{foreach from=$months_this_year item=_month}
{if $_month.month == $request.posting_month_added}
<li>{$_month.timestamp|date_format:"%B %Y"}</li>
{else}
<li><a href="{get_url page_id=$page.id action="ArchiveMonth" posting_year_added=$_month.year posting_month_added=$_month.month}">{$_month.timestamp|date_format:"%B %Y"}</a></li>
{/if}
{/foreach}
</ul>
[Anmerkung] Anmerkung

Hier gibt es eine Ausnahme von der Regel: Im Gegensatz zu den anderen Anwendungsbeispielen, sollte hier auf den HTML-Kontext in der Vorlage verzichtet werden. Das heißt, fügen Sie den Beispiel-Quelltext bitte so ein, wie er hier abgebildet ist.

Hintergrund: In der Regel werden Jahresarchive auf der Blog Übersichtsseite angezeigt um direkten Zugriff auf die Beiträge vergangener Jahre und Monate zu haben und werden somit nicht als separate Einzelseite angelegt. Um unsere Jahresarchiv-Vorlage in die Blog Übersichtseite einzubinden, bedienen wir uns der folgenden Syntax.

Quelltext: Blog Jahresarchiv Vorlage in die Blog Übersichtsseite einbinden

{include file="wcom:blog_archive_year.`$page.id`"}

13.1.1.4. Blog Monatsarchiv (inkl. Jahresarchiv)

Vorlagentyp: blog_archive_month

{* Jahresarchiv *}

{* Nachladen der Blog Einträge nach Monatsvorkommen auf jeweils ein Jahr bezogen *}
{select_named ns="Content" class="BlogPosting" method="selectDifferentMonths" var="months_this_year" year=$request.posting_year_added order_macro="DATE_ADDED" limit=12}

{* Überschrift mit dynamischer Jahresnennung *}
<h2>Archiv {$request.posting_year_added}</h2>
<ul>
{foreach from=$months_this_year item=_month}
{if $_month.month == $request.posting_month_added}
<li>{$_month.timestamp|date_format:"%B %Y"}</li>
{else}
<li><a href="{get_url page_id=$page.id action="ArchiveMonth" posting_year_added=$_month.year posting_month_added=$_month.month}">{$_month.timestamp|date_format:"%B %Y"}</a></li>
{/if}
{/foreach}
</ul>
{* EOF Jahresarchiv *}

{* Monatsarchiv *}

{* Wieviel Blog-Beiträge sollen pro Seite angezeigt werden? *}
{assign var="LIMIT" value="8"}

{* Überschrift mit dynamischer Monats- und Jahresnennung *}
<h3>Archiv {"`$request.posting_year_added`-`$request.posting_month_added`-15 12:00:00"|date_format:"%B %Y"}</h3>

{* Nachladen der Blog Einträge des angeforderten Zeitraums *}
{select_named ns="Content" class="BlogPosting" method="selectBlogPostings" var="blog_postings"
page=$page.id year_added=$request.posting_year_added month_added=$request.posting_month_added
order_macro="DATE_ADDED:DESC" draft=0 start=$request.start limit=$LIMIT}

{* Foreach Schleife zum Auslesen der Blogeinträge *}
{foreach from=$blog_postings item="_blog_posting"}
<h2>{$_blog_posting.title}</h2>
<p>{$_blog_posting.user_name} am {$_blog_posting.date_added|date_format:"%d.%m.%Y"} &ndash;
<a href="{get_url page_id=$page.id action=Item posting_id=$_blog_posting.id}">{if $_blog_posting.comment_count == 0}Keine Kommentare{elseif $_blog_posting.comment_count == 1}Ein Kommentar{else}{$_blog_posting.comment_count} Kommentare{/if}</a></p>

{* Wenn Inhalte vorhanden, zeige die Zusammenfassung, sonst den Inhalt des Beitrags *}
{if !empty($_blog_posting.summary_raw)}
{$_blog_posting.summary}
<p><a href="{get_url page_id=$page.id action=Item posting_id=$_blog_posting.id}">mehr zum Thema {$_blog_posting.title}</a></p>
{else}
{$_blog_posting.content}
{/if}

{* Wenn der Beitrag verschlagwortet wurde, werden hier die Tags gelistet *}
{if $_blog_posting.tag_count > 0}
<p>Abgelegt unter:</p>
<ul>
  {foreach from=$_blog_posting.tag_array|unserialize item=_tag}
  {if $_tag.word_url == $request.tag}
  <li>{$_tag.word}</li>
  {else}
  <li><a href="{get_url page_id=$page.id action=Index tag_word=$_tag.word_url}">{$_tag.word}</a></li>
  {/if}
  {/foreach}
</ul>
{/if}

{* Ende der Foreach Schleife zum Auslesen der Blogeinträge *}
{/foreach}

{* Pager *}
{select_named ns="Content" class="BlogPosting" method="countBlogPostings" var="blog_posting_count"
page=$page.id draft=0 year_added=$request.posting_year_added month_added=$request.posting_month_added}

{page_index var="page_index" item_count=$blog_posting_count interval=$LIMIT}

{if !empty($page_index) && $blog_posting_count > $LIMIT}
<ul>
  {foreach from=$page_index item=_item}
  {if $_item.self == $request.start}
  <li>{$_item.page}</li>
  {else}
  <li><a href="{get_url page_id=$page.id action=ArchiveMonth
posting_year_added=$request.posting_year_added posting_month_added=$request.posting_month_added
start=$_item.self}">{$_item.page}</a></li>
  {/if}
  {/foreach}
</ul>
{/if}
{* EOF Pager *}	

{* EOF Monatsarchiv *}

13.1.1.5. Blog RSS 2.0 Feeds

Vorlagentyp: blog_rss20

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>%TITEL-DER-IM-NEWSREADER-ANGEZEIGT-WIRD%</title>
    <link>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}</link>
    <description/>
    <language>de-DE</language>
    <generator>Welcompose 0.9.0 (http://welcompose.de/)</generator>
    <atom:link href="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action="Rss20"}" rel="self" type="application/rss+xml" />

    {select_named ns="Content" class="BlogPosting" method="selectBlogPostings" var="blog_postings" page=$page.id order_macro="DATE_ADDED:DESC" draft=0}
    {foreach from=$blog_postings item=_blog_posting}
    <item>
      <title>{$_blog_posting.title|escape:"html"}</title>
      <link>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action=Item posting_id=$_blog_posting.id}</link>
      <description>
        {if !empty($_blog_posting.feed_summary)}
          {$_blog_posting.feed_summary|escape:"html"}
        {else}
          {if !empty($_blog_posting.summary)}
            {$_blog_posting.summary|escape:"html"}
          {/if}
          {$_blog_posting.content|escape:"html"}
        {/if}
      </description>
      <pubDate>{$_blog_posting.date_added|date_rss20}</pubDate>
      <guid>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action=Item posting_id=$_blog_posting.id}</guid>
    </item>
    {/foreach}
  </channel>
</rss>
[Anmerkung] Anmerkung

Alle versalen Angaben, die durch die Zeichenfolge % umschlossen sind, müssen an Ihre jeweilige Umgebung angepasst und inklusive der Zeichenfolge ersetzt werden. Aus %IHRE-DOMAIN.TLD% wird beispielsweise welcompose.de.

13.1.1.6. Blog Atom 1.0 Feeds

Vorlagentyp: blog_atom10

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>%TITEL-DER-IM-NEWSREADER-ANGEZEIGT-WIRD%</title> 
  <link href="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action="Atom10"}" rel="self" title="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action="Atom10"}" type="application/atom+xml" />
  <generator uri="http://www.welcompose.de/" version="0.9.0">Welcompose</generator>
  <id>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}</id>
  <updated>{$_date.date_modified|date_atom}</updated>

  {select_named ns="Content" class="BlogPosting" method="selectBlogPostings" var="blog_postings" page=$page.id draft=0  order_macro="DATE_ADDED:DESC"}
  {foreach from=$blog_postings item=_blog_posting}
  <entry>
    <title type="html">{$_blog_posting.title|escape:"html"}</title>
    <link href="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action=Item posting_id=$_blog_posting.id}"/>
    <published>{$_blog_posting.date_added|date_atom}</published>
    <updated>{$_blog_posting.date_modified|date_atom}</updated>
    <content type="xhtml" xml:lang="de" xml:base="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}">
	<div xmlns="http://www.w3.org/1999/xhtml">
      {if !empty($_blog_posting.feed_summary)}
        {$_blog_posting.feed_summary|escape:"html"}
      {else}
        {if !empty($_blog_posting.summary)}
          {$_blog_posting.summary|escape:"html"}
        {/if}
        {$_blog_posting.content|escape:"html"}
      {/if}
	</div>
    </content>
    <id>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action=Item posting_id=$_blog_posting.id}</id>
    <author>
	  <name>{$_blog_posting.user_name}</name>
    </author>
  </entry>
  {/foreach}
</feed>
[Anmerkung] Anmerkung

Alle versalen Angaben, die durch die Zeichenfolge % umschlossen sind, müssen an Ihre jeweilige Umgebung angepasst und inklusive der Zeichenfolge ersetzt werden. Aus %IHRE-DOMAIN.TLD% wird beispielsweise welcompose.de.

13.1.1.7. Blog Kommentare RSS 2.0 Feeds

Vorlagentyp: blog_comments_rss20

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>%TITEL-DER-IM-NEWSREADER-ANGEZEIGT-WIRD%</title>
    <link>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}</link>
    <description/>
    <language>de-DE</language>
    <generator>Welcompose 0.9.0 (http://welcompose.de/)</generator>
    <atom:link href="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action="CommentsRss20"}" rel="self" type="application/rss+xml" />

    {select_named ns="Community" class="BlogComment" method="selectBlogComments" var="blog_comments" page=$page.id order_macro="DATE_ADDED:DESC"}
    {foreach from=$blog_comments item=_blog_comment}
    <item>
      <title>Kommentar von {$_blog_comment.name|escape:"html"} auf Beitrag &#171;{$_blog_comment.blog_posting_title|escape:"html"}&#187;</title>
      <link>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action=Item posting_id=$_blog_comment.blog_posting_id}</link>
      <description>
        {$_blog_comment.content|escape:"html"}
      </description>
      <pubDate>{$_blog_comment.date_added|date_rss20}</pubDate>
      <guid isPermaLink="false">tag:%IHRE-DOMAIN.TLD%,{$_blog_comment.date_added|date_format:"%Y-%m-%d"}:{$_blog_comment.id}</guid>
    </item>
    {/foreach}
  </channel>
</rss>
[Anmerkung] Anmerkung

Alle versalen Angaben, die durch die Zeichenfolge % umschlossen sind, müssen an Ihre jeweilige Umgebung angepasst und inklusive der Zeichenfolge ersetzt werden. Aus %IHRE-DOMAIN.TLD% wird beispielsweise welcompose.de.

13.1.1.8. Blog Kommentare Atom 1.0 Feeds

Vorlagentyp: blog_comments_atom10

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>%TITEL-DER-IM-NEWSREADER-ANGEZEIGT-WIRD%</title> 
  <link href="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action="CommentsAtom10"}" rel="self" title="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action="Atom10"}" type="application/atom+xml" />
  <generator uri="http://www.welcompose.de/" version="0.9.0">Welcompose</generator>
  <id>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}</id>
  <updated>{$_date.date_modified|date_atom}</updated>
	
  {select_named ns="Community" class="BlogComment" method="selectBlogComments" var="blog_comments" page=$page.id order_macro="DATE_ADDED:DESC"}
  {foreach from=$blog_comments item=_blog_comment}
  <entry>
    <title type="html">Kommentar von {$_blog_comment.name|escape:"html"} auf Beitrag &#171;{$_blog_comment.blog_posting_title|escape:"html"}&#187;</title>
    <link href="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action=Item posting_id=$_blog_comment.blog_posting_id}"/>
    <published>{$_blog_comment.date_added|date_atom}</published>
    <updated>{$_blog_comment.date_modified|date_atom}</updated>
    <content type="xhtml" xml:lang="de" xml:base="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}">
      <div xmlns="http://www.w3.org/1999/xhtml">
        {$_blog_comment.content}
      </div>
    </content>
    <id>tag:%IHRE-DOMAIN.TLD%,{$_blog_comment.date_added|date_format:"%Y-%m-%d"}:{$_blog_comment.id}</id>
    <author>
      <name>{$_blog_comment.name}</name>
    </author>
  </entry>
  {/foreach}
</feed>
[Anmerkung] Anmerkung

Alle versalen Angaben, die durch die Zeichenfolge % umschlossen sind, müssen an Ihre jeweilige Umgebung angepasst und inklusive der Zeichenfolge ersetzt werden. Aus %IHRE-DOMAIN.TLD% wird beispielsweise welcompose.de.

[Tipp] Tipp

Der Quelltext und die Auswahl der RSS/Atom Tags in den Beispielen sind Vorschläge unsererseits. Mehr zu möglichen Angaben/Tags, die in der Vorlagengestaltung nutzbar sind, erhalten sie unter http://www.rssboard.org/rss-specification und http://www.atompub.org/rfc4287.html

[Tipp] Tipp

Fügen Sie zwischen <head> und </head> Ihrer Vorlage entsprechende Link-Tags ein, registrieren Browser automatisch das Vorhandensein von Feed-Links und symbolisieren dies zumeist mit einem Icon in der Status- oder Adressleiste.

<link rel="alternate" type="application/rss+xml" 
    title="Aktuelle Artikel im RSS 2.0 Format abonnieren" 
	  href="{get_url page_id="7" action="Rss20"}" />
<link rel="alternate" type="application/rss+xml" 
    title="Aktuelle Artikel im Atom 1.0 Format abonnieren" 
      href="{get_url page_id="7" action="Atom10"}" />
<link rel="alternate" type="application/rss+xml" 
    title="Aktuelle Kommentare im RSS 2.0 Format abonnieren" 
      href="{get_url page_id="7" action="CommentsRss20"}" />
<link rel="alternate" type="application/rss+xml" 
    title="Aktuelle Kommentare im Atom 1.0 Format abonnieren" 
      href="{get_url page_id="7" action="CommentsAtom10"}" />

Hinweis: Das Beispiel geht davon aus, das die Blogseite die ID 7 hat. In den wenigsten Fällen wird dies so zutreffen ;-) Passen Sie bitte diesen Wert an.

13.1.2. Termine (WCOM_EVENT)

Der Seitentyp WCOM_EVENT ist prädestiniert um terminliche Inhalte wie Veranstaltungen, Seminare oder sonstige Events, die an ein oder über mehreren Tagen stattfinden abzubilden. Wie bei Blogseiten sind hier valide RSS 2.0 oder/und Atom 1.0 Feeds verfügbar.

13.1.2.1. Hauptvorlage

Vorlagentyp: event_index

{* Wieviel Event-Beiträge sollen pro Seite angezeigt werden? *}
{assign var="LIMIT" value="2"}

{* Eventbeiträge nachladen *}
{select_named ns="Content" class="EventPosting" method="selectEventPostings" var="event_postings" order_macro="DATE_ADDED:DESC"  page=$page.id tag_word_url=$request.tag start=$request.start limit=$LIMIT draft=0}

{* Foreach Schleife zum Auslesen der Eventeinträge *}
{foreach from=$event_postings item="_event_posting"}
<h2 id="{$_event_posting.title_url}">{$_event_posting.title}</h2>
<p>{$_event_posting.date_start|date_format:"%d.%m.%Y"},  {$_event_posting.date_start_time_start|date_format:"%H.%M"} Uhr {if !empty( $_event_posting.date_end)} - {$_event_posting.date_end|date_format:"%d.%m.%Y"} ,  {$_event_posting.date_end_time_start|date_format:"%H.%M"} Uhr{/if}</p>

{* Inhalt *}
{$_event_posting.content}

{* Wenn der Beitrag verschlagwortet wurde, werden hier die Tags gelistet *}
{if $_event_posting.tag_count > 0}
<p>Abgelegt unter:</p>
<ul>
  {foreach from=$_event_posting.tag_array|unserialize item=_tag}
  {if $_tag.word_url == $request.tag}
  <li>{$_tag.word}</li>
  {else}
  <li><a href="{get_url page_id=$page.id action=Index tag_word=$_tag.word_url}">{$_tag.word}</a></li>
  {/if}
  {/foreach}
</ul>
{/if}

{* Ende der Foreach Schleife zum Auslesen der Eventeinträge *}
{/foreach}

{* Pager *}
{select_named ns="Content" class="EventPosting" method="countEventPostings"
var="event_posting_count" tag_word_url=$request.tag draft=0 page=$page.id}

{page_index var="page_index" item_count=$event_posting_count interval=$LIMIT}

{if !empty($page_index) && $event_posting_count > $LIMIT}
<ul>
  {foreach from=$page_index item=_item}
  {if $_item.self == $request.start}
  <li>{$_item.page}</li>
  {else}
  <li><a href="{get_url page_id=$page.id action=Index tag_word=$request.tag start=$_item.self}">{$_item.page}</a></li>
  {/if}
  {/foreach}
</ul>
{/if}
{* EOF Pager *}

13.1.2.2. Seitenvorlage für RSS 2.0 Feeds

Vorlagentyp: event_rss20

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>%TITEL-DER-IM-NEWSREADER-ANGEZEIGT-WIRD%</title>
    <link>%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}</link>
    <description/>
    <language>de-DE</language>
    <generator>Welcompose 0.9.4 (http://welcompose.de/)</generator>
    <atom:link href="%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action="Rss20"}" rel="self" type="application/rss+xml" />

    {select_named ns="Content" class="EventPosting" method="selectEventPostings" var="event_postings" page=$page.id order_macro="DATE_ADDED:DESC" draft=0}
    {foreach from=$event_postings item=_event_posting}
    <item>
      <title>{$_event_posting.title|escape:"html"}</title>
      <link>%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action=Index}#{$_event_posting.title_url}</link>
      <description>
          {$_event_posting.content|escape:"html"}
      </description>
      <pubDate>{$_event_posting.date_added|date_rss20}</pubDate>
      <guid>%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}#{$_event_posting.title_url}</guid>
    </item>
    {/foreach}
  </channel>
</rss>
[Anmerkung] Anmerkung

Alle versalen Angaben, die durch die Zeichenfolge % umschlossen sind, müssen an Ihre jeweilige Umgebung angepasst und inklusive der Zeichenfolge ersetzt werden. Aus %IHRE-DOMAIN.TLD% wird beispielsweise welcompose.de.

13.1.2.3. Seitenvorlage für Atom 1.0 Feeds

Vorlagentyp: event_atom10

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>%TITEL-DER-IM-NEWSREADER-ANGEZEIGT-WIRD%</title> 
  <link href="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action="Atom10"}" rel="self" title="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action="Atom10"}" type="application/atom+xml" />
  <generator uri="http://www.welcompose.de/" version="0.9.0">Welcompose</generator>
  <id>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}</id>
  <updated>{$_date.date_modified|date_atom}</updated>

  {select_named ns="Content" class="EventPosting" method="selectEventPostings" var="event_postings" page=$page.id draft=0 tag_word_url=$request.tag order_macro="DATE_ADDED:DESC"}
  {foreach from=$event_postings item=_event_posting}
  <entry>
    <title type="html">{$_event_posting.title|escape:"html"}</title>
    <link href="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action=Item posting_id=$_event_posting.id}"/>
    <published>{$_event_posting.date_added|date_atom}</published>
    <updated>{$_event_posting.date_modified|date_atom}</updated>
    <content type="xhtml" xml:lang="de" xml:base="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}">
		<div xmlns="http://www.w3.org/1999/xhtml">
      {$_event_posting.content|escape:"html"}
		</div>
    </content>
    <id>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action=Item posting_id=$_event_posting.id}</id>
    <author>
	  <name>{$_event_posting.user_name}</name>
    </author>
  </entry>
  {/foreach}
</feed>
[Anmerkung] Anmerkung

Alle versalen Angaben, die durch die Zeichenfolge % umschlossen sind, müssen an Ihre jeweilige Umgebung angepasst und inklusive der Zeichenfolge ersetzt werden. Aus %IHRE-DOMAIN.TLD% wird beispielsweise welcompose.de.

[Tipp] Tipp

Der Quelltext und die Auswahl der RSS/Atom Tags in den Beispielen sind Vorschläge unsererseits. Mehr zu möglichen Angaben/Tags, die in der Vorlagengestaltung nutzbar sind, erhalten sie unter http://www.rssboard.org/rss-specification und http://www.atompub.org/rfc4287.html

[Tipp] Tipp

Fügen Sie zwischen <head> und </head> Ihrer Vorlage entsprechende Link-Tags ein, registrieren Browser automatisch das Vorhandensein von Feed-Links und symbolisieren dies zumeist mit einem Icon in der Status- oder Adressleiste.

<link rel="alternate" type="application/rss+xml" 
    title="Aktuelle Events im RSS 2.0 Format abonnieren" 
	  href="{get_url page_id="7" action="Rss20"}" />
<link rel="alternate" type="application/rss+xml" 
    title="Aktuelle Events im Atom 1.0 Format abonnieren" 
      href="{get_url page_id="7" action="Atom10"}" />
<link rel="alternate" type="application/rss+xml" 

Hinweis: Das Beispiel geht davon aus, das die Eventseite die ID 7 hat. In den wenigsten Fällen wird dies so zutreffen ;-) Passen Sie bitte diesen Wert an.

13.1.3. Individuelle Formulare (WCOM_GENERATOR_FORM)

Die Anwendung des Seitentyps WCOM_GENERATOR_FORM bietet sich immer dann an, wenn die Möglicheiten der Abschnitt 13.1.4, „Einfache Formulare (WCOM_SIMPLE_FORM)“ nicht komplex genug sind. Mit diesem Seitentyp können Sie individuelle Formulare gestalten. Eine Vielzahl an Feldtypen stehen hierzu zur Verfügung.

Vorlagentyp: generator_form_index

{* Inhalte der Generator Form *}
{$generator_form.content}

{* Validierungsfehler ausgeben, wenn vorhanden *}
{if !empty($form.errors)}
<ul>
{foreach from=$form.errors item="error"}
  <li>{$error}</li>
{/foreach}
</ul>
{/if}
{* EOF Validierungsfehler ausgeben, wenn vorhanden *}

{* Wenn das Formular erfolgreich abgeschickt wurde *}
{if $session.form_submitted == 1}
<h2>Danke für Ihre Anfrage</h2>
{/if}

<form {$form.attributes}>
{$form.javascript}

<fieldset id="formular">
{$form.hidden}

{* Beispiele für die Definition von Formularfeldern *}

{* Ein Inputfeld vom Typ 'text' mit der Bezeichnung 'name' *}
{* Diese Syntax beschreibt gleichzeitig auch die Standardangabe für ein Formularfeld *}
<label for="generator_form_name">{$form.name.label}{qt el=$form.name}</label>{$form.name.html}<br />

... weitere Formularfelder ...

{* EOF Beispiele *}

{* Wenn ein numerische Captcha genutzt werden soll *}
{if $generator_form.use_captcha == 'numeral'}

<p>Zur Spamvermeidung nutzt das Formular ein sogenanntes 
<a title="Externer Link zu Wikipedia - Begriffserklärung" href="http://de.wikipedia.org/wiki/Captcha">Captcha</a>. Bitte tragen Sie das Ergebnis der Rechenaufgabe in das nachfolgende Feld ein (Beispiele: <em>max(3,5)</em> = <strong>5</strong>; <em>min(2,8)</em> = <strong>2</strong>; <em>3 + 5</em> = <strong>8</strong>).</p>
<p><strong>{$captcha}</strong></p>
<label for="generator_form_captcha">&nbsp;</label>{$form._qf_captcha.html}<br />

{* Wenn ein Bild-Captcha genutzt werden soll *}
{elseif $generator_form.use_captcha == 'image'}

<p>Zur Spamvermeidung nutzt das Formular ein sogenanntes <a title="Externer Link zu Wikipedia - Begriffserklärung"
 href="http://de.wikipedia.org/wiki/Captcha">Captcha</a>. Bitte tragen Sie die Zeichenfolge in das nachfolgende Feld ein.</p>
<p><img src="{$captcha}" width="200" height="60" alt="Captcha" /></p>
<label for="generator_form_captcha">{$form._qf_captcha.label}</label>{$form._qf_captcha.html}<br />

{/if}

{* Setzt voraus, dass es ein Formularfeld vom Typ 'submit' gleichen Namens gibt *}
{$form.submit.html}
</fieldset>
</form>

Um die E-Mails für diesen Seitentyp zu versenden, wird eine korrespondierende E-Mail Vorlage benötigt.

Vorlagentyp: generator_form_mail

{$form_data.now|date_format:"%a, %d.%m.%Y, %H:%M"}

{$form_data.<name-des-formularfeldes>}

{* Ein Beispieleintrag mit dem Feldnamen email *}
{$form_data.email}

13.1.3.1. Standardsyntax eines Formularfeldes

Bis auf die weiter unten aufgeführten Ausnahmen, folgen alle Angaben der Formularfelder in den Seitenvorlagen den hier aufgelisteten Standard.

<label for="generator_form_<name-des-formularfeldes>">{$form.<name-des-formularfeldes>.label}{qt el=$form.<name-des-formularfeldes>}</label>{$form.<name-des-formularfeldes>.html}

{* Ein Beispieleintrag mit dem Feldnamen email *}
<label for="generator_form_email">{$form.email.label}{qt el=$form.email}</label>{$form.email.html}

13.1.3.2. Abweichende Angaben für einzelne Feldtypen

Für die Feldtypen select, submit und radio gelten einige Besonderheiten in der inhaltlichen Angabe der Werte. Bei Formularfeldern vom Typ radio und submit ist zudem eine von Standard abweichende Syntax in der Seitenvorlage erforderlich.

13.1.3.2.1. Formulartyp submit

Seitenvorlage: Angabe eines Input-Feldes vom Typ submit

{* Ein Inputfeld vom Typ 'submit' mit dem Namen 'senden' *}
{$form.senden.html}

Inhaltliche Seite: Angaben für den Formulartyp submit

Beschriftung

Geben Sie hier den Text an, der für den Submit-Button angezeigt werden soll. Bsp. Senden

Name

Geben Sie hier den Namen für das Formularfeld an. Dieser Name wird als Angabe in den Seitenvorlagen genutzt. Bsp. senden

Wert

Geben Sie hier den gleichen Text an, den Sie zuvor für das Feld Beschriftung genutzt haben. Bsp. Senden

13.1.3.2.2. Formulartyp radio

Seitenvorlage: Angabe eines Input-Feldes vom Typ radio

{* Da eine Gruppe von Radio-Elementen kein originäres Label hat, definiert
man ein HTML-Element seiner Wahl (hier h4). An diesem setzen wir auch die Indikator, 
wenn die Auswahl mindestens eines Radiobuttons als erforderlich konfiguriert wurde. *}

<h4>Radiogruppe{qt el=$form.radiogruppe}</h4>

{* Ein Inputfeld vom Typ 'radio' mit dem Namen 'radiogruppe' *}
{foreach from=$form.radiogruppe.elements item=_radiogruppe}
{$_radiogruppe.html}
{/foreach}

Inhaltliche Seite: Angaben für den Formulartyp radio

Beschriftung

Geben Sie hier den Text an, der für die Radio Felder angezeigt werden soll. Bsp. Radiogruppe

Name

Geben Sie hier den Namen für das Formularfeld an. Dieser Name wird als Angabe in den Seitenvorlagen genutzt. Bsp. radiogruppe

Wert

Für jeden gewünschten Radio-Buttons geben Sie die einzelnen Werte bitte hintereinander und trennen diese jeweils mit einem Semikolon. Bsp. Wert1;Wert2;Wert3

13.1.3.2.3. Formulartyp select

Seitenvorlage: Angabe eines Input-Feldes vom Typ select

Hier gibt es keine vom Standard abweichende Syntax.

Inhaltliche Seite: Angaben für den Formulartyp select

Beschriftung

Geben Sie hier den Text an, der für das Auswahlmenu angezeigt werden soll. Bsp. Auswahl

Name

Geben Sie hier den Namen für das Formularfeld an. Dieser Name wird als Angabe in den Seitenvorlagen genutzt. Bsp. Auswahl

Wert

Um mehrere Werte in einem Auswahlmenu anzugeben, geben Sie die einzelnen Werte bitte hintereinander und trennen diese jeweils mit einem Kommata. Bsp. Wert1,Wert2,Wert3

13.1.4. Einfache Formulare (WCOM_SIMPLE_FORM)

Formulare des Seitentyps WCOM_SIMPLE_FORM bieten zwei vorkonfiguierte Formulare an, die sich nur in den zur Verfügung stehenden Formularfelder unterscheiden. Eine große Anzahl an Anwendungen sind durch diese beiden Formulartypen bereits abgedeckt. Zur Verfügung stehen die Formulartypen Privates Formular und Geschäftliches Formular.

Zur Verfügung stehende Formularfelder der beiden Formulartypen:

Privates Formular

Name, E-Mail, Homepage, Nachricht

Geschäftliches Formular

Anrede, Vorname, Nachname, Adresse, Ort, Rückruf, Telefon, E-Mail, Nachricht

13.1.4.1. Privates Formular

Vorlagentyp: simple_form_index

{* Inhalte der Simple Form *}
{$simple_form.content}

{* Validierungsfehler ausgeben, wenn vorhanden *}
{if !empty($form.errors)}
<ul>
{foreach from=$form.errors item="error"}
  <li>{$error}</li>
{/foreach}
</ul>
{/if}
{* EOF Validierungsfehler ausgeben, wenn vorhanden *}

{* Wenn das Formular erfolgreich abgeschickt wurde *}
{if $session.form_submitted == 1}
<h2>Danke für Ihre Anfrage</h2>
{/if}

<form {$form.attributes}>
{$form.javascript}

<fieldset id="formular">
{$form.hidden}

{* Zur Verfügung stehende Formularfelder, wenn als Formulartyp 'Privates Formular' ausgewählt wurde *}
<label for="simple_form_name">{$form.name.label}{qt el=$form.name}</label>{$form.name.html}<br />
<label for="simple_form_email">{$form.email.label}{qt el=$form.email}</label>{$form.email.html}<br />
<label for="simple_form_homepage">{$form.homepage.label}{qt el=$form.homepage}</label> {$form.homepage.html}<br />
<label for="simple_form_message">{$form.message.label}{qt el=$form.message}</label>{$form.message.html}<br />

{* Wenn ein numerische Captcha genutzt werden soll *}
{if $simple_form.use_captcha == 'numeral'}

<p>Zur Spamvermeidung nutzt das Formular ein sogenanntes 
<a title="Externer Link zu Wikipedia - Begriffserklärung" href="http://de.wikipedia.org/wiki/Captcha">Captcha</a>. Bitte tragen Sie das Ergebnis der Rechenaufgabe in das nachfolgende Feld ein (Beispiele: <em>max(3,5)</em> = <strong>5</strong>; <em>min(2,8)</em> = <strong>2</strong>; <em>3 + 5</em> = <strong>8</strong>).</p>
<p><strong>{$captcha}</strong></p>
<label for="simple_form_captcha">&nbsp;</label>{$form._qf_captcha.html}<br />

{* Wenn ein Bild-Captcha genutzt werden soll *}
{elseif $simple_form.use_captcha == 'image'}

<p>Zur Spamvermeidung nutzt das Formular ein sogenanntes <a title="Externer Link zu Wikipedia - Begriffserklärung"
 href="http://de.wikipedia.org/wiki/Captcha">Captcha</a>. Bitte tragen Sie die Zeichenfolge in das nachfolgende Feld ein.</p>
<p><img src="{$captcha}" width="200" height="60" alt="Captcha" /></p>
<label for="simple_form_captcha">{$form._qf_captcha.label}</label>{$form._qf_captcha.html}<br />

{/if}

{$form.submit.html}
</fieldset>
</form>

Um die E-Mail des Typs Privates Formular zu versenden, wird eine korrespondierende E-Mail Vorlage benötigt.

Vorlagentyp: simple_form_personal_form_mail

{$form_data.now|date_format:"%a, %d.%m.%Y, %H:%M"}

{$form_data.name}
{$form_data.email}
{$form_data.homepage}
{$form_data.message}

13.1.4.2. Geschäftliches Formular

Vorlagentyp: simple_form_index

{* Inhalte der Simple Form *}
{$simple_form.content}

{* Validierungsfehler ausgeben, wenn vorhanden *}
{if !empty($form.errors)}
<ul>
{foreach from=$form.errors item="error"}
  <li>{$error}</li>
{/foreach}
</ul>
{/if}
{* EOF Validierungsfehler ausgeben, wenn vorhanden *}

{* Wenn das Formular erfolgreich abgeschickt wurde *}
{if $session.form_submitted == 1}
<h2>Danke für Ihre Anfrage</h2>
{/if}

<form {$form.attributes}>
{$form.javascript}

<fieldset id="formular">
{$form.hidden}

{* Zur Verfügung stehende Formularfelder, wenn als Formulartyp 'Geschäftliches Formular' ausgewählt wurde *}
<label for="simple_form_salutation">{$form.salutation.label}{qt el=$form.salutation}</label>{$form.salutation.html}<br />
<label for="simple_form_first_name">{$form.first_name.label}{qt el=$form.first_name}</label>{$form.first_name.html}<br />
<label for="simple_form_last_name">{$form.last_name.label}{qt el=$form.last_name}</label>{$form.last_name.html}<br />
<label for="simple_form_address">{$form.address.label}{qt el=$form.address}</label>{$form.address.html}<br />
<label for="simple_form_location">{$form.location.label}{qt el=$form.location}</label>{$form.location.html}<br />
<label for="simple_form_call_back">{$form.call_back.label}{qt el=$form.call_back}</label>{$form.call_back.html}<br />
<label for="simple_form_phone">{$form.phone.label}{qt el=$form.phone}</label>{$form.phone.html}<br />
<label for="simple_form_email">{$form.email.label}{qt el=$form.email}</label>{$form.email.html}<br />
<label for="simple_form_message">{$form.message.label}{qt el=$form.message}</label>{$form.message.html}<br />

{* Wenn ein numerische Captcha genutzt werden soll *}
{if $simple_form.use_captcha == 'numeral'}

<p>Zur Spamvermeidung nutzt das Formular ein sogenanntes 
<a title="Externer Link zu Wikipedia - Begriffserklärung" href="http://de.wikipedia.org/wiki/Captcha">Captcha</a>. Bitte tragen Sie das Ergebnis der Rechenaufgabe in das nachfolgende Feld ein (Beispiele: <em>max(3,5)</em> = <strong>5</strong>; <em>min(2,8)</em> = <strong>2</strong>; <em>3 + 5</em> = <strong>8</strong>).</p>
<p><strong>{$captcha}</strong></p>
<label for="simple_form_captcha">&nbsp;</label>{$form._qf_captcha.html}<br />

{* Wenn ein Bild-Captcha genutzt werden soll *}
{elseif $simple_form.use_captcha == 'image'}

<p>Zur Spamvermeidung nutzt das Formular ein sogenanntes <a title="Externer Link zu Wikipedia - Begriffserklärung"
 href="http://de.wikipedia.org/wiki/Captcha">Captcha</a>. Bitte tragen Sie die Zeichenfolge in das nachfolgende Feld ein.</p>
<p><img src="{$captcha}" width="200" height="60" alt="Captcha" /></p>
<label for="simple_form_captcha">{$form._qf_captcha.label}</label>{$form._qf_captcha.html}<br />

{/if}

{$form.submit.html}
</fieldset>
</form>

Um die E-Mail des Typs Geschäftliches Formular zu versenden, wird eine korrespondierende E-Mail Vorlage benötigt.

Vorlagentyp: simple_form_business_form_mail

{$form_data.now|date_format:"%a, %d.%m.%Y, %H:%M"}

{$form_data.salutation}
{$form_data.first_name}
{$form_data.last_name}
{$form_data.address}
{$form_data.location}
{$form_data.call_back}
{$form_data.phone}
{$form_data.email}
{$form_data.message}

13.1.5. Einfaches Gästebuch (WCOM_SIMPLE_GUESTBOOK)

Der Seitentyp WCOM_SIMPLE_GUESTBOOK bietet dem Anwender die Möglichkeit, ein einfaches Gästebuch nativ in die Webseiten zu integrieren.

Vorlagentyp: simple_guestbook_index

{* Inhalte der Gästebuchseite *}
{$simple_guestbook.content}

{* Wieviel Kommentare sollen auf einer Seite angezeigt werden? *}
{assign var="LIMIT" value="8"}

{* Termineinträge nachladen *}
{select_named ns="Content" class="SimpleGuestbookEntry" method="selectSimpleGuestbookEntries" var="guestbook_entries" order_macro="DATE_ADDED:DESC" book=$page.id start=$request.start limit=$LIMIT}

{* Einträge ausgeben *}
{foreach from=$guestbook_entries item="_entry"}
{$_entry.name}
{$_entry.email}
{$_entry.subject}
{$_entry.content}
{/foreach}
{* EOF Einträge ausgeben *}

{* Pager *}
{select_named ns="Content" class="SimpleGuestbookEntry" method="countSimpleGuestbookEntries" var="entries_count" book=$page.id}
{page_index var="page_index" item_count=$entries_count interval=$LIMIT}
{if !empty($page_index) && $entries_count > $LIMIT}
  <ul>
  {foreach from=$page_index item=_item}
    {if $_item.self == $request.start}
    <li>{$_item.page}</li>
    {else}
    <li><a href="{get_url page_id=$page.id action=Index start=$_item.self}">{$_item.page}</a></li>
    {/if}
    {/foreach}
  </ul>
{/if}
{* EOF Pager *}

{* Wenn Einträge erlaubt sind, zeige das Formular an *}
{if $simple_guestbook.allow_entry == 1}

{* Textkonverter auslesen anhand der Grundeinstellungen des Gästebuchs. Es werden die mitgelieferten
Textkonverter berücksichtigt. *}
{select_simple ns="Application" class="Textconverter" method="selectTextConverter" var="_text_converter" id=$simple_guestbook.text_converter}

{if $_text_converter.internal_name == 'textile'}<p>Bitte füllen Sie alle Felder mit einem * aus. HTML ist nicht erlaubt, dafür <a href="http://textism.com/tools/textile/">Textile</a>
{elseif $_text_converter.internal_name == 'markdown'}<p>Bitte füllen Sie alle Felder mit einem * aus. HTML ist nicht erlaubt, dafür <a href="http://daringfireball.net/projects/markdown/syntax">Markdown</a>
{elseif $_text_converter.internal_name == 'xhtml'}<p>Bitte füllen Sie alle Felder mit einem * aus. HTML ist nicht erlaubt.{/if}
</p>
	
{* Validierungsfehler ausgeben, wenn vorhanden *}
{if !empty($form.errors)}
<ul>
{foreach from=$form.errors item="error"}
  <li>{$error}</li>
{/foreach}
</ul>
{/if}
{* EOF Validierungsfehler ausgeben, wenn vorhanden *}

{* Wenn das Formular erfolgreich abgeschickt wurde *}
{if $session.form_submitted == 1}
<h2>Danke für Ihren Eintrag!</h2>
{/if}

<form {$form.attributes}>
{$form.javascript}

<fieldset>
{$form.hidden}

<label for="guestbook_entry_name">{$form.name.label}{qt el=$form.name}</label> {$form.name.html}<br />
<label for="guestbook_entry_email">{$form.email.label}{qt el=$form.email}</label> {$form.email.html}<br />
<label for="guestbook_entry_subject">{$form.subject.label}{qt el=$form.subject}</label> {$form.subject.html}<br />
<label for="guestbook_entry_content">{$form.content.label}{qt el=$form.content}</label> {$form.content.html}<br />

{* Wenn ein numerische Captcha genutzt werden soll *}
{if $simple_guestbook.use_captcha == 'numeral'}
<p>Zur Spamvermeidung nutzt das Formular ein sogenanntes <a title="Externer Link zu Wikipedia - Begriffserklärung" href="http://de.wikipedia.org/wiki/Captcha">Captcha</a>. Bitte tragen Sie das Ergebnis der Rechenaufgabe in das nachfolgende Feld ein (Beispiele: <em>max(3,5)</em> = <strong>5</strong>; <em>min(2,8)</em> = <strong>2</strong>; <em>3 + 5</em> = <strong>8</strong>).</p>
<p><strong>{$captcha}</strong></p>
<label for="simple_form_captcha">&nbsp;</label>{$form._qf_captcha.html}<br />

{* Wenn ein Bild-Captcha genutzt werden soll *}
{elseif $simple_guestbook.use_captcha == 'image'}
<p>Zur Spamvermeidung nutzt das Formular ein sogenanntes <a title="Externer Link zu Wikipedia - Begriffserklärung"
 href="http://de.wikipedia.org/wiki/Captcha">Captcha</a>. Bitte tragen Sie die Zeichenfolge in das nachfolgende Feld ein.</p>
<p><img src="{$captcha}" width="200" height="60" alt="Captcha" /></p>
<label for="simple_form_captcha">{$form._qf_captcha.label}</label>{$form._qf_captcha.html}<br />

{/if}

{$form.submit.html}
</fieldset>
</form>
{/if}
{* EOF Wenn Einträge erlaubt sind, zeige das Formular an *}

Ist auf inhaltlichen Seite des Gästebuchs die Option Mitteilung senden? aktiviert, wird eine Seitenvorlage zum Versenden der E-Mail benötigt.

Vorlagentyp: simple_guestbook_form_mail

{$form_data.book} ({$form_data.now|date_format:"%a, %d.%m.%Y, %H:%M"})

{$form_data.name}
{$form_data.email}
{$form_data.subject}
{$form_data.content}

13.1.6. Termine (WCOM_SIMPLE_DATE)

Der Seitentyp WCOM_SIMPLE_DATE ist bis Version 0.9.2 die bevorzugte Wahl gewesen, um Termine und Verwandtes auf einer Seite abzubilden.

[Warnung] Warnung

Der Einsatz diesen Seitentyps wird ab Welcompose Version 0.9.4 nicht mehr empfohlen! Stattdessen sollten Sie den mit der o.g. Version eingeführten Seitentyp WCOM_EVENT (s. Abschnitt 13.1.2, „Termine (WCOM_EVENT)“) nutzen, um termingebundene Inhalte abzubilden. Der Seitentyp WCOM_SIMPLE_DATE wird nicht mehr weiterentwickelt.

13.1.6.1. Hauptvorlage

Vorlagentyp: simple_date_index

{* Wieviel Termine sollen auf einer Seite angezeigt werden? *}
{assign var="LIMIT" value="8"}

{select_named ns="Content" class="SimpleDate" method="selectSimpleDates" var="dates" order_macro="DATE_START" page=$page.id start=$request.start limit=$LIMIT draft=0}

{* Termineinträge ausgeben *}

{* In diesem Beispiel wird der Text 'KARTEN NUR NOCH AN DER ABENDKASSE' alternativ dann angzeigt, wenn das jeweilige Feld 'Verweis' einen Eintrag hat UND die korrespondierende Checkbox 'Ausverkauft' aktiv ist *}
{foreach from=$dates item="_date"}
<h3>{$_date.date_start|date_format:"%a, %d.%m.%Y, %H:%M"}{if !empty($_date.date_end)} - {$_date.date_end|date_format:"%a, %d.%m.%Y, %H:%M"}{/if} <a id="{$_date.id}"></a></h3>
<ul>
<li>{$_date.location}</li>
{if !empty($_date.link_1)}<li>{if $_date.sold_out_1 == '1'}KARTEN NUR NOCH AN DER ABENDKASSE{else}<a href="{$_date.link_1}">Tickets</a>{/if}</li>{/if}
{if !empty($_date.link_2)}<li>{if $_date.sold_out_2 == '1'}KARTEN NUR NOCH AN DER ABENDKASSE{else}<a href="{$_date.link_2}">Tickets</a>{/if}</li>{/if}
{if !empty($_date.link_3)}<li>{if $_date.sold_out_3 == '1'}KARTEN NUR NOCH AN DER ABENDKASSE{else}<a href="{$_date.link_3}">Tickets</a>{/if}</li>{/if} 
</ul>
{/foreach}
{* EOF Termineinträge ausgeben *}

{* Pager *}
{select_named ns="Content" class="SimpleDate" method="countSimpleDates" var="dates_count" page=$page.id}
{page_index var="page_index" item_count=$dates_count interval=$LIMIT}
{if !empty($page_index) && $dates_count > $LIMIT}
  <ul>
  {foreach from=$page_index item=_item}
    {if $_item.self == $request.start}
    <li>{$_item.page}</li>
    {else}
    <li><a href="{get_url page_id=$page.id action=Index start=$_item.self}">{$_item.page}</a></li>
    {/if}
    {/foreach}
  </ul>
{/if}
{* EOF Pager *}

13.1.6.2. Seitenvorlage für RSS 2.0 Feeds

Vorlagentyp: simple_date_rss20

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>%TITEL-DER-IM-NEWSREADER-ANGEZEIGT-WIRD%</title>
    <link>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}</link>
    <description/>
    <language>de-DE</language>
    <generator>Welcompose 0.9.0 (http://welcompose.de/)</generator>
    <atom:link href="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action="Rss20"}" rel="self" type="application/rss+xml" />

    {select_named ns="Content" class="SimpleDate" method="selectSimpleDates" var="dates" page=$page.id order_macro="DATE_START" draft=0}
    {foreach from=$dates item=_date}
    <item>
      <title>{$_date.date_start|date_format:"%a, %d.%m.%Y, %H:%M Uhr"}, {$_date.location|escape:"html"}</title>
      <link>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}</link>
      <description>
      {* Bitte entfernen Sie im realen Einsatz das Leerzeichen zwischen '<' und '![CDATA[' sowie diese Kommentarzeile *}
      < ![CDATA[
        <ul>
       {if !empty($_date.link_1)}<li>{if $_date.sold_out_1 == '1'}%KARTEN NUR NOCH AN DER ABENDKASSE%{else}<a href="{$_date.link_1}">Tickets</a>{/if}</li>{/if}
       {if !empty($_date.link_2)}<li>{if $_date.sold_out_2 == '1'}%KARTEN NUR NOCH AN DER ABENDKASSE%{else}<a href="{$_date.link_2}">Tickets</a>{/if}</li>{/if}
       {if !empty($_date.link_3)}<li>{if $_date.sold_out_3 == '1'}%KARTEN NUR NOCH AN DER ABENDKASSE%{else}<a href="{$_date.link_3}">Tickets</a>{/if}</li>{/if} 
        </ul>
      {* Bitte entfernen Sie im realen Einsatz das Leerzeichen zwischen ']]' und '>' sowie diese Kommentarzeile *}
      ]] >
      </description>
      <pubDate>{$_date.date_added|date_rss20}</pubDate>
      <guid isPermaLink="false">tag:%IHRE-DOMAIN.TLD%,{$_date.date_added|date_format:"%Y-%m-%d"}:{$_date.id}</guid>
    </item>
    {/foreach}
  </channel>
</rss>
[Anmerkung] Anmerkung

Alle versalen Angaben, die durch die Zeichenfolge % umschlossen sind, müssen an Ihre jeweilige Umgebung angepasst und inklusive der Zeichenfolge ersetzt werden. Aus %IHRE-DOMAIN.TLD% wird beispielsweise welcompose.de.

13.1.6.3. Seitenvorlage für Atom 1.0 Feeds

Vorlagentyp: simple_date_atom10

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>%TITEL-DER-IM-NEWSREADER-ANGEZEIGT-WIRD%</title> 
  <link href="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action="Atom10"}" rel="self" title="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id action="Atom10"}" type="application/atom+xml" />
  <generator uri="http://www.welcompose.de/" version="0.9.0">Welcompose</generator>
  <id>http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}</id>
  <updated>{$_date.date_modified|date_atom}</updated>

  {select_named ns="Content" class="SimpleDate" method="selectSimpleDates" var="dates" page=$page.id draft=0 order_macro="DATE_START"}
  {foreach from=$dates item=_date}
  <entry>
    <title type="html">{$_date.date_start|date_format:"%a, %d.%m.%Y, %H:%M Uhr"}, {$_date.location|escape:"html"}</title>
    <link href="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}"/>
    <published>{$_date.date_added|date_atom}</published>
    <updated>{$_date.date_modified|date_atom}</updated>
    <content type="xhtml" xml:lang="de" xml:base="http://%IHRE-DOMAIN.TLD%{get_url page_id=$page.id}">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <ul>
        {if !empty($_date.link_1)}<li>{if $_date.sold_out_1 == '1'}%KARTEN NUR NOCH AN DER ABENDKASSE%{else}<a href="{$_date.link_1}">Tickets</a>{/if}</li>{/if}
        {if !empty($_date.link_2)}<li>{if $_date.sold_out_2 == '1'}%KARTEN NUR NOCH AN DER ABENDKASSE%{else}<a href="{$_date.link_2}">Tickets</a>{/if}</li>{/if}
        {if !empty($_date.link_3)}<li>{if $_date.sold_out_3 == '1'}%KARTEN NUR NOCH AN DER ABENDKASSE%{else}<a href="{$_date.link_3}">Tickets</a>{/if}</li>{/if} 
        </ul>
      </div>
    </content>
    <id>tag:%IHRE-DOMAIN.TLD%,{$_date.date_added|date_format:"%Y-%m-%d"}:{$_date.id}</id>
    <author><name>{$_date.user_name}</name></author>
  </entry>
  {/foreach}
</feed>
[Anmerkung] Anmerkung

Auch hier gilt: Alle versalen Angaben, die durch die Zeichenfolge % umschlossen sind, müssen an Ihre jeweilige Umgebung angepasst und inklusive der Zeichenfolge ersetzt werden. Aus %IHRE-DOMAIN.TLD% wird beispielsweise welcompose.de.

[Tipp] Tipp

Der Quelltext und die Auswahl der RSS/Atom Tags in den Beispielen sind Vorschläge unsererseits. Mehr zu möglichen Angaben/Tags, die in der Vorlagengestaltung nutzbar sind, erhalten sie unter http://www.rssboard.org/rss-specification und http://www.atompub.org/rfc4287.html

13.1.7. Einfache Inhaltsseiten (WCOM_SIMPLE_PAGE)

Der Seitentyp WCOM_SIMPLE_PAGE ist sicherlich der am häufigsten genutzte Typ in der Erstellung von Webseiten. Während die sonstigen Seitentypen dezidierten Einsatzzwecken dienen und darum spezielle Variablen bereitstellen, liegt der Schwerpunkt bei einer inhaltlichen Seite, die dem Seitentyp WCOM_SIMPLE_PAGE zugeordnet wird, ganz auf die Gestaltung im Inhaltsbereich.

Vorlagentyp: simple_page_index

{* Name der Seite (Name, der für die Navigation verwendet wird) *}
{$simple_page.page_name}

{* Titel der Simple Page (Inhaltsfeld) *}
{$simple_page.title}

{* Inhalte der Simple Page *}
{$simple_page.content}

{* Um herauszufinden, welche Variablen für den Seitenyp WCOM_SIMPLE_PAGE
zur Verfügung stehen, nutzen Sie bitte die Smarty-Debug Konsole. Nach 
Aufruf der unten stehenden Anweisung, speichern Sie die Vorlage und rufen
die Ausgabe-Seite in Ihrem Browser auf. Da die Konsole als Popup definiert
ist, achten Sie bitte auf mgl. Sperren in ihrem Browser. *}

{* Smarty-Debug Konsole aufrufen *}
{debug}

Weitere, detailierte Informationen zur Nutzung der Smarty Debug Konsole finden Sie unter Abschnitt 8.3.3.2, „Vorhandene Daten auslesen“.

13.1.8. Externer Verweis (WCOM_URL)

Der Seitentyp WCOM_URL benötigt keine dezidierte Seitenvorlage. Er dient zu Referenzierung von absoluten oder/und externen HTTP Adressen. Fragen zu diesen Seitentyp beantworten wir gerne im Forum von Welcompose.