Bonjour à tous,

Cela fait un moment que je n'ai pas sollicité votre aide.
J'essai de créer des pages sauce bootstrap, qui soient administrables via un backoffice.
J'ai regardé à peu près tous les tutos que j'ai trouvé sur le net, mais là je bloque.
Voici ce que je compte faire
Une page => plusieurs sections
Une section => plusieurs blocs

J'ai réussi à faire ces relations entre mes model et les HABTM. Ca ca fonctionne.
Ca me permet d'envoyer toutes ces infos dans mon $this->request->data de mon PageController pour l'édition dans mon admin_edit().

Voici le tableau que j'obtiens

array(
    'Page' => array(
        'id' => '2',
        'meta_key' => 'mes keywords',
        'meta_desc' => 'ma description',
        'name' => 'mon titre',
        'slug' => 'slug-qui-va-bien'
        'content' => 'Contenu généré dynamiquement, et qui va bientôt disparaitre !!!',
        'created' => '2014-10-31 18:03:26',
        'online' => '0',
        'user_id' => '2',
        'category_id' => '0',
        'draft' => '0'
    ),
    'sections' => array(
        (int) 0 => array(
            'Section' => array(
                'id' => '1',
                'name' => 'section n°1',
                'background' => 'gray1',
                'page_id' => '2'
            ),
            'Page' => array(
                'id' => '2'
            ),
            'Block' => array(
                (int) 0 => array(
                    'id' => '1',
                    'cols' => '9',
                    'offset' => '1',
                    'background' => '',
                    'content' => 'Mon contenu du bloc 1',
                    'section_id' => '1'
                ),
                (int) 1 => array(
                    'id' => '2',
                    'cols' => '2',
                    'offset' => '0',
                    'background' => '',
                    'content' => 'Mon contenu du bloc 2',
                    'section_id' => '1'
                )
            )
        ),
        (int) 1 => array(
            'Section' => array(
                'id' => '2',
                'name' => 'section N°2',
                'background' => '',
                'page_id' => '2'
            ),
            'Page' => array(
                'id' => '2'
            ),
            'Block' => array(
                (int) 0 => array(
                    'id' => '3',
                    'cols' => '2',
                    'offset' => '0',
                    'background' => '',
                    'content' => 'Mon autre contenu',
                    'section_id' => '2'
                )
            )
        )
    )
)

J'arrive à créer un formulaire d'administration et à récupérer tout ce qui se trouve dans l'index "Page" avec mes form helpers.
Par contre, je n'ai aucune idée de comment récupérer les infos liés aux models associés "Section" et "Bloc" dans ce même formulaire via mes Form Helpers !

Si l'un d'entre vous à déjà essayé de faire quelque chose comme ça, je suis à l'écoute !
Merci pour votre aide

Fabien

2 réponses


fabienc
Auteur
Réponse acceptée

Bonsoir,

Je n'avais pas vu que tu m'avais apporté une réponse. Merci !
Alors j'ai potassé tout ce que j'ai pu trouver et je suis parvenu à faire ce que je voulais.
En gros, je peux créer une page, qui par défaut crée une section, et un block associé à cette section.
Une page peut avoir plusieurs sections, ayant également un ou plusieurs blocks.
Tout fonctionne nikel, en ajout, suppression et modification ( je n'ai pas encore testé ma vue de front, mais ca devrait fonctionner sans soucis)
J'ai créé des fonctions ajax pour créer mes sections et mes blocks dynamiquement (lol ca marche aussi. Si j'édite ou crée un post, je peux ajouter autant de sections et blocks que je veux et sauvegarder sans aucun souci)

Voici un exemple de nouveaux tableaux que je génère (mieux qu'avant dis donc !)

array(
    'Page' => array(
        'id' => '4',
        'meta_key' => 'keywords1, etc',
        'meta_desc' => 'description qui va bien',
        'name' => 'mon titre de page',
        'slug' => 'mon-titre-de-page',
        'content' => '',
        'created' => '2014-11-16 22:47:24',
        'online' => '0',
        'user_id' => '2',
        'category_id' => '0',
        'draft' => '0',
        'acl' => '2'
    ),
    'Section' => array(
        (int) 0 => array(
            'id' => '5',
            'background' => '',
            'page_id' => '4',
            'sectionorder' => '0',
            'draft' => '0',
            'Block' => array(
                (int) 0 => array(
                    'id' => '6',
                    'cols' => '10',
                    'offset' => '0',
                    'background' => '',
                    'content' => '<p>Mon premier bloc de ma première section</p>
',
                    'section_id' => '5',
                    'blockorder' => '1',
                    'draft' => '0'
                ),
                (int) 1 => array(
                    'id' => '7',
                    'cols' => '2',
                    'offset' => '0',
                    'background' => '',
                    'content' => '<p>Mon deuxième bloc de ma première section</p>
',
                    'section_id' => '5',
                    'blockorder' => '0',
                    'draft' => '0'
                )
            )
        ),
        (int) 1 => array(
            'id' => '6',
            'background' => '',
            'page_id' => '4',
            'sectionorder' => '0',
            'draft' => '0',
            'Block' => array(
                (int) 0 => array(
                    'id' => '9',
                    'cols' => '12',
                    'offset' => '0',
                    'background' => '',
                    'content' => '<p>Contenu généré dynamiquement</p>
',
                    'section_id' => '6',
                    'blockorder' => '1',
                    'draft' => '0'
                )
            )
        )
    )
)

Cet aprem, je me suis lancé dans l'internationalisation de mon site.
Par contre là je suis bloqué et sévèrement.
Bon j'ai commencé le tuto sur Grafikart.
Les débuts étaient prometteurs, mais j'ai fait un rollback de tout ce que j'avais fait.

Voilà toute l'histoire:

  • J'ai utilisé la console pour créer ma table i18n correctement => ok ca fonctionne
  • J'ai réussi à créer mes fichier po edit =>ok
  • J'ai modifié mes vue pour intégrer mes langues => ok mais
    Lorsque je crée une nouvelle page et que je sauvegarde, j'ai gros souci. Un seul de mes blocs est traduit.
    Si je regarde la table i18n, je me rends compte que le foreignkey correspond à l'id de ma page. Donc, si tous les blocks ont le même foreignkey et le même model, du coup cela écrase mes données.
    Hors, sur ma page, des blocks, j'en ai des quintaux et qu'ils sont tous construits pareils. La seule chose qui les dissocie c'est leur propre id, et la section à laquelle ils appartiennent.
    Du coup, pour les traductions, je n'ai qu'un seul block de traduisible au lieu de 50 !

Ma question est simple ?
Je fais quoi !!! non je rigole !!!
Comment est-ce j'indique au behavior "Translate" que j'ai plusieurs blocs sur ma page afin de pouvoir tout traduire comme il faut ?

Si vous avez besoin de code, dites moi lesquels ?

Merci pour votre aide.

Bonsoir,

Une section peut appartenir a 2 pages différentes?!

Dans le cas contraire , tes liaisons sont 2 hasMany.. pas de HABTM