2017-08-01 1 views
0

J'essaie de créer mes propres modèles FormField et FieldHolder dans Silverstripe v3.6.Remplacer la hiérarchie du modèle de champ de formulaire personnalisé Silverstripe

J'ai créé un FieldList appelé $Fields puis je boucle sur ses champs pour définir le modèle personnalisé sur chaque:

foreach($Fields->dataFields() as $field) { 
     $type = $field->Type(); 
     // Field holder 
     if ($type == "checkbox") { 
      $field->setFieldHolderTemplate('CustomCheckboxField_holder'); 
     } else { 
      $field->setFieldHolderTemplate('CustomFormField_holder'); 
     } 
     // Field 
     if ($type == "dropdown") { 
      $field->setTemplate('CustomSelectField'); 
     } else if ($type == "optionset") { 
      $field->setTemplate('CustomRadioField'); 
     } else if ($type == "checkbox") { 
      $field->setTemplate('CustomCheckboxField'); 
     } else { 
      $field->addExtraClass('custom-form-control'); 
     } 
    } 

J'ai placé les modèles dans monsite/templates/includes, par exemple. CustomCheckboxField.ss laisse tomber les classes normales en faveur de custom-control-input:

<input $getAttributesHTML("class") class="custom-control-input<% if extraClass %> $extraClass<% end_if %>" /> 

Cela fonctionne, mais seulement si j'inclut la valeur par défaut des modèles FormField.ss et FormField_holder.ss dans le même dossier (copiés à partir cadre/templates/formes) . Pourquoi faut-il les inclure quand je les contourne? Pourquoi? Silverstripe ne devrait-il pas revenir aux originaux dans le dossier framework s'ils sont requis? Chacun des champs de mon formulaire personnalisé a un modèle personnalisé (sauf HeadingField s), ils ne devraient donc pas être nécessaires.

Je voudrais savoir si je le fais correctement. Je vous remercie!

+0

Vous pouvez activer des notes de commentaire du fichier source via la configuration sur 'SSViewer' pour voir quels modèles sont rendus et où. Vous avez raison de dire que les modèles que vous n'utilisez pas reviendront aux versions par défaut (framework). –

+0

Merci @RobbieAverill, je peux voir un champ caché et le bouton Soumettre dans mon formulaire s'appuyer sur les modèles de champs de cadre que j'ai copiés dans/mysite/templates/Includes, mais pas renommer/personnaliser ('FormField.ss',' FormField_holder.ss ',' HeaderField.ss'). Si je supprime ces trois modèles, tous les champs personnalisés se brisent. J'ai également oublié de mentionner ci-dessus que l'inclusion de modèles personnalisés dans ce dossier casse le CMS. Il semble que Silverstripe cherche tous les autres modèles de champs dans le même dossier et soit confus s'ils ne sont pas là. – SalutBarbu

Répondre

1

Il s'avère que mon problème était dû à une erreur dans la documentation de la v3.4 qui avait été détectée en cours de route. Le répertoire des modèles de champs de formulaire doit être mysite/templates/forms (NOT Includes).

La réponse a été trouvée ici: SilverStripe custom FormField_Holder