THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 Formulaires imbriqués

(16-06-2015 10:59:46)


Bonjour,

J'essaie d'écrire un module de substitution de chaînes de caractères multilingue. L'idée est la suivante : traduire une chaînes de caractères donnée dans les n langues disponibles dans mon instance de Thelia. J'ai créé deux nouvelles tables : var_desc et var_desc_i18n. La première stock la chaîne à traduire, la seconde stock la traduction dans une langue donnée. var_desc et var_desc_i18n sont en relation oneToMany. Voici la partie intéressante de mon schema.xml :

    <table name="var_desc" namespace="KapsuleoVarDesc\Model">
        <column autoIncrement="true" name="id" primaryKey="true" required="true" type="INTEGER" />
        <column name="keyname" size="255" type="VARCHAR" />
    </table>
    <table name="var_desc_i18n" namespace="KapsuleoVarDesc\Model">
        <column autoIncrement="true" name="id" primaryKey="true" required="true" type="INTEGER" />
        <column name="var_desc_id" type="INTEGER" />
        <column name="lang_id" type="INTEGER" />
        <column name="str" size="255" type="VARCHAR" />
        <foreign-key foreignTable="lang" name="fk_lang_id">
            <reference foreign="id" local="lang_id" />
        </foreign-key>
        <foreign-key foreignTable="var_desc" name="fk_var_desc_id">
            <reference foreign="id" local="var_desc_id" />
        </foreign-key>
        <unique>
            <unique-column name="var_desc_id" />
            <unique-column name="lang_id" />
        </unique>
    </table>

Dans le Back Office, j'essaie de faire un formulaire afin de pouvoir gérer les traductions, et je bloque. J'arrive à afficher la liste des var_desc correctement grâce {form_collection form=$form collection="varDescs"} et {form_collection_field form=$form row=$row field="keyname"}. Par contre, je n'arrive pas à afficher un champ texte par traduction. Quelle est la syntaxe lorsque l'on souhaite imbriquer un tag {form_collection} à l'intérieur d'un autre ? A l'intérieure de la partie du formulaire qui concerne un row de la table var_desc, je souhaiterai afficher les var_desc_i18n correspondants.

Voici le morceau pertinent de mon template :

                {form name="vardesc_edit"}
                    <form method="POST" action="" {form_enctype form=$form} class="clearfix">

                        {form_hidden_fields form=$form}
                       
                        {form_collection form=$form collection="varDescs"}
                            {form_collection_field form=$form row=$row field="keyname"}
                                <input type="text" name="{$name}" id="{$label_attr.for}" value="{$value}" />
                            {/form_collection_field}
                            <!-- Je souhaiterai insérer n champs correspondant aux n traductions à cet endroit -->
                        {/form_collection}
                    </form>
                {/form}

... et mon formulaire :

class VarDescForm extends BaseForm {

    protected function buildForm()
    {
        $formBuilder = $this->formBuilder;
        $varDescs = VarDescQuery::create()->orderByKeyname()->find();

        $formBuilder->setData(array("varDescs" => $varDescs));

        $formBuilder->add("varDescs", "collection", array(
            "type" => "var_desc"
            ));
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'KapsuleoVarDesc\Model\VarDesc',
        ));
    }

    public function getName()
    {
        return "vardesc_edit";
    }
}


Merci pour votre aide. Si vous avez en tête un exemple de code qui pourrait ressembler à ce que je cherche, n'hésitez pas à m'en faire part. Toute piste est bienvenue smile

Bonne journée,


Olivier