Spostamento icons lingue su file tpl.php

39 contenuti / 0 new
Ultimo contenuto
Spostamento icons lingue su file tpl.php

Ciao,
sto utilizando il tema danland che mi permette di gestire al meglio il mio sito, ora con la creazione del sito si pone il problema delle lingue e la visualizzazione delle bandierine (maledette bandierine :-( ) vorrei poter inserire le bandierine il alto a dx ma il tema non me lo permette.
Ora ho due soluzioni possibili:
1 aggiungere direttamente una regione modificando il tema originario e fare in modo di posizionare sopra la regione la mia regione così da gestire le icone come desidero

2 modificare il file tpl.php in modo da inserire direttamente nel file i riferimenti per la visualizzazione delle bandierine e cambio della lingua.

Premetto che nel primo caso sarei in grado di effettuare le modifiche inserendo la nuova regione il secondo caso invece non so proprio da dove si inizi.

Grazie per i vostri aiuti.
Tz

non ho capito: il tema non ha una regione dove vuoi posizionare le bandiere oppure non riesci a posizionarle in una regione?
nel secondo caso esiste un modulo apposta:
http://drupal.org/project/languageicons
ed eventualmente anche http://drupal.org/project/lang_dropdown

entrambi forniscono un blocco

Ciao Bohz,
ti allego una immagine che alle volte vale più di mille parole. Non riesco a posizionarle dove vorrei perché il tema non gestisce la possibilità di inserire dei blocchi nel header, per capirci nella gestione blocchi non c'è la regione header. Quindi immagino debba lavorare da codice o chiedervi se mi date una mano perché non ne ho proprio idea o decidere di posizionare le "bandierine" da un'altra parte.
Ti mando qui un'immagine.
Tz

per inserire una regione vedi qui:
http://www.drupalitalia.org/node/7349

per una spiegazione più approfondita:
http://drupal.org/node/171224

Grazie!
Per l'inserimento della regione non ci sono problemi solo come vedi dall'immagine non volevo costruire una cosa piramidale non è molto gradevole alla vista, così vorrei capire come inserire proprio il codice e immagino la/le variabile/i associate per far funzionare il tutto. appena ho un attimo cerco di capirci qualcosa. È possibile fare ciò che ho in mente, anche se sono quasi a digiuno di codice?
Grazie
Tz

vedi qui: http://drupal.org/node/313814

per far comparire anche il link/icona del linguaggio corrente credo sia sufficiente omettere l'ultima parte, ovvero

<?php
(...)
$current = i18n_get_lang();
  unset(
$links[$current]);
(...)
?>

leggi bene i commenti al codice che spiegano tutto

eccomi...
non ci sono riuscito...
ho inserito nel modulo locale in locale.module

  // this is copy&paste from locale_block in locale.module
  $languages = language_list('enabled');
  $links = array();
  foreach ($languages[1] as $language) {
    if ($language->language != $current) {
      $links[$language->language] = array(
        'href'       => $_GET['q'],
        'title'      => $language->native,
        'language'   => $language,
        'attributes' => array('class' => 'language-link'),
      );
    }
  }
  // this adds the real paths, i.e. if we are on a german page,
  // the british flag will point to en/english_alias instead of
  // en/node_with_german_content
  translation_translation_link_alter($links, $_GET['q']);
  // This one adds extended languages, i.e. those that are not enabled.
  // Disable if you want only flags for enabled languages.
  i18n_translation_link_alter($links, $_GET['q']);
  // now add or replace text links by flags, according to your i18n settings.
  if (function_exists('languageicons_translation_link_alter'))
    languageicons_translation_link_alter($links, $_GET['q']);
  // Or do your own stuff, e.g. set the flags and no lang names,
  // no matter what the i18n icon settings say.
  //if ($icon = theme('languageicons_icon', $language, NULL)) {
  //   $links[$language->language]['title'] = theme('languageicons_place', $link['title'], $icon);
  //   $links[$language->language]['html'] = TRUE;
  //}
  // remove the current language again. We cannot do that
  // earlier because i18n_translation_link_alter would add it
  // again, thinking it was an extendeg language because it
  // was not yet contained in $links. If you don't use
  // i18n_translation_link_alter, you can also make a case distinction
  // in the foreach loop

ma se lo inserisco non si carica più il sito...nel modulo è presente anche // Language switcher block
devo lasciarlo?
in più nelle prove precedenti ho seguito i commenti ma non ne sono venuto fuori.
Hai modo e tempo di spiegarmi i vari passi?
grazie
tz

ma no!
quel codice va nel template o in un blocco
anzi, meglio, in template.php (funzione preprocess_page) e poi inserito nel template con una variabile

nada...mi spiace ma non so farlo.

<a href="mailto:[email protected]" rel="nofollow">[email protected]</a> wrote:
in template.php (funzione preprocess_page) e poi inserito nel template con una variabile

prova ad incollare quel codice (senza le tag php) all'interno di una div in page.tpl.php

fatto e caricato ho inserito il codice nel file file page.tpl.php

        <div id="search-box">
          <?php print $search_box;
    
$languages = language_list('enabled');
 
$links = array();
  foreach (
$languages[1] as $language) {
    if (
$language->language != $current) {
     
$links[$language->language] = array(
       
'href'       => $_GET['q'],
       
'title'      => $language->native,
       
'language'   => $language,
       
'attributes' => array('class' => 'language-link'),
      );
    }
  }
 
// this adds the real paths, i.e. if we are on a german page,
  // the british flag will point to en/english_alias instead of
  // en/node_with_german_content
 
translation_translation_link_alter($links, $_GET['q']);
 
// This one adds extended languages, i.e. those that are not enabled.
  // Disable if you want only flags for enabled languages.
 
i18n_translation_link_alter($links, $_GET['q']);
 
// now add or replace text links by flags, according to your i18n settings.
 
if (function_exists('languageicons_translation_link_alter'))
   
languageicons_translation_link_alter($links, $_GET['q']);
 
// Or do your own stuff, e.g. set the flags and no lang names,
  // no matter what the i18n icon settings say.
  //if ($icon = theme('languageicons_icon', $language, NULL)) {
  //   $links[$language->language]['title'] = theme('languageicons_place', $link['title'], $icon);
  //   $links[$language->language]['html'] = TRUE;
  //}
  // remove the current language again. We cannot do that
  // earlier because i18n_translation_link_alter would add it
  // again, thinking it was an extendeg language because it
  // was not yet contained in $links. If you don't use
  // i18n_translation_link_alter, you can also make a case distinction
  // in the foreach loop
          
?>
         </div><!-- /search-box -->

credo ovviamente che non si veda nulla perché sarà necessario fare ulteriori modifiche

conviene creare una regione.

in danland.info:

(...)
regions[footer] = Footer
regions[language] = Language icons<--- inserisci questo
features[] = logo
(...)

in page.tpl.php:

(...)
        </div><!-- /header-middle -->
<?php if ($language): ?>                    <--- inserisci questo
    <div id="language">                     <--- inserisci questo
      <?php print $language; ?>             <--- inserisci questo
    </div>                                  <--- inserisci questo
<?php endif; ?>                             <--- inserisci questo
        <div id="search-box">
(...)

poi:
- abilita il modulo PHP input (core-optional)
- crea un blocco ed incollaci il codice suggerito in http://drupal.org/node/313814
- posiziona il blocco nella regione "language"

(ovviamente puoi chiamare la regione come ti pare...)

EDIT: correzioni

ciao Bohz,
ho creato nel file info la regione e poi nel file tal ho inserito il codice

<?php if ($languages): ?>
    <div id="language">
      <?php print $languages; ?>
    </div>
<?php endif; ?>  

in questo modo sono riuscito a visualizzare nei blocchi la regione creata.
Successivamente ho creato un nuovo blocco e con php filter abilitato ho incollato il codice, facendo attenzione a selezionare il tipo di contenuto corretto, dopo aver salvato il messaggio di errore è il seguente:

The string block:1:body for textgroup blocks is not allowed for translation because of its input format.

Eseguito il cron il messaggio scompare e così pure la possibilità di visualizzare le bandierine nella nuova regione
controllando con firebug non ho trovato la regione.
Ciao buona giornata!
Tz

oddio..non so che dire
non è che hai dimenticato di inserire il blocco nella nuova regione?

ciao,
ho fatto delle prove ieri e anche stamane la cosa é strana il blocco dal listato dei blocchi è presente. Ho assegnato il nuovo blocco alla regione così come mi avevi detto e come peraltro ho fatto molte volte, ma non sortisce effetto. Ora l'errore generato è il seguente:
recoverable fatal error: Object of class stdClass could not be converted to string in /var/www/vhosts/mio.com/subdomains/kotorproject/httpdocs/themes/danland/page.tpl.php on line 56.
che corrisponde alla riga in cui si fa riferimento a

<?php
 
print $language;
?>
secondo te dovrei/mmo inserire
language_list

Grazie per la pazienza.
Tz

sto usando lo stesso codice (che posto qua sotto), nello stesso modo (codice nel blocco) e mi funziona.

alcune note:
- nei blocchi bisogna MANTENERE le tag php (quindi TUTTO il code qui sotto)
- hai provato con un altro blocco nella regione $language?

<?php
 
// this is copy&paste from locale_block in locale.module
 
$languages = language_list('enabled');
 
$links = array();
  foreach (
$languages[1] as $language) {
    if (
$language->language != $current) {
     
$links[$language->language] = array(
       
'href'       => $_GET['q'],
       
'title'      => $language->native,
       
'language'   => $language,
       
'attributes' => array('class' => 'language-link'),
      );
    }
  }
 
// this adds the real paths, i.e. if we are on a german page,
  // the british flag will point to en/english_alias instead of
  // en/node_with_german_content
 
translation_translation_link_alter($links, $_GET['q']);
 
// This one adds extended languages, i.e. those that are not enabled.
  // Disable if you want only flags for enabled languages.
 
i18n_translation_link_alter($links, $_GET['q']);
 
// now add or replace text links by flags, according to your i18n settings.
 
if (function_exists('languageicons_translation_link_alter'))
   
languageicons_translation_link_alter($links, $_GET['q']);
 
// Or do your own stuff, e.g. set the flags and no lang names,
  // no matter what the i18n icon settings say.
  //if ($icon = theme('languageicons_icon', $language, NULL)) {
  //   $links[$language->language]['title'] = theme('languageicons_place', $link['title'], $icon);
  //   $links[$language->language]['html'] = TRUE;
  //}
  // remove the current language again. We cannot do that
  // earlier because i18n_translation_link_alter would add it
  // again, thinking it was an extendeg language because it
  // was not yet contained in $links. If you don't use
  // i18n_translation_link_alter, you can also make a case distinction
  // in the foreach loop
 
$current = i18n_get_lang();
  unset(
$links[$current]);
$switcher_title = t('Cambia lingua');
 
// format as you like, e.g.
 
echo theme('links', $links, array('title' => $switcher_title));
?>

State attenti. $language esiste già in page.tpl.php (ed è un oggetto). Cambia il nome del region 'flags'?

Più imparo, più dubito.

ok adesso provo cambiando nome della regione in flags e vediamo cosa ne esce.
Grazie!
Tz

scusate non ho capito...il problema non è la regione ma la variabile, quindi cosa devo fare...

sì ho provato con un altro blocco nella regione e non si vede,
il problema risiede sempre nella riga 56 con il nome della variabile.

ah si si! scusa, $language è proprio il nome sbagliato.
cambialo
grazie John

Come ha scritto Carlo, ma cambiando la regione in language_icons:

<a href="mailto:[email protected]" rel="nofollow">[email protected]</a> wrote:
conviene creare una regione.

in danland.info:

(...)
regions[footer] = Footer
regions[language_icons] = Language icons<--- inserisci questo
features[] = logo
(...)

in page.tpl.php:

(...)
        </div><!-- /header-middle -->
<?php if ($language_icons): ?>                    <--- inserisci questo
    <div id="language-icons">                     <--- inserisci questo
      <?php print $language_icons; ?>             <--- inserisci questo
    </div>                                  <--- inserisci questo
<?php endif; ?>                             <--- inserisci questo
        <div id="search-box">
(...)

poi:
- abilita il modulo PHP input (core-optional)
- crea un blocco ed incollaci il codice suggerito in http://drupal.org/node/313814
- posiziona il blocco nella regione "language_icons"

Più imparo, più dubito.

ok non ho più l'errore ma,

The string block:1:body for textgroup blocks is not allowed for translation because of its input format.

continua a esserci ho fckeditor e anche se seleziono Switch to plain text editor e copio il codice il problema rimane e persiste il problema che qualunque blocco inserito non è visibile.
ho provato anche ad aumentare header perché, magari il blocco non era visibile ma nulla...

quell messaggio di avviso è legato alle impostazioni delle stringhe di traduzione che non hanno abilitato il formato di input PHP come traducibile. se devi tradurre qualcosa in quel blocco (ne dubito) puoi abilitarlo a:
/admin/settings/language/configure/strings

per il resto:
- se il blocco che abbiamo faticosamente creato si vede in altre regioni ma non in quella nuova e se nessun blocco si vede nella regione nuova direi che:

- o il problema è legato al il tema danland (cambia tema per provare)
- o hai fatto qualche errore/svista nella creazione della regione
- o c'è un problema di CSS che non permette la visualizzazione dei blocchi nella nuova regione (controlla il codice sorgente della pagina)
...oppure non so!

ciao dopo vari tentativi ora funziona!
Grazie di cuore.
ora come lo imposto in orizzontale... non basta

#block-block-1 {
display: inline;
}

