Bonjour,
voila, je cherche a mettre un formulaire genere par l'admin generator en ligne au lieu d'un tableau.
j'ai bien recuperer les partials _form_field & _form_fieldset mais je voie pas ce qu'il faut modifier.
Bonjour,
voila, je cherche a mettre un formulaire genere par l'admin generator en ligne au lieu d'un tableau.
j'ai bien recuperer les partials _form_field & _form_fieldset mais je voie pas ce qu'il faut modifier.
L'admin générator ce contente de récupérer le form, en général.
Je ne vois pas l'intérêt de perdre du temps à récupérer cela, tu aurais aussi vite fais de le développer directement toi même.
donc je peut créer de toute pièce un _form.php ?
Pourquoi pas effectivement sauf que je perd la possibilité de gérer celui ci via l'admin generator.
Je trouvai plus simple de juste modifier le templates d'affichage des champs tout en conservant les fonctionnalités du fichier generator.
me demande si j'ai été assez explicite.
En faites un formulaire généré automatiquement est de la forme:
bien sur ce n'est pas un table mais des div, mais c'est plus compréhensible pour la mise en page.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <form action....> <table> <tr> <td>label1</td><td>champ1</td> </tr> <tr> <td>label2</td><td>champ2</td> </tr> ..... </table> </form>
Ce que je voudrait c'est :
c'est pour pour pouvoir l'inclure via un embedForm à un autre formulaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <form> <tr> <td>champ1</td><td>champ2</td>.... </tr> </form>
j'ai bien tenté de faire:
_form.php
mais j'ai l'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <?php use_stylesheets_for_form($form) ?> <?php use_javascripts_for_form($form) ?> <div class="sf_admin_form"> <?php echo form_tag_for($form, '@asset') ?> <?php echo $form->renderHiddenFields(false) ?> <?php if ($form->hasGlobalErrors()): ?> <?php echo $form->renderGlobalErrors() ?> <?php endif; ?> <?php foreach ($configuration->getFormFields($form, $form->isNew() ? 'new' : 'edit') as $fieldset => $fields): ?> <?php $fields->render() ?> <?php endforeach; ?> <?php include_partial('asset/form_actions', array('asset' => $asset, 'form' => $form, 'configuration' => $configuration, 'helper' => $helper)) ?> </form> </div>
n'y a t il pas moyen au niveau des 2 partials de modifier juste un div pour obtenir ce que je désire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Fatal error: Call to undefined method sfOutputEscaperArrayDecorator::render()
Je ne pense pas que cela puisse être simplement géré dans le générateur d'admin, sans apporter de profonde modification au code généré, le rendant ainsi fixe et indépendant du générateur.
Il reste, peut-être, une possibilité. Le code généré par le générateur provient de deux sources, un template de ce qui doit être généré, mais qui n'inclu pas la présentation du form, donc non intéressant pour toi. Et, pour le form, un objet qui gère la présentation en sortie de form. Je n'ai jamais exploré la chose, ni tenté de le modifier. Ce qui ne veux pas dire que ce n'est pas réalisable... Même si j'ai du mal à voir comment lui dire quel champ doit se trouver sur quel ligne.
en faite je part de ce shéma:
j'ai créer deux module admin. et modifié le configure du module groupasset pour qu'il embarque l'asset:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 groupasset: actAs: [Timestampable] columns: name: string(255) site_id: integer user_id: integer status: string(2) person: string(2) lastview: date indexes: Unique1: fields: [name, site_id] type: unique relations: owner: class: sfGuardUser local: user_id foreign: id foreignAlias: groupassets onDelete: SET NULL site: class: Site local: site_id foreign: id onDelete: SET NULL Asset: tableName: asset actAs: [Timestampable] columns: typeasset_id: integer value: string(255) groupasset_id: integer useit: boolean exist: boolean lastview: date indexes: unique1: fields: [typeasset_id,value,groupasset_id] type: unique relations: type: class: Typeasset local: typeasset_id foreign: id foreignAlias: listTypeAsset onDelete: CASCADE group: class: groupasset local: groupasset_id foreign: id foreignAlias: listGroupAsset
sauf que les forms embarqués sont en colonne et non en ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public function configure() { unset($this['updated_at']); ..... $wrapperForm=new sfForm(); $listasset = $this->getObject()->getListGroupAsset(); $i=0; foreach($listasset as $asset) { $i++; $assetForm = new AssetForm($asset); unset($assetForm['groupasset_id']); $wrapperForm->embedForm($i,$assetForm); } $this->embedForm('listAsset',$wrapperForm); }
Je suis allé dans le cache du modul asset j'ai trouvé le partial _asset.php
ou j'ai supprimer le <div class="content">, ce qui m' a permis d'avoir mes champs en ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <?php if ($field->isPartial()): ?> <?php include_partial('groupasset/'.$name, array('form' => $form, 'attributes' => $attributes instanceof sfOutputEscaper ? $attributes->getRawValue() : $attributes)) ?> <?php elseif ($field->isComponent()): ?> <?php include_component('groupasset', $name, array('form' => $form, 'attributes' => $attributes instanceof sfOutputEscaper ? $attributes->getRawValue() : $attributes)) ?> <?php else: ?> <?php echo $form[$name]->renderError() ?> <div class="content"><?php echo $form[$name]->render($attributes instanceof sfOutputEscaper ? $attributes->getRawValue() : $attributes) ?></div> <?php if ($help): ?> <div class="help"><?php echo __($help, array(), 'messages') ?></div> <?php elseif ($help = $form[$name]->renderHelp()): ?> <div class="help"><?php echo $help ?></div> <?php endif; ?> <?php endif; ?>
Sauf que dans le formulaire Groupasset il ne prend pas en compte mon formulaire modifié pour embarque les "sous-formulaires".
J'ai tente de faire la même modif au niveau du module groupAsset mais sans succés![]()
je pense avoir trouver une solution:
c'est mon code pour mon fichier _form.php
le seul point qu'il faudrait améliorer serait la détection du début du tableau des embed form. La j'utilise directement le nom du formulaire, c'est pas top pour factoriser ce code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 <?php use_stylesheets_for_form($form) ?> <?php use_javascripts_for_form($form) ?> <div class="sf_admin_form"> <?php echo form_tag_for($form, '@groupasset') ?> <?php echo $form->renderHiddenFields(false) ?> <?php if ($form->hasGlobalErrors()): ?> <?php echo $form->renderGlobalErrors() ?> <?php endif; ?> <?php echo '<table>'; foreach($form as $key=>$widget) { if($key=='listAsset'){ echo '<table>'; foreach($widget as $subKey=>$subForm){ //echo '<tr><td>'.$subKey.'</td>'; if($subKey==1) { echo '<td> </td>'; foreach($subForm as $field) { if(!$field->isHidden()) echo '<td>'.$field->renderLabel().'</td>'; } echo '</tr>'; } foreach($subForm as $field){ echo '<td>'.$field->render().'<br>'.$field->renderError().'</td>'; } echo '</tr>'; } echo '</table>'; } elseif(!$widget->isHidden()) { echo $widget->renderRow(); } } echo '</table>'; ?> <?php include_partial('groupasset/form_actions', array('groupasset' => $groupasset, 'form' => $form, 'configuration' => $configuration, 'helper' => $helper)) ?> </form> </div>
C'est un peu compliqué à suivre ton histoire...
Il faudrait que je fasse un truc équivalent ou que je récupère ton appli, là, c'est difficile à suivre.
Je me demande juste s'il est judicieux de rester accroché sur un mod admin et s'il ne serait pas plus simple de ce baser sur un bête CRUD ?
bein je doit avouer que pour l'instant j'aime bien l'admin uniquement pour la page index qui propose une filtre/pagination dont je suis pas sur de pouvoir reproduire dans un CRUD![]()
Tu peux parfaitement reproduire le comportement d'un module admin dans un de tes module CRUD. J'ai posté des partials qui permettent de faciliter la chose dans le forum il y a quelques mois.
je vais fouiner
un peu hors sujet, mais a part pour cette idée de filtre en page index, a quoi sert le module admin.
Vue qu'il doit être rare de ne pas avoir à personnaliser un tant soit peu son module et donc d'être coincé par le fichier generator ?
Pour éditer des tables de paramètres, de villes, de titre...
Il convient parfaitement et permet d'aller très vite.
Il est possible aussi de n'utiliser que la partie liste et de renvoyer le reste sur une partie du module écrit en dur, mais on perd beaucoup d'intérêt et il peut-être aussi rapide de tous réécrire dans ces cas là.
Partager