Announcement
- Index
- Thelia 2 - Section française
- Développement
- 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
Bonne journée,
Olivier
- Index
- Thelia 2 - Section française
- Développement
- Formulaires imbriqués