anche ul e li devono essere impostati?
tz

ho modificato inserendo

#block-block-1 li {
display: inline;
}

vedo effettivamente le bandierine in orizzontale in base all'esistenza o meno della traduzione è possibile vedere una o più bandierine

per togliere il "pallino" dalla visualizzazione delle bandierine come posso fare?
ho visto che con firebug il codice fa riferimento a:

li.leaf {
background:url("images/menu-leaf.gif") no-repeat scroll 1px 0.35em transparent;

#block-block-1 li.leaf {
display: none;
}

inserendo un codice di questo tipo non sortisco nessun effetto cosa devo modificare?
Grazie
Tz

list-style-type:none;

Ciao ho provato a inserire il codice

#block-block-1 li.leaf {
list-style-type:none;
}

Ma i pallini rimangono ancora non vorrei che altre a fare il cron debba aspettare per vedere le modifiche così come per la visualizzazione della regione...
Grazie
Tz

Forse sei troppo specifico, prova:

#block-block-1 li {
  list-style-type: none;
}

Più imparo, più dubito.

ho provato con

#block-block-1 li {
     display: inline;
     list-style-type: none;
}

poiché se lascio solo

#block-block-1 li {
  list-style-type: none;
}

perdo anche la formattazione in linea...
ma non succede nulla ho svuotato la cache e fatto girare cron ma non succede ancora nulla

