- Le plugin sfFormExtraPlugin est installé
- Le module "language" a été généré
- Les langues disponibles sont créées dans app.yml
Modifier la Classe de Composants
"components.class.php" a été créée. Elle est modifié ainsi :
public function executeDrapeaux(sfWebRequest $request)Le composant "language" a été remplacé par le composant "drapeaux"
{
# les drapeaux
// $this->drapeaux_list = array('en', 'fr');
$this->drapeaux_list = array_keys(sfConfig::get('app_langues_interface',array()));
# la route en cours est définie
$current_route_pure = sfContext::getInstance()->getRouting()->getCurrentInternalUri();
if ($request->getParameter('id')):
$this->current_route = $current_route_pure.'&id='.$request->getParameter('id');
else:
$this->current_route = $current_route_pure;
endif;
}
- Le composant inclut est donc appelé différemment dans le template général : /apps/frontend/templates/layout.php
<?php include_component('language','drapeaux') ?>
Modifier appel au composant dans le layout
Le template correspondant au composant "language" (/apps/frontend/modules/language/templates/_language.php) est remplacé par le template correspondant au composant "drapeaux" : /apps/frontend/modules/language/templates/_drapeaux.php.
Ce template doit prendre en compte la route actuelle :
<!-- boucle des formulaires-drapeaux -->
<?php foreach ($drapeaux_list as $drapeau): ?>
<form action="<?php echo url_for('@language_change') ?>" id="<?php echo $drapeau ?>" class="container_drapeau" method="post">
<input type="hidden" name="last_route" value="<?php echo $current_route; ?>">
<input type="hidden" name="last_culture" value="<?php echo $sf_request->getParameter('sf_culture') ?>">
<input type="hidden" name="new_culture" value="<?php echo $drapeau ?>">
<input name="drapeau" type="submit" value="<?php echo $drapeau ?>" class="drapeau_<?php echo $drapeau ?>">
</form>
<?php endforeach ?>
Créer une nouvelle route et une nouvelle action
On crée une nouvelle route dans /apps/frontend/config/routing.yml :
language_change:
url: /language_change
param: { module: language, action: languageChange }
Cette nouvelle route dirige vers une action (languageChange), on crée donc cette action dans /apps/frontend/modules/language/actions/actions.class.php :
public function executeLanguageChange(sfWebRequest $request)
{
# change le language à l'aide de petits drapeaux
# assigner une nouvelle culture au User
$new_culture = $request->getParameter('new_culture');
$this->getUser()->setCulture($new_culture);
$last_route = $request->getParameter('last_route');
$last_culture = $request->getParameter('last_culture');
$new_route = str_replace('sf_culture='.$last_culture, 'sf_culture='.$new_culture, $last_route);
# retour à la page quittée
$this->redirect($new_route);
}
Modifier TOUTES les routes existantes
- Toutes les routes du fichier /apps/frontend/config/routing.yml sont modifiées : On ajoute /:sf_culture en début.
Ex :
candidat_new:devient :
url: /candidat/new
param: { module: candidat, action: new }
candidat_new:
url: /:sf_culture/candidat/new
param: { module: candidat, action: new }
Placer les drapeaux en CSS
On a créé des drapeaux (avec Photoshop ou Fireworks) carrés de 21px (par exemple...).
Ces drapeaux sont dans le dossier /web/boutons.
On renseigne les classes que l'onb a nommé dans le Template dans la feuille CSS incluse dans le layout :
/*-- drapeaux --*/Nota : ces valeurs sont juste indicatives. On les modifie selon sa maquette.
form.container_drapeau { float:left;}
input.drapeau_fr, input.drapeau_en, input.drapeau_de
{ width:21px; height:21px; display:block; border:none; text-indent:-999px; font-size:0px;margin-right:10px;}
input.drapeau_fr { background: url(/boutons/drapeau_fr.gif) top left no-repeat; }
input.drapeau_en { background: url(/boutons/drapeau_en.gif) top left no-repeat; }
input.drapeau_fr:hover { background: url(/boutons/drapeau_fr_f2.gif) top left no-repeat; }
input.drapeau_en:hover { background: url(/boutons/drapeau_en_f2.gif) top left no-repeat; }
++++++++++
0 commentaires:
Enregistrer un commentaire