Outils pour utilisateurs

Outils du site


informatique:php:symfony:gestion_de_la_langue_de_l_utilisateur

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
informatique:php:symfony:gestion_de_la_langue_de_l_utilisateur [09/02/2011 18:11] – [Le filtre AutoLanguageFilter] cyrilleinformatique:php:symfony:gestion_de_la_langue_de_l_utilisateur [19/05/2012 00:18] (Version actuelle) – modification externe 127.0.0.1
Ligne 63: Ligne 63:
 ===== Sélection de la langue par l'utilisateur ===== ===== Sélection de la langue par l'utilisateur =====
  
 +==== Création IHM de sélection ====
  
 +On va tout d'abord créer un composant pour gérer l'affichage (IHM) de la sélection de la langue par l'utilisateur. Ce composant hérite de sfComponent et utilise le form sfFormLanguage fourni par le plugin [[http://www.symfony-project.org/plugins/sfFormExtraPlugin|sfFormExtraPlugin]].
 +
 +<code php>
 +# apps/frontend/modules/default/actions/components.class.php
 +class defaultComponents extends sfComponents
 +{
 +  public function executeChangeLanguage(sfWebRequest $request)
 +  {
 +    $available_cultures = sfConfig::get('app_available_cultures');
 +    if( ! is_array($available_cultures) )
 +    {
 +      throw new sfConfigurationException(sprintf('%s requires a "available_cultures" configuration key.', get_class($this)));
 +    }
 +
 +    $this->form = new sfFormLanguage(
 +      $this->getUser(),
 +      array('languages' => $available_cultures )
 +    );
 +  }
 +}
 +</code>
 +
 +Le template associé à ce composant contient le Form nécessaire à sfFormLanguage:
 +<code php>
 +<!-- apps/frontend/modules/default/templates/_changeLanguage.php -->
 +<form action="<?php echo url_for('@change_language') ?>" method="post">
 +  <label for="language">Choose a language:</label>
 +  <?php echo $form['language'] ?>
 +  <?php echo $form->renderHiddenFields() ?>
 +  <input type="submit" value="ok">
 +</form>
 +</code>
 +
 +Ce code (defaultComponents->executeChangeLanguage()) réalise par mal de traitement, via sfFormLanguage qui retrouve toutes les langues dispo dans Symfony pour en extraire celles indiquées dans la configuration du site. On va donc éviter du travail au moteur Php en activant le cache pour ce composant, de cette façon il ne sera exécuté que la 1ère fois.
 +
 +  # apps/frontend/modules/default/config/cache.yml
 +  _changeLanguage:
 +    enabled: true
 +
 +==== Traitement de la sélection ====
 +
 +Création d'une route pour l'action @change_language:
 +
 +  # apps/frontend/config/routing.yml
 +  change_language:
 +    url:   /change_language
 +    param: { module: default, action: changeLanguage }
 +
 +Et le code de l'action:
 +<code php>
 +# apps/frontend/modules/default/actions/actions.class.php
 +class defaultActions extends sfActions
 +{
 +  ...
 +  public function executeChangeLanguage($request)
 +  {
 +    $available_cultures = sfConfig::get('app_available_cultures');
 +    if( ! is_array($available_cultures) )
 +    {
 +      throw new sfConfigurationException(sprintf('%s requires a "available_cultures" configuration key.', get_class($this)));
 +    }
 +
 +    $this->form = new sfFormLanguage(
 +      $this->getUser(),
 +      array('languages' => $available_cultures )
 +    );
 +
 +    if ($this->form->process($request))
 +    {
 +      // culture has been changed
 +    }
 +
 +    return $this->redirect('@homepage');
 +  }
 +}
 +</code>
 +
 +Et voilà, j'espère ne rien avoir oublié...
  
informatique/php/symfony/gestion_de_la_langue_de_l_utilisateur.1297271505.txt.gz · Dernière modification : 19/05/2012 00:15 (modification externe)

Sauf mention contraire, le contenu de ce wiki est placé sous les termes de la licence suivante : CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki