Probleme beim themen von i18n-Language Switcher
am 06.11.2007 - 13:16 Uhr in
Hallo, hab mal wieder eine kleine Verständnisfrage..
Ich will den Language Switcher des i18n Moduls so gestalten, dass er nicht in einer Liste untereinander, sondern lediglich die Flaggen nebeneinander angezeigt werden. Nun hab ich ewig gesucht, wie und wo das i18n-Modul auf die entsprechende CSS-Klasse zugreift und dies gefunden:
$blocks['subject'] = t('Languages');
$query = drupal_query_string_encode($_GET, array('q'));
$blocks['content'] = theme('item_list', i18n_get_links($_GET['q'], empty($query) ? NULL : $query));
Hab angenommen, dass das Modul auf die CSS-Klasse "item_list" zugreift, es gibt aber lediglich die Klasse "item-list" (also Bindestrich statt Unterstrich). Hab probehalber das Modul auf eine neue Klasse "item_lang" zugreifen lassen, die ich zuvor im CSS als "item-lang" definiert habe - hat aber erwartungsgemäß nicht funktioniert.
Hat jemand ne Idee, wo ich nun die richtige CSS-Klasse ansprechen kann? Ich find mich nicht mehr raus...
Vielen Dank schonmal vorneweg!
Beate
- Anmelden oder Registrieren um Kommentare zu schreiben
Hast Du Dir mal die Funktion
am 06.11.2007 - 14:23 Uhr
Die Loesung Deines Problemes ist nicht nur eine Frage von CSS.
Mittels Template bringst Du den Block dazu, nur die Flaggen anzuzeigen. Mitt CSS formatierst Du die Liste, in der sich die Flaggen befinden, so, dass die Flaggen nebeneinander stehen und keine List-bullits angezeigt werden.
In der Datei "i18n.module" gibt es 2 theme Funktionen: function theme_i18n_link() und function theme_i18n_language_icon(). Bei denen koennte man ansetzen.
Wenn Du online entwickelst poste bitte den Link. Ich muesste den Block mal sehen. Habe gerade keine LangInstallation zur Verfuegung.
PS
Ich glaube, zumindest war es mal so, es gibt 2 versch. Bloecke zum Sprache umschalten. Und,
genau das was Du moechtest habe ich schon mal realisiert.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Link
am 06.11.2007 - 14:29 Uhr
Hallo quiptime,
danke für die schnelle Antwort. Hier der Link zur Seite: http://ocp.uni-passau.de/sprachportal/. Ich hab momentan den Ursprungszustand des Blocks wiederhergestellt, da sie sonst ziemlich zerhauen aussah. Der Block soll irgendwann in die "Breadcrumbzeile", also rechts unter das Suchfeld.
Danke für den Tipp mit der Funktion, da hab ich wohl zu einfach gedacht.
LG, Beate
*edit: Wo finde ich die Funktion?
Hier kommst Du an die Links
am 06.11.2007 - 15:31 Uhr
Hier kommst Du an die Links mt den Flaggen ran. Datei "i18n.module":
/**
* 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;
}
Text an den Flaggen entfernen
In der Datei "template.php" diesen Code neu einfuegen:
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));
}
Der Code in der neu zu erstellenden Template-Datei "i18n_link.tpl.php" (im Themeordner) wuerde so aussehen:
<?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;
}
?>
Durch die hier vorgenommene Aenderung gegenueber der theme Funktion ist der Text weg und nur die Flaggen werden ausgegeben.
Flaggen formatieren
In der CSS Deines Themes noch folgende Formatierung.
#block-i18n-0 .item-list ul li {
background-image: none;
display: inline;
margin: 0 12px 0 0;
}
Die 12px musst Du noch anpassen wegen dem Abstand der Flaggen nebeneinander.
Da Du die Flaggen spaeter rechts positionieren willst waere es besser mit
margin: 0 0 0 12px;
. Damit hast Du bei der rechten Flagge am rechten Seitenrand kein Abstandsproblem.An dieser Stelle stehen nun die Flaggen nebeneinander ohne Text im Block mit dem Blocktitel "Languages".
Block, Titel entfernen
Um den Blocktitel "Languages" zu entfernen gehst du in die Administration -> Bloecke. In der Konfiguration des Blockes Language Switcher gibst Du als Blocktitel <none> ein. Damit ist der Titel inclusive h3 Tag bei der Anzeige weg.
Flaggen im Layout positionieren
Nun soll der "gecleante" Block Language Switcher noch an die Stelle unterhalb des Suchfeldes.
Um dies zu realisieren erstellst Du Dir am besten eine neue Region. Diese Region ist im Layout so positioniert das sie sich unmittelbar unterhalb des Suchfeldes befindet. Dieser Region wird in der Administration -> Bloecke nur der Block Language Switcher zugewiesen.
Wenn Du noch wissen willst wie Du die eigene Region erstellst dann frage. Dazu brauche ich den Namen des verwendeten Themes und den Code der "page.tpl.php".
Ausserdem muss ich noch die Namen der im Theme bereits verwendeten Regionen wissen. Ergibt sich meist bereits aus der "page.tpl.php".
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
WOW!
am 06.11.2007 - 16:32 Uhr
Vielen Dank für die Mühe! Funktioniert super! Ich würd gern noch wissen, wie ich eine eigene Region erstelle - aber du hast schon soviel Zeit in mein Problem investiert... Gibts irgendwo eine Anleitung dazu? Ich konnte in den Handbüchern keine finden.
Ich hab der "Einfachheit halber" YAML verwendet, Regionen gibts bei mir bisher nur left sidebar, content, header und footer. Die page.tpl.php sieht wie folgt aus:
<?php print $xml_prolog ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language ?>" lang="<?php print $language ?>">
<head>
<title><?php print $head_title ?></title>
<?php print $head ?>
<?php print $styles ?>
<?php print $scripts ?>
</head>
<body>
<?php print $fontsize_init ?>
<div id="page_margins">
<div id="page">
<div id="header" class="clearfix">
<div id="topnav">
<a class="skip" href="#navigation" title="<?php print t('Skip to the navigation') ?>"><?php print t('Skip to the navigation') ?></a><span class="hideme">.</span>
<a class="skip" href="#content" title="<?php print t('Skip to the content') ?>"><?php print t('Skip to the content') ?></a><span class="hideme">.</span>
<?php if (isset($secondary_links)) { ?><span><?php print theme('links_secondary', $secondary_links) ?></span><?php } ?>
</div>
<?php print $header ?>
<?php if ($logo) { ?><a href="<?php print $base_path ?>" title="<?php print t('Home') ?>"><img id="site-logo" class="_trans" src="<?php print $logo ?>" alt="<?php print t('Home') ?>" /></a><?php } ?>
<?php if ($site_name) { ?><h1 id="site-name"><a href="<?php print $base_path ?>" title="<?php print t('Home') ?>"><?php print $site_name ?></a></h1><?php } ?>
<?php if ($site_slogan) { ?><div id="site-slogan"><?php print $site_slogan ?></div><?php } ?>
<?php print $search_box ?>
</div>
<!-- begin: main navigation #nav -->
<div id="nav"> <a id="navigation" name="navigation"></a> <!-- skip anchor: navigation -->
<?php if (isset($primary_links)) { ?>
<div id="nav_main">
<?php print theme('links_primary', $primary_links) ?>
</div>
<?php } ?>
</div>
<div id="nav-bar" class="clearfix">
<?php print $breadcrumb ?>
<?php print $fontsize_links ?>
</div>
<!-- end: main navigation -->
<!-- begin: main content area #main -->
<div id="main">
<?php if ($mission) { ?>
<!-- #mission: between main navigation and content -->
<div id="mission" class="clearfix">
<?php print $mission ?>
</div>
<?php } ?>
<!-- begin: #col1 - first float column -->
<div id="col1">
<div id="col1_content" class="clearfix">
<?php print $sidebar_left ?>
</div>
</div>
<!-- end: #col1 -->
<!-- begin: #col3 static column -->
<div id="col3">
<div id="col3_content" class="clearfix"> <a id="content" name="content"></a> <!-- skip anchor: content -->
<div id="col3_inside" class="floatbox">
<?php if ($title) { ?><h2 class="title"><?php print $title ?></h2><?php } ?>
<?php if ($tabs) { ?><div class="tabs"><?php print $tabs ?></div><?php } ?>
<?php print $help ?>
<?php print $messages ?>
<?php print $content ?>
</div>
</div>
<!-- begin: IE column clearing -->
<div id="ie_clearing"> </div>
<!-- end: IE column clearing -->
</div>
<!-- end: #col3 -->
</div>
<!-- end: #main -->
<!-- begin: #footer -->
<div id="footer">
<!--
GERMAN:
Diese Rückverlinkung darf nur entfernt werden,
wenn Sie eine YAML-Framework und YAML für Drupal Lizenz besitzen.
:: Lizenzbedingungen: http://www.yaml.de und http://www.yaml-fuer-drupal.de
ENGLISH:
This back linking maybe only removed,
if you possess a YAML Framework and YAML for Drupal license.
:: License conditions: http://www.yaml.de and http://www.yaml-for-drupal.com
-->
<?php print theme('footer_message', $footer_message) ?>
</div>
<!-- end: #footer -->
</div>
</div>
<?php print $closure ?>
</body>
</html>
Ich verwende nur das zweispaltige Layout, daher ist der div-Bereich col3 irrelevant.
Nochmals vielen Dank für deine Hilfe - und wie gesagt, der Link zu einer guten Anleitung würde mir auch schon ausreichen, damit ich auch noch was zu tun habe ;-)
LG, Beate
Hier 'ne Handvoll
am 06.11.2007 - 17:13 Uhr
Hier 'ne Handvoll Anleitungen:
http://drupal.org/node/29139
http://www.theartlab.net/drupal-school-adding-block-regions (Screencast)
http://www.nicklewis.org/node/846
http://mydrupalblog.lhmdesign.com/creating-custom-regions
Wichtig bei der Funktionsdefinition fuer die Regionen in der Datei "template.php" bei der function mytheme_regions()
Die Bezeichnung "mytheme" muss dem Namen des verwendeten Themes entsprechen. In Deinem Falle
function yaml_regions() {
return array(
'left' => t('left sidebar'),
'content' => t('content'),
'header' => t('header'),
'footer' => t('footer'),
'languages' => t('language navigation')
);
}
Die Bezeichnungen bei
'languages' => t('language navigation')
kannst Du frei waehlen. Musst dabei lediglich auf die Uebereinstimmung in der "page.tpl.php" achten. Soll heissen, wenn der Array-Key "languages" heisst ist die zugehoerige Variable $languages.Die Aenderung der "page.tpl.php" koennte so funktionieren:
<!-- begin: main navigation #nav -->
<div id="nav"> <a id="navigation" name="navigation"></a> <!-- skip anchor: navigation -->
<?php if (isset($primary_links)) { ?>
<div id="nav_main">
<?php print theme('links_primary', $primary_links) ?>
</div>
<?php } ?>
</div>
<?php if (isset($languages)) { ?>
<div id="nav_languages">
<?php print $languages; ?>
</div>
<?php } ?>
<div id="nav-bar" class="clearfix">
<?php print $breadcrumb ?>
<?php print $fontsize_links ?>
</div>
<!-- end: main navigation -->
Nun den den Textstring "language navigation" uebersetzen und den Block Language Switcher der neuen Region zuweisen.
PS
Was lustiges am Rande bei diesem YAML Theme, "base.css" Zeile 70
fieldset, img
border: 0 solid;
}
Wenn der Border 0 ist muss er nicht solid sein. Ist aber als Formatierung kein Problem. Lediglich der 2. Parameter ueberfluessig.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Das nenn ich mal ne Hilfe!
am 06.11.2007 - 18:07 Uhr
Das nenn ich mal ne Hilfe! Ich bastel jetzt schon seit zwei Tagen an der Sache rum - und nun funktionierts! Und sieht toll aus!
Das hat mir mal wieder gezeigt, dass ich auch nach drei Monaten Arbeit mit Drupal immer noch nicht so tief in der Materie stecke, wie ich mir das gewünscht hätte..
Tausend Dank!
Beate
Super, freue mich auch.
am 06.11.2007 - 18:19 Uhr
Super, freue mich auch.
Vor allem bei Usern wie Dir macht Helfen auch Spass. Man mus nicht jeden Kleinkram erklaeren.
PS
In der Zeile mit den Flaggen, ganz links, ist ein
">"
durchgerutscht.-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Die Flaggen-Navigation abrunden
am 06.11.2007 - 19:39 Uhr
Wenn Du willst kann man noch Einen drauf setzen. Damit ist dann die Flaggen-Navigation absolut rund.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
quiptime wrote: In der
am 07.11.2007 - 09:30 Uhr
In der Zeile mit den Flaggen, ganz links, ist ein
">"
durchgerutscht.Ja, das ">" hab ich gesehen, nur noch nicht "gefunden" - hatte gestern keine Zeit mehr dazu. Was meinst du damit, wie man die Flaggennavigation noch verbessern kann? Bin für jeden Tipp offen!
Beate
Man sollte den a href title
am 07.11.2007 - 09:57 Uhr
Man sollte den a href title verwenden. Damit in der jeweiligen Sprache bei Mouseover eine sinnvolle Info wie "Sprache umschalten" oder so ausgeben.
Dieser Text in jeweiliger Sprache ist fest mit der entsprechenden Flagge verbunden und aendert sich an den einzelnen Flaggen bei Sprachumschaltung nicht. D. h., egal welche Sprache - der Text an einer Flagge ist immer in der dazugehoerigen Sprache.
Ich betone das deswegen, weil dies sehr oft falsch gehandhabt wird. Es macht keinen Sinn an einer Flagge auch den Infotext "Sprache" mit einer Sprachaenderung zu aendern. Denn ausgehend von der gerade eingestellten Sprache koennen Andersprachige ja dann den Text ihrer Flagge nicht verstehen weil er nicht in ihrer Sprache (die Flagge) ist.
Das hoert sich jetzt gewaltig an, ist am Ende ganz Simpel und gegenueber dem Besucher der Website eine nette Geste.
(Und, obwohl die Flaggen eindeutige Symbole sind muss man auch an solchen Stellen vom DAU ausgehen.)
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Korrektur für die Templatedatei "i18n_link.tpl.php"
am 08.11.2007 - 01:38 Uhr
Ein kleiner Fehler
hat sich eingeschlichen. Bitte den Code der Datei "i18n_link.tpl.php" korrigieren.
function theme_i18n_link($text, $target, $lang, $query= NULL, $fragment = NULL){
$output = '';
$attributes .= ($lang == i18n_get_lang()) ? array('class' => 'active') : NULL;
Die Korrektur ist der Punkt vor dem Gleich.
Siehe auch im Handbuch: http://www.drupalcenter.de/handbuch/6325
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.