Développer avec RBS Change : [Résolu] Création traduction produit

  • 70545.1

    12/11/2012 15:39


    rbs@ecocea.com
    Rang : Adepte
    Dans le cadre d'un import spécifique de données produits, nous devrions créer les entrées de libellé dans les différentes langues

    Voici le bout de code de test implémenté
    $traduc=$product->getProvider()->getI18nDocument($product, self::LANG_EN);
    $traduc->setLabel($line[self::LIBELLE_PRODUIT_DECLINE_EN]);
    $newlib=$product->getLabelForLang(self::LANG_EN);
    $product->save();
    


    $product étant un declinedProduct

    $newlib vaut bien la future valeur, mais l'object $traduc ne contient pas de méthode save, et celle de produt est sans effet sur ce champ.

    Comment persister cette modification ?
  • 70545.2 en réponse à 70545.1 écrit par rbs@ecocea.com

    12/11/2012 17:16


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Alors pour traduire un document, il n'est pas du tout recommandé de passer directement par ces méthodes du persistentprovider.

    À la place il faut passer par les méthodes beginI18nWork et endI18nWork du RequestContext.

    L'utilisation de beginI18nWork permet de changer globalement la langue de travail. À partir de là, tous les getters et setters appelés sur des documents travailleront sur la traduction dans cette langue du document. Une fois le traitement terminée, endI18nWork permet de revenir à la langue de travail précédente (derrière on gère une pile de langues, on peut donc imbriquer plusieurs niveaux si nécessaire).

    Exemple :
    $rqc = RequestContext::getInstance();
    try 
    {
    	$rqc->beginI18nWork($lang);	
    
    	// Insérer votre code ici.
    
    	$rqc->endI18nWork();
    }
    catch (Exception $rce)
    {
    	$rqc->endI18nWork($rce);	
    }
    Attention, il est important de placer le try/catch autour car si jamais une exception intervient dans votre code, il faut tout de même revenir à la langue de travail d'origine. Notons que endI18nWork "rethrow" l'exception qu'il reçoit en paramètre.


    Dernière remarque : dans le cas où vous modifiez plusieurs traductions d'un même document successivement, il est recommandé de faire un save pour chaque langue. En effet, lors d'un save, toutes les traductions modifiées sont bien enregistrées mais les pre et post save ne sont exécutés que pour la langue courante.
  • 70545.3 en réponse à 70545.2 écrit par Gaël Port

    12/11/2012 17:51


    rbs@ecocea.com
    Rang : Adepte
    Il fallait y penser, mais j'aime beaucoup la solution.
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1471 membres
Aucun membre connecté