SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 235 visiteurs en ce moment

Accueil > Rédaction > Édition publique > Crayons > Crayons : Contrôleurs et Vues

Crayons : Contrôleurs et Vues

1er mai 2007 – par Fil, toggg – 21 commentaires

11 votes

Attention, cette page de documentation est incomplète... Vous devrez donc découvrir et expérimenter par vous-même. Des liens à la fin permettent d’accéder à d’autres documentations.
Soyez sympa, pensez à revenir compléter cette page ;-)

Les contrôleurs sont les fragments de formulaires chargés par Crayons pour éditer les contenus.
Les vues sont les fragments de HTML renvoyés par le serveur après modification.

Fragments HTML utilisés par Crayons

Dans son fonctionnement, crayons demande au serveur des fragments d’HTML pour changer dynamiquement l’affichage de morceaux de la page :
-  au clic sur le crayon, ou au double-clic sur le contenu, il requiert du serveur le formulaire qui permettra d’éditer l’élément. Ce formulaire comporte des contrôles techniques et inclut un fragment pour les données elles-même le contrôleur.
-  lorsque l’on soumet la modification, le serveur renvoie le fragment correspondant à l’affichage de l’élément. C’est la vue.

Par défaut, pour les champs « simples » (une colonne d’une table), le noyau de crayons les fabrique en interne. Il est aussi possible de fournir des contrôleurs et vues propres, notamment pour des champs multiples. C’est possible par html similaire aux modèles, par code php, ou combinaison des deux.

Il est important de noter que la vue n’est pas un extrait du squelette de départ [1], mais un morceau re-fabriqué en dehors de l’environnement complet de celui-ci et que donc, il peut exister des différences minimes dans certains cas relativement rares.

Fonctionnement par défaut

La classe #EDIT{machin} produit l’expression « crayon objet-machin-id ». Typiquement, comme dans la distribution de SPIP, objet est une table, machin une colonne et id le numéro d’enregistrement dans la table. Cette expression est à installer dans la class d’un élément qui entoure ce qu’on veut éditer.

Par défaut, crayons établit un champ simple pour ce machin, un <input> ou <textarea> selon sa nature. Bien sûr, toujours accompagné des boutons de validation.

Contrôleurs

Lorsque l’on clique sur le crayons ou que l’on double-clique l’élément, le javascript transmet dans son appel ajax à SPIP l’intégralité de la classe de l’élément.

Le contrôleur en déduit l’objet concerné, ses « objet », « machin » et « id ». Grâce à ces données, il peut calculer et envoyer le formulaire de modification de l’élément.

Crayons renvoie un formulaire soit défaut, soit customisé si il trouve, par exemple dans les squelettes ou chez un autre plugin, un fichier nommé controleurs/objet_machin.html ou plus généralement controleurs/machin.html (pour tous les objets si pas de objet-machin.html).

Vues

Lorsque l’on valide le formulaire, le serveur vérifie la véracité, l’intégralité, la non-concurrence (édition simultanée par plusieurs rédacteurs) et les droits sur les données transmises, et modifie en conséquence la base de données. Ensuite, il renvoie la vue du nouvel objet.

De même que pour le contrôleur, c’est une vue défaut avec un minimum de filtres selon le « machin », sauf si l’on trouve un vues/objet_machin.html ou plus généralement vues/machin.html.

Compléments de documentation et exemples

Trouvez et déposez des compléments de documentation sur les crayons et leurs contrôleurs et vues, et des exemples, sur le wiki

Notes

