i18n Language Switcher Block, die Links mit den Flaggen themen
Wie kann man beim i18n Module im Block Language Switcher die Links mit den Flaggen themen?
Aufgabe
In diesem Tutorial erkläre ich wie man den Text an den Language-Flaggen entfernt.
Um diese Aufgabe zu realisieren wird ein Template erstellt.
Links bearbeiten
Die Languagelinks mit den Flaggen werden durch eine Theme Funktion der Datei "i18n.module" ausgegeben. Hier der Code dieser Funktion:
/**
* Produces a language link with the right flag
*/
function theme_i18n_link($text, $target, $lang, $query= NULL, $fragment = NULL){
$output = '<span class="i18n-link">';
$attributes = ($lang == i18n_get_lang()) ? array('class' => 'active') : NULL;
$output .= l(theme('i18n_language_icon', $lang), $target, $attributes, $query, $fragment, FALSE, TRUE);
$output .= " ";
$output .= l($text, $target, $attributes, $query, $fragment, FALSE, TRUE);
$output .= '</span>';
return $output;
}
Man kann in den beiden Zeilen mit der l() Funktion die Ausgabe der beiden Links erkennen. Zuerst das Icon einer Flagge und danach der Linktext.
Um den Code dieser Funktion zu ändern wird ein Template erstellt.
Template erstellen
Datei "template.php" erweitern
Um die eigentliche Templatedatei "i18n_link.tpl.php" verwenden zu können muss in der Datei "template.php" im Themeordner des verwendeten Theme die entsprechende Vorbereitung getroffen werden. Um dies zu realisieren wird die "template.php" um folgenden Code erweitert:
/**
* Change the language links
*/
function phptemplate_i18n_link($text, $target, $lang, $query= NULL, $fragment = NULL){
return _phptemplate_callback('i18n_link', array('text' => $text, 'target' => $target, 'lang' => $lang, 'query' => $query, 'fragment' => $fragment));
}
Beim Einfügen dieses Code darauf achten das er sich im Bereich der PHP-Tags befindet.
Templatedatei erstellen
Im Themeordner des verwendeten Themes wird die Datei "i18n_link.tpl.php" neu erstellt. In diese Datei wird zunächst der Code der zu themenden Funktion übernommen. Damit hat die Datei folgenden Inhalt:
<?php
function theme_i18n_link($text, $target, $lang, $query= NULL, $fragment = NULL){
$output = '<span class="i18n-link">';
$attributes = ($lang == i18n_get_lang()) ? array('class' => 'active') : NULL;
$output .= l(theme('i18n_language_icon', $lang), $target, $attributes, $query, $fragment, FALSE, TRUE);
$output .= " ";
$output .= l($text, $target, $attributes, $query, $fragment, FALSE, TRUE);
$output .= '</span>';
return $output;
}
?>
Damit die Templatedatei auch etwas ausgeben kann muss, unabhängig von den Änderungen für die Links, der übernommene Code der Funktion geändert werden. Damit sieht die Templatedatei so aus:
<?php
/** $Id: i18n_link.tpl.php, v 1.0 2007/11/06 quiptime Exp $ */
*
* Produces a language link with a right flag
*/
function theme_i18n_link($text, $target, $lang, $query= NULL, $fragment = NULL){
$output = '';
$output .= '<span class="i18n-link">';
$attributes = ($lang == i18n_get_lang()) ? array('class' => 'active') : NULL;
$output .= l(theme('i18n_language_icon', $lang), $target, $attributes, $query, $fragment, FALSE, TRUE);
$output .= " ";
$output .= l($text, $target, $attributes, $query, $fragment, FALSE, TRUE);
$output .= '</span>';
print $output;
}
?>
Mit diesem Zustand funktioniert das Template und die Ausgabe der Links erfolgt ohne Änderungen aus dieser Datei heraus.
Templatedatei, Code ändern
Um nun die Links auf die Flaggen zu reduzieren wird einfach der für den Linktext zuständige Code entfernt. Damit bekommt die Templatedatei diesen Zustand:
<?php
/** $Id: i18n_link.tpl.php, v 1.0 2007/11/06 quiptime Exp $ */
*
* Produces a language link with only the right flag
*/
function theme_i18n_link($text, $target, $lang, $query= NULL, $fragment = NULL){
$output = '';
$output .= '<span class="i18n-link">';
$attributes = ($lang == i18n_get_lang()) ? array('class' => 'active') : NULL;
$output .= l(theme('i18n_language_icon', $lang), $target, $attributes, $query, $fragment, FALSE, TRUE);
$output .= '</span>';
print $output;
}
?>
Mit dieser Änderung ist die gestellte Aufgabe, als Link nur die Flaggen darzustellen, erledigt.
- Anmelden oder Registrieren um Kommentare zu schreiben
Drupal 6.X
am 09.05.2008 - 23:42 Uhr
Hallo,
und hier mal zum Vergleich die entsprechende Variante für Drupal 6.X (die Ausgabe wird hier durch das Modul languageicons erstellt):
man erstellt eine Datei namens languageicons-place.tpl.php, mit folgendem Inhalt:
<?php print $icon; ?>
Kein Witz, das wars schon.
Gruß,
Boris
Wo kommt die languageicons-place.tpl.php hin
am 27.05.2010 - 09:23 Uhr
@Boris,
wo wird die Datei languageicons-place.tpl.php gespeichert. Ich habe versucht sie unter : \sites\all\modules\languageicons und/oder \themes\garland zu speichern, die drei möglichkeiten funktionieren bei mir aber nicht?
Wie bekomme ich es hin, dass nur die entsprechenden Flaggen zu sehen sind, d.h. keine Überschrift und keine separator Zeichen also alle flaggen nur in einer Zeile?
Gruss Mike
auch wenn der Post schon
am 27.04.2012 - 14:39 Uhr
auch wenn der Post schon älter ist, vll stößt ja jemand über die Suche auf diesen Beitrag, so wie ich gerade.
Die Antwort auf mikefrieds Post ist: Die Datei gehört in den template-Ordner des aktiven Themes.
Das das nicht funktioniert hat, ist vermutlich auch denkbar einfach.
Der Vorposter hat vermutlich vergessen zu erwähnen, das er das Modul language icons installiert hat.
Mit diesem Modul ist es möglich, Flaggen vor den Sprachen anzuzeigen, und wenn man die genannte Templatedatei erstellt, werden eben nur die Flaggen angezeigt.
Das dann noch alles ein eine Zeile zu bekommen etc ist dann nur noch eine Sache des CSS.
Vielleicht hilft das ja noch irgendwem.