[PHP] Wordpress: Item weergeven op basis van taal

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 111246

Topicstarter
Wat ik probeer te breiken is het volgende:

De searchbox in NL en EN op dezelfde positie weergeven met een breedte van 149px.

Ik maak gebruik van het "twentytwelve" thema met het standaard menu.
Daar voeg ik een searchbox aan toe via een toevoeging aan functions.php.

Ik weet dat je de tekst makkelijk kunt vertalen, maar daar gaat het in deze niet om.
't gaat in deze om de positie van de box op basis van de taal i.c.m. het menu (ik gebruik alleen NL/EN).
Bij EN zijn de omschrijvingen namelijk langer dan in het NL.

Wat ik tot nu toe heb in PHP:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* Search Widget 
*/

function style_search_form($form) {
    $curLang = qtrans_getLanguage();
    $form = '<li><form method="get" id="searchform" action="' . get_option('home') . '/" >
            ' . __('') . '</label>
            ';
    if (is_search()) {
        $form .='<input align="right" type="text" value="' . attribute_escape(apply_filters('the_search_query', get_search_query())) . '" name="s" id="s" />';
    } else {        
        
        if ($curLang = nlnl)
         {
        $form .='&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input align="right" style="width: 149px;" type="text" value="Zoeken" name="s" id="s" onfocus="if(this.value==this.defaultValue)this.value=\'\';" onblur="if(this.value==\'\')this.value=this.defaultValue;"/>';
        }
        else {
        $form .='&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input align="right" style="width: 149px;" type="text" value="Search" name="s" id="s" onfocus="if(this.value==this.defaultValue)this.value=\'\';" onblur="if(this.value==\'\')this.value=this.defaultValue;"/>'; }

    }
    $form .= '</form></li>';
    return $form;
}
add_filter('get_search_form', 'style_search_form');


add_filter('wp_nav_menu_items','add_search_box', 10, 2);
 function add_search_box($items, $args) {
ob_start();
 get_search_form();
 $searchform = ob_get_contents();
 ob_end_clean();
$items .= '
' . $searchform . '
';
return $items;
 }


Dit ziet er dan zo uit bij NL weergave:
Afbeeldingslocatie: http://i50.tinypic.com/2059mw0.png

En zo bij EN weergave:
Afbeeldingslocatie: http://i50.tinypic.com/dnlnk7.png

Zoals te zien is wordt om (voor mij nog) onduidelijke reden alleen de NL versie van de searchbox weergegeven. In de NL layout is de positie goed, in de EN versie niet.

Met het taal icoon is zoals je ziet het e.a. wel gelukt.
Dat gaat via de Qtranslate plugin. Het taal icoon wordt weergegeven op de volgende manier:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
 * Qtranslate Language Switcher in Menu
 *
 * @since Twenty Twelve 1.0
 */

add_filter( 'wp_nav_menu_items', 'append_qtrans_menu_item', 10, 2 );
function append_qtrans_menu_item( $items, $args )
{
if ($args->theme_location != 'primary')
return $items;

$languages = array('en' => '<img src="/wp-content/plugins/qtranslate/flags/gb.png">', 'nl' => '<img src="/wp-content/plugins/qtranslate/flags/nl.png">');
$curLang = qtrans_getLanguage();
foreach ($languages as $lang => $caption)
if ($lang != $curLang)
break;

$href = qtrans_convertURL( (''), $lang );
$items .= "<li class='menu-item' id='menu-item-lang'><a href='$href'>$caption</a></li>";

return $items;
}

Ook dat heb ik geprobeerd te reproduceren voor de searchbox, maar helaas zonder succes.

Die site is nog niet online dus een link behoort niet tot de mogelijkheden.

Wie o wie weet mij in de juiste richting te helpen?

Acties:
  • 0 Henk 'm!

  • DNB
  • Registratie: Juni 2007
  • Laatst online: 30-06 14:50

DNB

Je schrijft op regel 14:
PHP:
1
if($curLang = nlnl)

Dit is een toewijzing, je zegt hiermee dat de variabele $curLang de waarde nlnl krijgt. Dat zal altijd als waar evalueren, dus krijg je altijd de Nederlandse variant te zien.
Wat je wilt is een vergelijking geen toewijzing, dat gaat met ==. Daarnaast ben je volgens mij vergeten "nl" tussen aanhalingstekens te zetten.
Zoiets zal wel werken:
PHP:
1
if($curLang == "nl")


Maar daarnaast, het lijkt mij handiger om de searchbox altijd gewoon rechts uit te lijnen, dat is een stuk netter dan een bepaald aan spaties toe te voegen. Dat kan nogal makkelijk foutgaan als je bv. een andere browser of andere instellingen gebruikt.

[ Voor 21% gewijzigd door DNB op 10-02-2013 15:48 ]


Acties:
  • 0 Henk 'm!

Anoniem: 111246

Topicstarter
Pffff... hoe simpel kan het zijn. :S ;)
Opgelost met:

PHP:
1
if ($curLang == "nl")


Thanks! :)
Weer 1½ uur van m'n leven verprutst door zoiets sufs. :P

Dat uitlijnen heb ik nog op de lijst staan om via een CSS te doen.
Echter valt de box binnen het gehele menu, hoe je binnen die CSS dan 1 onderdeel helemaal rechts kunt uitlijnen ben ik nog niet uit.

In FF/Chrome valt ie inderdaad naar een volgende regel toe.

[ Voor 43% gewijzigd door Anoniem: 111246 op 10-02-2013 15:52 ]


Acties:
  • 0 Henk 'm!

  • JeroenT
  • Registratie: Juli 2001
  • Laatst online: 02-07 20:26

JeroenT

hoi!

Misschien een klein beetje offtopic, maar maak gebruik van CSS i.p.v. al die lelijke '& n b s p ;' spaties.

Acties:
  • 0 Henk 'm!

  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 09-06 23:17

Wiethoofd

Broadcast TOM

Anoniem: 111246 schreef op zondag 10 februari 2013 @ 15:50:
Echter valt de box binnen het gehele menu, hoe je binnen die CSS dan 1 onderdeel helemaal rechts kunt uitlijnen ben ik nog niet uit.
float: right in je CSS op bijvoorbeeld dat zoekveld, de align=right die je nu meegeeft zorgt er alleen voor dat de tekst in het veld rechts uitgelijnd wordt. Maar dat hoort dan weer in Webdesign, Markup & Clientside Scripting thuis :P

Volg me op Twitter/X & Bluesky