[1quoiqu’il soit possible de fabriquer le squelette de départ par include de la vue

Dernière modification de cette page le 11 février 2014

Retour en haut de la page

Vos commentaires

  • Le 29 juillet 2011 à 00:38, par severo En réponse à : Crayons : Contrôleurs et Vues

     :-(

    Les crayons ne prennent pas en compte les « surnoms » pour les nouveaux objets créés dans des plugins... Par exemple, j’utilise un objet appelé « entidad », soit au pluriel « entidades » (en espagnol). Le contrôleur et la vue doivent s’appeler :

    • controleurs/entidade.html
    • vues/entidade.html
      pour que ca marche, et dans ces fichiers, je dois mettre :
      1. <BOUCLE_a(ENTIDADES){id_entidad=#ENV{id_entidade}}{tous}>

      pour avoir un resultat dans ma boucle... C’est a dire que les crayons retirent simplement un « s » a la table pour récupérer le nom de l’objet.

    J’imagine qu’on pourrait faire le test avec « hibou/hiboux » et on obtiendrait le même résultat problématique...

    (j’utilise SPIP 3.0.0-alpha et Crayons 1.12.1)

    • Le 11 février 2014 à 12:18, par severo En réponse à : Crayons : Contrôleurs et Vues

      C’est décrit dans http://contrib.spip.net/Crayons-controleurs-et-vues-doc-complementaire :

      Nom servant d’index dans l’environnement reçu par un contrôleur

      Le contrôleur reçoit un environnement avec la valeur de l’index de l’enregistrement édité, affecté à un nom qui est bien l’index de la table si la table suit les conventions de nommage élémentaires de SPIP : c’est à dire lorsque le nom du champ index est de la forme ’id_table’ et la table s’appelle ’TABLE’ ou ’TABLES’.

      Si donc la table est « PLOUF’, l’index reçu a pour nom ’id_plouf’ même si le vrai champ index de la table PLOUF est »mon_idploc". Il faudra alors dans ce cas faire le lien dans la boucle avec :

    • Le 21 juin 2014 à 12:54, par mj En réponse à : Crayons : Contrôleurs et Vues

      bonjour

      impossible de faire fonctionner cet exemple en SPIP3

      les #ENV{name_xxx) ne sont pas passés dans le controleur

      J’ai essayé de les reconstituer en écrivant

      name="content_#ENV{key)_xxx"

      mais à ma grande surprise cela ne fonctionne pas non plus.... si quelqu’un a une piste merci !

    Répondre à ce message

  • Le 11 octobre 2011 à 21:49, par severo En réponse à : Crayons : Contrôleurs et Vues

    J’ai voulu utiliser les saisies pour un controleur perso. Dans mon cas : des radio-boutons.

    Le code :

    1. #CACHE{0}
    2. <ul>
    3. <li class="fieldset" style="#ENV{largeur}px;#ENV{style}">
    4. <ul>
    5. <li class="editer_monchamp">
    6. <input type="hidden" name="#ENV{name_monchamp}"/>
    7. [(#SAISIE{radio, #ENV{name_monchamp},
    8. label=<:monplugin:monchamp:>,
    9. valeur_forcee=#GET{monchamp},
    10. datas=#ARRAY{
    11. 0, <:monplugin:label_monchamp_false:>,
    12. 1, <:monplugin:label_monchamp_true:>}
    13. })]
    14. </li>
    15. </ul>
    16. </li>
    17. </ul>

    Télécharger

    A noter :

    • Sans inclure le champ caché : <input type="hidden" name="#ENV{name_monchamp}"/>, la saisie est vide. Il faut rajouter absolument cette ligne.
    • il a fallu aussi passer la valeur du champ, avec valeur_forcee, elle ne passe pas toute seule.

    Bon, a vérifier dans d’autres cas, mais il semblerait qu’il est necessaire de créer un champ caché pour utiliser les saisies dans les controleurs des crayons.

    Répondre à ce message

  • Le 1er décembre 2009 à 13:36, par jmica En réponse à : Crayons : Contrôleurs et Vues et champ menu-enum d’extras2

    Exemple d’utilisation avec champ extra.

    Cela doit être possible de le faire plus simplement au niveau de mon contrôleur car je n’utilise pas les valeurs stockées dans la table meta, et du coup je suis obligé de répéter au niveau de mon « select » toutes les « options », mais en tout cas cela fonctionne, si quelqu’un sait faire cela plus propre, je suis preneur :-)

    j’ai créer un champ extra (avec extras2) lié à un article, ce champ est en type : menu-enum, pour cet l’exemple je l’appelle « tests ». pour l’exemple je suis parti sur les mois de l’année mais cela aurait pu être, des fruits, des qualifications, ou tout autre choses ...

    Je crée donc dans mon répertoire squelette un répertoire « controleurs » et un répertoire « vues ».

    dans mon répertoire « controleurs » je crée un fichier « tests.html » avec ce code :

    [(#REM)

            Controleur pour le crayon 'tests', lié à un article

    ]
    #CACHE{0}

    <BOUCLE_a(ARTICLES){id_article}{statut==.}>
    #SET{tests,#tests}
    </BOUCLE_a>


    <BOUCLE_a(ARTICLES){id_article}{statut==.}>
    #SET{tests,#TESTS}
    </BOUCLE_a>


    <select class="crayon-active" name="#ENV{name_tests}" >
    <BOUCLE_r(ARTICLES){id_article} {tests}>
    <option value="1" [(#GET{tests}|=={1}|?{selected})]>Janvier</option>
    <option value="2" [(#GET{tests}|=={2}|?{selected})]>Février</option>
    <option value="3" [(#GET{tests}|=={3}|?{selected})]>Mars</option>
    <option value="4" [(#GET{tests}|=={4}|?{selected})]>Avril</option>
    <option value="5" [(#GET{tests}|=={5}|?{selected})]>Mai</option>
    <option value="6" [(#GET{tests}|=={6}|?{selected})]>Juin</option>
    <option value="7" [(#GET{tests}|=={7}|?{selected})]>Juillet</option>
    <option value="8" [(#GET{tests}|=={8}|?{selected})]>Août</option>
    <option value="9" [(#GET{tests}|=={9}|?{selected})]>Septembre</option>
    <option value="10" [(#GET{tests}|=={10}|?{selected})]>Octobre</option>
    <option value="11" [(#GET{tests}|=={11}|?{selected})]>Novembre</option>
    <option value="12" [(#GET{tests}|=={12}|?{selected})]>Décembre</option>
    </BOUCLE_r>
    </select>

    et dans mon répertoire « vues » je crée un fichier « tests.html » avec ce code :

    [(#REM)

            Vue pour le crayon "tests"
            Cf. controleurs/tests.html
    ]
    <BOUCLE_tests(ARTICLES) {id_article=#ENV*{id_article}} {#ENV*{tests}} {statut==.}>
    #LISTER_VALEURS{tests}
    </BOUCLE_tests>

    et dans mon squelette « article.html » j’utilise cette ligne :

    <div class="#EDIT{mois} mois">#LISTER_VALEURS{mois}</div>

    Si cela peut aider quelqu’un !!

    • Le 1er décembre 2009 à 13:42, par jmica En réponse à : Crayons : Contrôleurs et Vues et champ menu-enum d’extras2

      On ne se relit jamais assez :-(

      il y a une erreur sur le dernier code

      voici le bon :

      <div class="#EDIT{tests} tests">#LISTER_VALEURS{tests}</div>
    • Le 20 octobre 2010 à 19:40, par Sarah En réponse à : Crayons : Contrôleurs et Vues

      dans la boucle

      1. <BOUCLE_r(ARTICLES){id_article} {tests}>

      il faut mettre :

      1. <BOUCLE_r(ARTICLES){id_article} {par tests}>

      (Merci à Cyril Marion !)

    • Le 21 octobre 2010 à 15:41, par Sarah En réponse à : Crayons : Contrôleurs et Vues

      Chez moi, cela n’a marché qu’en mettant les valeurs partout.
      C’est à dire qu’à la place de :

      1. <option value="1" [(#GET{tests}|=={1}|?{selected})]>Janvier</option>

      J’ai mis :

      1. <option value="Janvier" [(#GET{tests}|=={Janvier}|?{selected})]>Janvier</option>

      Par contre, je suis obligée de recharger la page pour que la modification s’affiche.

    • Le 16 novembre 2010 à 00:44, par Thomas Weiss En réponse à : Crayons : Contrôleurs et Vues

      j’ai le même problème que toi. Je dois recharger la page. As-tu trouvé la solution ?
      Mais il est vrai que ce n’est pas très propre comme méthode, l’idéal serait de récupérer les données (stockées sous format JSON je crois) du champs extra !

    • Le 16 novembre 2010 à 03:57, par Thomas Weiss En réponse à : Crayons : Contrôleurs et Vues

      Le problème venait d’un critère d’une boucle AUTEURS dans le fichier vue... Une boucle sur un auteur qui n’a pas écrit d’article ne renvoie rien, il faut lui mettre le critère tout pour qu’elle renvoie qqchose.

    • Le 24 novembre 2010 à 19:15, par Sarah En réponse à : Crayons : Contrôleurs et Vues

      Hourra, j’ai enfin trouvé !

      Après avoir mis des

      1. {tout}

      dans toutes mes boucles auteurs, j’ai supprimé le

      1. {#ENV*{tests}}

      de l’exemple, et ça marche !

    Répondre à ce message

  • Le 20 avril 2009 à 19:48, par Cyril Marion En réponse à : Crayons : Contrôleurs et Vues

    moi aussi, « j’me réponds » ;-)

    pour que le select correspondant soit sélectionné à l’ouverture du crayon, il faut mettre dans la boucle qui « set » le « id » :
    #SET{id,#ID_TYPE_ACTION}

    et comme critère à la boucle :
    <BOUCLE_a(ACTIONS){id_action=#ID_ACTIONS}>

    Je pense que le #ID_xx doit prendre le nom de la table, et non le nom de la variable comme je faisais avant...

    Cyril

    Répondre à ce message

  • Le 20 avril 2009 à 19:24, par Cyril Marion En réponse à : Crayons : Contrôleurs et Vues

    Hello,

    Petit exemple de réalisation sur une table non-spip.

    Objectif : dans une page servant à la mise au point d’une table, dans une colonne affichant un INT, je voulais dérouler avec les crayons une liste de noms en clair plutôt que d’ouvrir un bête input et de saisir l’entier correspondant à la main. A la place d’un nombre donc je voulais une valeur « en texte clair ».

    Réalisation : je me suis inspiré du contrôleur « id_parent » livré dans le répertoire « controleurs » des crayons, du fait qu’il présnetait une liste.

    Code :

    Important : la valeur de l’attribut « name » du select doit être de la forme #ENVname_nom_du_champ

    Pour l’instant je n’ai pas encore réussi à faire fonctionner le « selected »... mais j’ai bon espoir !

    Bonne utilisation,
    Cyril

    PNG - 77.7 ko

    Répondre à ce message

  • Le 9 mai 2008 à 17:17, par Vincent Prono En réponse à : Crayons : Contrôleurs et Vues

    J’ai l’impression qu’il y a un problème avec la boucle SITES et les contrôleurs.

    Dés que j’utilise un contrôleur avec la boucle SITES, je me retrouve avec juste les 2 boutons (rien ne s’affiche).

    Exemple sur le #STATUT d’une boucle SITES :
    Nom de mon fichier : statutsite.html

    <BOUCLE_g(SITES){id_syndic}{statut==.}>

    #SET{id,#STATUT}
    <select class="crayon-active" name="#ENV{name_statut}" style="width:#ENV{largeur}px;" >
            <option value="publie"[(#GET{id}|=={publie}?{selected})]>publié</option>
            <option value="prop"[(#GET{id}|=={prop}?{selected})]>proposé</option>
            <option value="refuse"[(#GET{id}|=={refuse}?{selected})]>refusé</option>
    </select>

    </BOUCLE_g>

    Appel par :

     <div class="#EDIT{statutsite} mis_a_jour">#STATUT</div>

    Le même contrôleur adapté à la boucle SYNDIC_ARTICLES fonctionne parfaitement.
    Le problème se répète sur plusieurs contrôleurs (comme sur celui adapté de « syndic_article_hyperlien » par exemple).

    Si je n’utilise pas de contrôleur, aucun problème.
    J’ai une version à jour.

    Merci

    • Le 9 mai 2008 à 17:31, par Vincent Prono En réponse à : Crayons : Contrôleurs et Vues

      J’ai oublié de préciser que je suis en 1.9.2d

    • Le 11 mai 2008 à 06:33, par Vincent Prono En réponse à : Crayons : Contrôleurs et Vues

      En définitive, je me retrouve avec :

      L’obligation d’utiliser les contrôleurs et vues pour la boucle SYNDIC_ARTICLES

      L’obligation de ne pas utiliser les contrôleurs et vues pour la boucle SYNDIC

      Est-ce normal docteur ?

      Quelqu’un aurait-il déjà utiliser les crayons pour ces 2 boucles ?

    • Le 11 mai 2008 à 08:27, par Vincent Prono En réponse à : Crayons : Contrôleurs et Vues

      Je me réponds :

      Pour la boucle SITES, il faut mettre comme critère de sélection {id_syndic=#ENV{id_site}}
      Du coup, les contrôleurs fonctionnent

      Voir le contrôleur « hyperlien », présent dans ce plugin, pour plus d’information.

      PS : Promis, j’arrête de me servir de ce forum comme bloc note :)

    Répondre à ce message

  • Le 8 mai 2008 à 18:49, par Vincent Prono En réponse à : Crayons : Contrôleurs et Vues

    Une petite erreur dans le contrôleur statut :

    Un slash / en trop à la fin de la balise select.

    Maintenant la liste déroulante fonctionne mieux :)

    Répondre à ce message

  • Le 12 avril 2008 à 05:14, par mj En réponse à : Crayons : Contrôleurs et Vues

    Bonjour,
    je réalise mon premier controleur qui sert à modifier les mots-clefs d’un objet.

    Le formulaire dans controleurs/objet_machin.html est parfaitement chargé, le squelette s’éxécute, le formulaire est affiché avec les données de la base, magnifique.

    Mon problème est : comment renvoyer les données dans la base ? il semble que les zones du formulaire doivent s’appeler quelque chose comme #ENVname_machin ? Comment faire pour des données multiples (plusieurs mots-clefs pour 1 article ?)

    Merci des lumières (et je m’engage à compléter l’article dès que ca fonctionne, avec même lien url).

    Michel

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Champs Extras 3

    16 janvier 2012 – 524 commentaires

    Ce plugin permet de créer et/ou de gérer des champs supplémentaires dans les objets éditoriaux de SPIP. Il permet donc de prendre en compte et d’afficher de nouveaux éléments dans n’importe quel objet éditorial de SPIP. Screencast Vous n’aimez pas (...)

  • Réservation d’événements

    16 mars 2015 – 188 commentaires

    Ce plugin permet d’offrir aux visiteurs de s’inscrire pour un évènement du plugin Agenda et de gérer les réservations enregistrées. Installation Le plugin s’installe comme n’importe quel plugin. il nécessite : Agenda API de vérification (...)

  • Les crayons

    23 avril 2008 – 815 commentaires

    Ce plugin permet d’éditer les contenus sur les pages publiques du site, sans passer par l’espace privé de SPIP.

  • LESS pour SPIP : Less-CSS (anciennement LESSpip)

    5 novembre 2010 – 43 commentaires

    Less-CSS (Anciennement LESSpip) est un plugin intégrant facilement le logiciel LESS dans SPIP. LESS est une extension de CSS ajoutant les variables, les classes, les opérations, les imbrications au langage. Facilitant ainsi l’écriture de (...)

  • Recommander

    3 avril 2011 – 16 commentaires

    Ce plugin propose une manière simple de suggérer de recommander par email un article à un ami. Fonction « recommander un article à un ami ». On l’ajoute dans n’importe quel squelette sous la forme : #RECOMMANDERtitre de la page,url de la page,intro (...)

Ça spipe par là