Oops...

#block-block-1 ul {
  list-style-type: none;
}
#block-block-1 li {
  display: inline;
}

Non dovrebbe essere necessario svuotare il cache o fare girare cron - basta un F5 o Ctrl + R della pagina nel browser.

Più imparo, più dubito.

nada de nada né con il semplice ctrl r né con il cron...

Ho dato un occhiata al demo di quel tema: http://www.danetsoft.com/demo/ ed è un pò ottuso. Non usa un list-style-type bensi un immagine, quindi dovrebbe essere sufficiente solo:

#block-block-1 li {
  background-image: none;
  display: inline;
}

N.B. Il codice che hai messo in page.tpl.php devi anche mettere in page-front.tpl.php (se non l'hai già fatto).

Più imparo, più dubito.

facendo così non ho la possibilità di vedere la bandiera. Dovrei forse inserire nuovamente:

#block-block-1 li.leaf {
background-image: none;
display: inline;
}

?

nemmeno in questo caso funziona...

Senza vedere la pagina sarà dura arrivarci. Puoi copiare qui o in pastebin il codice HTML che sta in quella regione? (Il contenuto generato da

<div id="language-icons">
  <?php print $language_icons; ?>
</div>

per intenderci)

Più imparo, più dubito.

ti posso tranquillamente scrivere la pagina non è un problema...
http: project . miosito. com (basta togliere gli spazi...) eh eh

