Multilinguale Webs
Copyright by Piratos, 2005
Die Aufgabe ist klar - man hat Inhalte, die in verschiedenen Sprachen zur Verfügung stehen. Nun soll dem Besucher natürlich auch die Möglichkeit beschert werden, ein Menü in seiner Sprache präsentiert zu bekommen. Das ist mit Pimenu einfach zu machen.
Überlegungen
Es sollen Inhalte in Deutsch und in Englisch geliefert werden. Als Default-Sprache ist Deutsch eingesetzt. Es muss also eine Möglichkeit geben, auch das englische Menü zu steuern. Auf der anderen Seite wird im Admin-Bereich ein übergeordnetes Ordnungssystem benötigt, um die deutschen und englischen Inhalte sauber zu trennen.
Dafür werden Sectionheader mit den Namen Deutsch und English gewählt - die Sectionheader sollen NICHT im Menü angezeigt werden. Alle Inhalte der jeweiligen Sprache werden unterhalb des dazu gehörenden Sectionheader angelegt.
Ab der Version 2.05 ist es möglich, die Bereiche über die Sectionheader sozusagen automatisch zu gruppieren. Der Vorteil ist, dass dann innerhalb der Sprachgruppen alle Typen, also auch weitere Sectionheader, verwendet werden können.
Das aber allein reicht nicht aus - es fehlt ein Schalter zur Entscheidungsfindung, der von aussen seinen Wert an Pimenu abgibt und der wiederum im Template zur Auswertung herangezogen werden kann.
Das kann Pimenu, es wertet eine $_GET - Variable mit dem Namen pimsw (steht für pimenuswitch) aus, wenn vorhanden und setzt eine Smartyvariable $pimsw - default ist 0. Da die Defaultsprache Deutsch ist, erhalten alle deutschen Menüeinträge über den Link den Zusatz &pimsw=0 , die englischen Inhalte &pimsw=1.
Nun nehmen wir das Standardtemplate pimenu.tpl, welches das CSSMENU darstellt und verändern es für unsere Zwecke:
Code: Select all
{if $pimsw eq 0}
<form action="index.php" method="get">
<input type="hidden" name="page" value="Suchergebnisse" />
<input type="hidden" name="pimsw" value="0" />
<input type="text" value="" maxlength="50" size="15" name="pisearch" id="query_string" />
<input type="submit" value="Suchen" id="buttonSearch" />
</form>
{else}
<form action="index.php" method="get">
<input type="hidden" name="page" value="Searchresults" />
<input type="hidden" name="pimsw" value="1" />
<input type="text" value="" maxlength="50" size="15" name="pisearch" id="query_string" />
<input type="submit" value="Search" id="buttonSearch" />
</form>
{/if}
<div id="listmenu">
<a href="index.php?page=Home&pimsw=0">Deutsch</a><br />
<a href="index.php?page=Homepage&pimsw=1">English</a><br />
<ul id="primary-nav-vert" class="cssmenu-vertical">
{foreach from=$rawmenu item=entry}
{if $entry->current_lang eq 0 and $pimsw eq 0}
{if $entry->show_in_menu eq 1}
{if $entry->depth neq 0}
{if $entry->next_level > $entry->depth}
{if $entry->type <>'separator'}
<li class="menuparent"><a href="{$entry->url}&pimsw=0"{if $entry->iscurrent eq 1}class="currentpage"{/if}>{$entry->menutext}</a><ul>
{else}
<li class="separator"><ul>
{/if}
{/if}
{if $entry->next_level == $entry->depth}
{if $entry->type <>'separator'}
<li><a href="{$entry->url}&pimsw=0"{if $entry->iscurrent eq 1}class="currentpage"{/if}>{$entry->menutext}</a></li>
{else}
<li class="separator"><li>
{/if}
{/if}
{if $entry->next_level < $entry->depth}
{if $entry->next_level > 0}
{if $entry->type <>'separator'}
<li><a href="{$entry->url}&pimsw=0"{if $entry->iscurrent eq 1}class="currentpage"{/if}>{$entry->menutext}</a></li></ul></li>
{else}
<li class="separator"></li></ul></li>
{/if}
{else}
{if $entry->type <>'separator'}
<li><a href="{$entry->url}&pimsw=0"{if $entry->iscurrent eq 1}class="currentpage"{/if}>{$entry->menutext}</a>
{else}
<li class="separator">
{/if}
{/if}
{/if}
{else}
{$entry->trenner}
{/if}
{/if}
{/if}
{if $entry->current_lang eq 1 and $pimsw eq 1}
{if $entry->show_in_menu eq 1}
{if $entry->depth neq 0}
{if $entry->next_level > $entry->depth}
{if $entry->type <>'separator'}
<li class="menuparent"><a href="{$entry->url}&pimsw=1"{if $entry->iscurrent eq 1}class="currentpage"{/if}>{$entry->menutext}</a><ul>
{else}
<li class="separator"><ul>
{/if}
{/if}
{if $entry->next_level == $entry->depth}
{if $entry->type <>'separator'}
<li><a href="{$entry->url}&pimsw=1"{if $entry->iscurrent eq 1}class="currentpage"{/if}>{$entry->menutext}</a></li>
{else}
<li class="separator"><li>
{/if}
{/if}
{if $entry->next_level < $entry->depth}
{if $entry->next_level > 0}
{if $entry->type <>'separator'}
<li><a href="{$entry->url}&pimsw=1"{if $entry->iscurrent eq 1}class="currentpage"{/if}>{$entry->menutext}</a></li></ul></li>
{else}
<li class="separator"></li></ul></li>
{/if}
{else}
{if $entry->type <>'separator'}
<li><a href="{$entry->url}&pimsw=1"{if $entry->iscurrent eq 1}class="currentpage"{/if}>{$entry->menutext}</a>
{else}
<li class="separator">
{/if}
{/if}
{/if}
{else}
{$entry->trenner}
{/if}
{/if}
{/if}
{/foreach}
</div>
Fertig ist der Salat.
Eigentlich wurde der Teil innerhalb der Schleife dupliziert und wenige Änderungen eingetragen. Sollen noch mehr Sprachen her, macht man entsprechende Teilkopien und trägt die Werte ein.