come vedrai è il sito di un progetto che prevede la partecipazione anche di altre nazioni. Quello di cui dubito è se la strada intrapresa sia corretta. forse la creazione di un blocco come proposto giustamente da bohz non ha senso. Potrei usare direttamente il modulo base icons. Scusa se non mi sono fatto "vivo" ma oggi non sono mai rimasto a casa...

PS abbiamo un cane anche noi, ma il rapporto cane padrone é molte volte invertito :-)
{non ho mai usato pastebin}
Ciao e grazie per l'aiuto.
Tz

Grazie - sono andato sul sito, e con Firebug ho aggiunto background-image: none al selector che ha tolto il circietto davanti:

#block-block-1 li {
  background-image:  none;
  display:  inline;
}

Il nome del div è language-icons non $language-icons
<div id="language-icons">

CI sono altri miglioramenti che si può fare, ma non ho tempo ora.

Puoi usare uno delle funzione theme di languageicons (se questo è il modulo che stai usando) invece del blocco.

Più imparo, più dubito.

vedi se va così

#block-block-1 ul {
float:right;
list-style-type:none;
overflow:hidden;
padding:5px;
#block-block-1 ul li {
background:none transparent;
}

ciao,
se seguo le indicazioni di bohz, riesco ad avere la bandiera a dx ma tutti i blocchi automaticamente si spostano al limite dello schermo sulla sinistra.
Se inserisco il codice di jhl.verona il tutto funziona senza problemi, quindi ho inserito float right e la bandiera si è spostata a dx.
Grazie di cuore per avermi aiutato a capire come risolvere questa situazione. Per le migliorie o per dei suggerimenti sono sempre pronto ad ascoltare e migliorare, grazie.
Tz