La Fabrique

La Fabrique est un outil pour créer des plugins, essentiel dans la phase de développement d’un site SPIP. La Fabrique est capable de générer le code source minimal d’un plugin pour SPIP 3 (elle accélère donc le démarrage d’un plugin) et peut s’occuper également de construire un plugin fonctionnel gérant un ou plusieurs objets éditoriaux et leurs liaisons (et là, elle devient formidable !). La base du plugin construit, il ne vous reste plus qu’à l’adapter à vos désirs les plus créatifs.

La Fabrique est un outil de construction de plugin spécialement orientée pour la gestion d’objets éditoriaux. Pour ceux qui ont connu le plugin « Chat » ou « Chat2 », sachez que la Fabrique sait gérer tout ce qui est présent dans ce tutoriel / plugin, et même au-delà, bien au-delà.

N’allez pas trop vite !

Cette note est aussi présente lors de l’installation du plugin, mais redisons le encore :

  • la Fabrique crée un code fonctionnel mais qui ne répondra peut être pas à 100% de vos attentes. La Fabrique ne peut pas tout faire. À vous d’adapter ensuite le code généré.
  • un plugin est très vite fait grâce à la Fabrique. Mais attention : le code n’est qu’une partie d’un plugin. Si vous voulez que votre plugin perdure dans le temps, il faut qu’il soit utile, partagé, documenté, traduit, il faut assister les utilisateurs, et maintenir son code avec les évolutions de SPIP et c’est tout cela aussi un plugin !
  • la Zone de SPIP permet de collaborer sur les plugins. Essayez au maximum de ne pas créer des plugins existant déjà, pour éviter des doublons qui peuvent disperser d’autant les énergies pour toutes les tâches citées au point précédent.

Pré-requis

Pour faire fonctionner la Fabrique il faut :

  • PHP >= 5.3 (il est possible que 5.2 fonctionne aussi)
  • SPIP 3.0-RC minimum
  • Un navigateur récent (testé avec FF11 et Chrome 18.0)
  • Saisies >= 0.25
  • Et peut être un système Unix/Linux pour son serveur (appel de exec('diff') en PHP) [1]

Optionnellement mais conseillé :

Démonstration vidéo

Dans la vidéo suivante, vous verrez une présentation de la Fabrique impliquant la construction d’un plugin « Félins » dans lequel nous créons 1 objet éditorial « Chats ».
Cette vidéo est aussi disponible en meilleure qualité sur medias.spip.net

Présentation de la Fabrique en vidéo

Accéder à la fabrique

Depuis SPIP 3.1, La fabrique est accessible dans le menu de développement (il faut activer l’option de vos préférences personnelles pour voir ce menu)

Documentation

En attendant une documentation plus riche ici, vous pouvez lire ces articles :

Capture d’écran

La Fabrique, version 1.13.3
Interface d’accueil de la Fabrique avec un objet éditorial « Chats » de renseigné dans un plugin nommé « Félins »

À tester

« La Fabrique » doit être testée dans différents environnements. Vous êtes donc invités à explorer cet outil développé avec git sur la Zone [2]

Limitation connue

Actuellement (version 1.16.3), à partir d’un certain nombre d’objets et de champs (environ 10 objets * 8 champs ici), le formulaire devient naturellement inopérant à cause d’une limitation voulue de PHP : max_input_vars, par défaut à 1000 dans php.ini.
Pour contourner, il faut modifier php.ini pour tolérer plus de champs (5000) par exemple.

Attention

Depuis la version 2.0.0, le menu de la fabrique se trouve dans celui de Développement. Celui-ci est activable depuis l’espace préférence de l’utilisateur.

Notes

[1À faire vérifier par quelqu’un ayant un serveur local sous Windows

Discussion

137 discussions

  • 9

    Bonjour,
    Sur un spip v4.2.8 php 8.1 fabrique 3.1.1
    j’ai une erreur php dans :
    nomplugin_options.php,
    nomplugin_fonctions.php

    Dans ces fichiers je ne trouve que :
    if (!defined('_ECRIRE_INC_VERSION')) {        return; }
    Il n’y a rien d’autre de défini dans ces fichiers.
    et bien sur « ça plante spip »
    que faudrait-il avoir en complément ?
    Merci bien Alain

    • Bonjour,
      Sur un spip v4.2.8 php 8.1
      En fait, dans lafabrique, une fois tout renseigné, j’ai une annonce d’erreur :
      Oups une erreur à empêché de soumettre ....
      Je ne trouve pas ce qu’il manque.
      Je joint le fichier de sauvegarde si ça peut aider
      Merci bien Alain

    • Bonjour,
      Je tourne en rond sans arriver à créer un plugin qui ’marche’.
      Sur un spip v4.2.8 php 8.1 fabrique 3.1.1
      La création d’un plugin se passe bien uniquement pour l’entête jusqu’à l’activation du plugin.
      Dés que je déclare un contenus, çà plante inexorablement spip.
      que faire pour trouver ou ça bloque ?
      Merci bien. je vous mets le fichier fabrique_voir.php pour vous fournir ma base de travail.
      Alain
      <?php /** *  Fichier généré par la Fabrique de plugin v7 *   le 2024-01-15 18:37:02 * *  Ce fichier de sauvegarde peut servir à recréer *  votre plugin avec le plugin «Fabrique» qui a servi à le créer. * *  Bien évidemment, les modifications apportées ultérieurement *  par vos soins dans le code de ce plugin généré *  NE SERONT PAS connues du plugin «Fabrique» et ne pourront pas *  être recréées par lui ! * *  La «Fabrique» ne pourra que régénerer le code de base du plugin *  avec les informations dont il dispose. * **/ if (!defined('_ECRIRE_INC_VERSION')) {         return; } $data = array (  'fabrique' =>  array (    'version' => 7,  ),  'paquet' =>  array (    'prefixe' => 'voir',    'nom' => 'pour voir',    'slogan' => 'rien a faire',    'description' => 'sans contenus pour tester simplement',    'logo' =>    array (      0 => '',    ),    'credits' =>    array (      'logo' =>      array (        'texte' => '',        'url' => '',      ),    ),    'version' => '1.0.0',    'auteur' => 'alain3',    'auteur_lien' => '',    'licence' => 'GNU/GPL',    'etat' => 'dev',    'compatibilite' => '[4.2.8;4.3.*]',    'documentation' => '',    'administrations' => '',    'schema' => '1.0.0',    'formulaire_config' => '',    'formulaire_config_titre' => '',    'fichiers' =>    array (      0 => 'autorisations',      1 => 'fonctions',      2 => 'options',      3 => 'pipelines',    ),    'inserer' =>    array (      'paquet' => '',      'administrations' =>      array (        'maj' => '',        'desinstallation' => '',        'fin' => '',      ),      'base' =>      array (        'tables' =>        array (          'fin' => '',        ),      ),    ),    'scripts' =>    array (      'pre_copie' => '',      'post_creation' => '',    ),    'exemples' => 'on',    'saisies_mode' => 'php',  ),  'objets' =>  array (    0 =>    array (      'nom' => 'vides',      'nom_singulier' => 'vide',      'genre' => 'masculin',      'logo' =>      array (        0 => '',        32 => '',        24 => '',        16 => '',        12 => '',      ),      'table' => 'spip_vide',      'cle_primaire' => 'id_vide',      'cle_primaire_sql' => 'bigint(21) NOT NULL',      'table_type' => 'vide',      'champs' =>      array (        0 =>        array (          'nom' => 'seul',          'champ' => 'seul',          'sql' => 'varchar(50) NOT NULL DEFAULT \'\'',          'caracteristiques' =>          array (            0 => 'editable',            1 => 'versionne',          ),          'recherche' => '1',          'saisie' => 'textarea',          'explication' => '',          'saisie_options' => 'conteneur_class=pleine_largeur, class=inserer_barre_edition, rows=4',        ),      ),      'champ_titre' => 'seul',      'champ_date' => 'date_publication',      'champ_date_ignore' => '',      'statut' => 'on',      'chaines' =>      array (        'titre_objets' => 'Vides',        'titre_page_objets' => 'Les vides',        'titre_objet' => 'Vide',        'info_aucun_objet' => 'Aucun vide',        'info_1_objet' => 'Un vide',        'info_nb_objets' => '@nb@ vides',        'icone_creer_objet' => 'Créer un vide',        'icone_modifier_objet' => 'Modifier ce vide',        'titre_logo_objet' => 'Logo de ce vide',        'titre_langue_objet' => 'Langue de ce vide',        'texte_definir_comme_traduction_objet' => 'Ce vide est une traduction du vide numéro :',        'titre_\\objets_lies_objet' => 'Liés à ce vide',        'titre_objets_rubrique' => 'Vides de la rubrique',        'info_objets_auteur' => 'Les vides de cet auteur',        'retirer_lien_objet' => 'Retirer ce vide',        'retirer_tous_liens_objets' => 'Retirer tous les vides',        'ajouter_lien_objet' => 'Ajouter ce vide',        'texte_ajouter_objet' => 'Ajouter un vide',        'texte_creer_associer_objet' => 'Créer et associer un vide',        'texte_changer_statut_objet' => 'Ce vide est :',        'supprimer_objet' => 'Supprimer cet vide',        'confirmer_supprimer_objet' => 'Confirmez-vous la suppression de cet vide ?',      ),      'liaison_directe' => '',      'table_liens' => '',      'afficher_liens' => '',      'roles' => '',      'auteurs_liens' => '',      'vue_auteurs_liens' => '',      'autorisations' =>      array (        'objets_voir' => '',        'objet_creer' => '',        'objet_voir' => '',        'objet_modifier' => '',        'objet_supprimer' => '',        'associerobjet' => '',      ),    ),  ),  'images' =>  array (    'paquet' =>    array (      'logo' =>      array (        0 =>        array (          'extension' => '',          'contenu' => '',        ),      ),    ),    'objets' =>    array (      0 =>      array (      ),    ),  ), );

    • Erreur innatendue dans un formulaire -> erreur PHP.

      Il faudrait activer via mes_options.php l’affichage des erreurs et/ou accéder aux logs PHP pour en savoir plus

    • Bonjour,
      Merci bien pour votre réponse.
      Le morceau de spip.log réalisé lors de la dernière tentative de création :
      2024-01-16 11:26:10 127.0.0.1 (pid 4434) :Pri:info: creation ../plugins/fabrique_auto/voir/prive/objets/liste/ 2024-01-16 11:26:10 127.0.0.1 (pid 4434) :Pri:info: include_spip balise/mid_objet.php non trouve 2024-01-16 11:26:10 127.0.0.1 (pid 4434) :Pri:info: include_spip balise/mid_.php non trouve 2024-01-16 11:26:10 127.0.0.1 (pid 4434) :Pri:info: include_spip balise/mtype.php non trouve
      Puis après avoir re tenté la création qui alors plante spip j’ai eu :
      2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:debug: Connexion MySQLi vers localhost, base spip, prefixe spip operationnelle 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:debug: POST ./?exec=fabrique - ../config/connect.php 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:debug: autoriser loger  0 (Alain) ? 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:debug: autoriser_loger_dist(loger, , 0, Alain) : OK 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:debug: autoriser ecrire   (Alain) ? 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:debug: autoriser_ecrire_dist(ecrire, , , Alain) : OK 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: include_spip formulaires/fabriquer_plugin/verifier.php non trouve 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: include_spip formulaires/fabriquer_plugin/verifier_post_saisies.php non trouve 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: ajoute session ../tmp/sessions/1_c084aadfaab7a11afad7707ee56db644.php cookie 86400 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:debug: autoriser ecrire   (Alain) ? 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:debug: autoriser_ecrire_dist(ecrire, , , Alain) : OK 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: creation ../plugins/fabrique_auto/voir/ 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (1.123 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/fabrique_prefixe.php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:20), data=array:4(fabrique=array:1, paquet=array:21, objets=array:1, …), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (4749 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: table_objet(vide) calculee sans verification 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (1.461 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/paquet.xml] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (1789 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: creation ../plugins/fabrique_auto/voir/lang/ 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (0.212 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/lang/paquet-prefixe_fr.php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (319 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (0.373 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/lang/prefixe_fr.php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (224 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (0.408 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/entetes/php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1, description='Fichier gérant l'installatio…', package=Installation (264 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (2.488 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/prefixe_administrations.php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (2808 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (0.323 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/entetes/php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1, description='Définit les autorisations du…', package=Autorisations (241 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (1.624 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/prefixe_autorisations.php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (3531 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (0.321 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/entetes/php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1, description='Fonctions utiles au plugin po…', package=Fonctions (227 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (1.042 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/prefixe_fonctions.php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (459 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (0.320 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/entetes/php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1, description='Options au chargement du plug…', package=Options (230 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (1.018 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/prefixe_options.php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (461 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (0.324 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/entetes/php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1, description='Utilisations de pipelines par…', package=Pipelines (230 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (1.521 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/prefixe_pipelines.php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (767 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: creation ../plugins/fabrique_auto/voir/base/ 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (0.398 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/entetes/php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1, description='Déclarations relatives à la…', package=Pipelines (237 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (2.228 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/base/prefixe.php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (2231 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (1.069 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/lang/objet_fr.php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), objet=array:29(nom=vides, nom_singulier=vide, genre=masculin, …), id_objet=id_vide, type=vide, table=spip_vides, mobjet=VIDES, lobjet=vides, mtype=VIDE, mid_objet=ID_VIDE, lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (1284 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: creation ../plugins/fabrique_auto/voir/formulaires/ 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (0.316 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/formulaires/editer_objet.html] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), objet=array:29(nom=vides, nom_singulier=vide, genre=masculin, …), id_objet=id_vide, type=vide, table=spip_vides, mobjet=VIDES, lobjet=vides, mtype=VIDE, mid_objet=ID_VIDE, lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (732 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (0.352 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/entetes/php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), objet=array:29(nom=vides, nom_singulier=vide, genre=masculin, …), id_objet=id_vide, type=vide, table=spip_vides, mobjet=VIDES, lobjet=vides, mtype=VIDE, mid_objet=ID_VIDE, lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1, description='Gestion du formulaire de d'é…', package=Formulaires (236 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (3.315 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/formulaires/editer_objet.php] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), objet=array:29(nom=vides, nom_singulier=vide, genre=masculin, …), id_objet=id_vide, type=vide, table=spip_vides, mobjet=VIDES, lobjet=vides, mtype=VIDE, mid_objet=ID_VIDE, lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (5389 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: creation ../plugins/fabrique_auto/voir/prive/ 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: creation ../plugins/fabrique_auto/voir/prive/objets/ 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: creation ../plugins/fabrique_auto/voir/prive/objets/contenu/ 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (0.589 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/prive/objets/contenu/objet.html] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), objet=array:29(nom=vides, nom_singulier=vide, genre=masculin, …), id_objet=id_vide, type=vide, table=spip_vides, mobjet=VIDES, lobjet=vides, mtype=VIDE, mid_objet=ID_VIDE, lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (245 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: creation ../plugins/fabrique_auto/voir/prive/objets/liste/ 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: calcul (0.692 ms) [../plugins/auto/fabrique/v3.1.1/fabrique/prive/objets/liste/objets.html] fabrique=array:1(version=7), paquet=array:21(prefixe=voir, nom='pour voir', slogan='rien a faire', …), objets=array:1(0=array:29), prefixe=voir, mprefixe=VOIR, exemples=on, les_id_objets=array:1(0=id_vide), les_types=array:1(0=vide), les_objets=array:1(0=vides), les_tables=array:1(0=spip_vides), les_tables_objets=array:1(0=spip_vides), objet=array:29(nom=vides, nom_singulier=vide, genre=masculin, …), id_objet=id_vide, type=vide, table=spip_vides, mobjet=VIDES, lobjet=vides, mtype=VIDE, mid_objet=ID_VIDE, lang=fr, date='2024-01-16 11:34:19', date_default=1, date_redac='2024-01-16 11:34:19', date_redac_default=1 (1847 octets) 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: creation ../plugins/fabrique_auto/voir/prive/themes/ 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: creation ../plugins/fabrique_auto/voir/prive/themes/spip/ 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: creation ../plugins/fabrique_auto/voir/prive/themes/spip/images/ 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: include_spip inc/filtres_images.php non trouve 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:info: ajoute session ../tmp/sessions/1_c084aadfaab7a11afad7707ee56db644.php cookie 86400 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:debug: autoriser ecrire   (Alain) ? 2024-01-16 11:34:19 127.0.0.1 (pid 715) :Pri:debug: autoriser_ecrire_dist(ecrire, , , Alain) : OK
      Vola l’ensemble des logs.
      Le premier messages peut être enlevé car il est sans intérêt.
      Alain

    • Je parlais bien des logs PHP au niveau du serveur / hébergeur, pas des logos SPIP qui sont dans tmp/logs (et que tu m’a copié).

    • Bonjour ,
      Grande patience !!
      je pense que cela devrait te donner des infos plus pertinentes ?
      Obtenus après l’annonce du problème et ce qui plante spip.
      Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /var/www/html/spip/plugins/auto/fabrique/v3.1.1/formulaires/fabriquer_plugin.php on line 739 Fatal error: Uncaught ValueError: Path cannot be empty in /var/www/html/spip/ecrire/inc/flock.php:113 Stack trace: #0 /var/www/html/spip/ecrire/inc/flock.php(113): file_get_contents() #1 /var/www/html/spip/plugins/auto/fabrique/v3.1.1/formulaires/fabriquer_plugin.php(741): spip_file_get_contents() #2 /var/www/html/spip/plugins/auto/fabrique/v3.1.1/formulaires/fabriquer_plugin.php(631): fabriquer_miniature_png() #3 /var/www/html/spip/plugins/auto/fabrique/v3.1.1/formulaires/fabriquer_plugin.php(490): fabriquer_miniatures() #4 /var/www/html/spip/ecrire/public/aiguiller.php(288): formulaires_fabriquer_plugin_traiter_dist() #5 /var/www/html/spip/ecrire/index.php(70): traiter_formulaires_dynamiques() #6 {main} thrown in /var/www/html/spip/ecrire/inc/flock.php on line 113
      A suivre
      Alain

    • Effectivement on a une fatal erreurs, sur la recherche d’un fichier.

      C’est à quel moment que ton formulaire plante ? c’est lequel d’ailleurs.

      Je me demande s’il s’attend pas à trouver un logo/picto et que tu lui fourni pas -> ca plante (ce serrait un bug, mais ca me parait la meilleur piste pour l’instant...)

    • Bonsoir,
      Je viens de tester avec un fichier image. Effectivement ça va jusqu’au bout mais la table spip_vides n’est pas initialisée dans la base de données.
      le plugin a comme préfixe : voir
      les erreurs spip au lancement de la création d’un enregistrement :
      dans Message Erreur SQL 1146 Table 'spip.spip_vides' doesn't exist SELECT * FROM spip_vides WHERE id_vide=0 dans le squelette /var/www/html/spip/ecrire/inc/editer.php Dans la boucle : formulaires_editer_objet_charger(){ sql_fetsel(); }        ligne : 242

      J’ai cette même défaillance avec le plugin brèves qui ne crée pas la table.
      Donc à suivre
      Merci bien Alain

    • Bonjour,
      Grace aux réponses que j’ai exploitées, je peux dire que « çà marche ».
      J’en tire la leçon suivante par ordre de priorités :
      1er mettre des logos
      2e avoir la base mariadb avec le Type InnoDB et interclassement utf8mb4_general_ci
      3e créer le plugin nouveau et l’activer
      4e entrer une première donnée qui fait planter car il est possible que la table ne soit pas « présentée ».
      5e utiliser la fonction de réparation de la base et alors tout rentre dans l’ordre la table est visible et active pour recevoir les futures données.
      Merci aux patients débroussailleurs.
      Alain

    Répondre à ce message

  • il est possible d’installer le plugin sous spip 4 depuis la branche master (téléchargeable depuis le git puis installation manuelle). Pour rendre le plugin actif, il suffit d’installer d’abord le plugin jQuery ui manuellement.

    Répondre à ce message

  • 2

    Bonjour
    y a t’il moyen d’ajouter aux statistiques de Spip 4 un objet créé avec La Fabrique ?

    merci
    Natacha

    Répondre à ce message

  • Bonjour

    comment afficher un champs en fonction de la valeur de radio, case à cocher ou de sélecteur ?
    après un radio oui non Un nom de champ pour SQL « possible_section »

    data=[(#ARRAY{oui,oui,non,non})]

    dans le champ suivant j’ai mis

    @possible_section@ == "oui"

    ou
    mais il s’affiche quand même

    merci pour votre aide
    Natacha

    Répondre à ce message

  • Bonjour et merci pour ce plugin très utile pour créer des outils rédactionnels supplémentaire... Est-ce que ce plugin sera porté sur la version 4.0 de Spip et y aura-t-il des modifications à apporter sur nos add-ons faits maison ?

    Merci

    Répondre à ce message

  • 1

    Bonjour,
    j’essaye de faire un pluging avec la fabrique. Dans l’ensemble cela fonctionne bien. Il me reste un point que je n’arrive pas à comprendre :

    J’ai un objet X qui dépend en liaison directe d’un objet Y et qui peut être rattaché à des rubriques et des articles.
    Je vois bien la liste des objets X de l’objet Y.
    Je vois bien la liste des objets X.
    par contre si je rattache un objet x par exemple a 2 rubriques, j’ai dans la page de l’objet
    Liés à cet objet X et la liste de toutes les rubriques.
    J’ai vue que cela venait de l’element généré

    avec #GETliste=rubrique qui va chercher le code dans prive/objets/liste/rubriques de la dist 3.2
    Je n’arrive pas à résoudre ce pb même en mettant id_Y_X=#ID_OBJET
    savez vous comment résoudre ce pb

    • Salut,

      J’espère qu’en un an, tu as pu trouver solution à ton problème mais comme j’ai galéré pas mal avec cette même difficulté, je précise ici ce que j’ai fais pour résoudre ce problème pour les futurs galériennes :

      Dans mon cas, les objets liés sont surtout des articles, j’ai donc recopié le fichier racine-du-site/prive/objets/liste/articles.html dans plugins/xyz/prive/objets/liste et j’ai ajouté à la boucle liste_art de ce fichier le critère spip_xyz_liens.id_xyz ?

      La documentation du plugin mériterait d’être clarifiée à ce niveau (avec cet exemple ?), j’ai trouvé d’autres personnes qui ne l’ont pas comprises sur ce point.

    Répondre à ce message

  • 1

    bonjour,
    juste pour info pour les néophytes , je teste le mode de saisie php avec avec fabrique-issue_8 ,
    dans « options de saisie » il y a comme exemple :
    Exemple pour selection / checkbox / radio :
    datas=[(#ARRAY{cle1,valeur1,cle2,valeur2})]
    ce qui correspond au mode html
    ... peut être faudrait il indiquer la syntaxe aussi en mode php car dans ce cas cela génére

    array(
    			'saisie' => 'radio',
    			'options' => array(
    				'nom' => 'menu_selections',
    				
    				'label' => _T('page:champ_menu_selections_label'),
    				 'explication' => _T('page:champ_menu_selections_explication'),
    				'datas' => '[(#ARRAY{oui',
    				'oui' => '',
    				'non' => '',
    				'non})]' => '',
    				
    			),
    		),

    qui bien sur ne fonctionne pas.

    Répondre à ce message

  • 3

    bonjour,
    Sauriez vous t ce qui peut empêcher la création des tables alors que la création du plugin s’est bien déroulé , le plugin activé, le cache vidé ?
    les tables ont un format standard nom : spip_ensembles

    SPIP 3.3.0-dev [24578]
    merci

    • Le [24578] m’inquiète : c’est une version SVN et on n’utilise plus ça. Soit il reste un fichier .svn_revision à la racine de ton SPIP. Soit y a un autre soucis.

      Ensuite, il faut regarder tmp/log/mysql ou sqlite pour savoir quelle est l’erreur de création de la table. Ça peut être du à une mauvaise syntaxe de déclaration.

    • cela venait de la présence d’une cote de de trop dans text NOT NULL DEFAULT «  »«  » difficile à voir qui ne génère pas d’erreur. La cote enlevée cela fonctionne.
      C’est bon par contre a l’affichage de la partie ’Autorisations’ de l’objet le plugin affiche deux fois xxx_voir par défaut : toujours .

    • autan pour moi ... ne cherche pas c’est objets _voir et objet_voir ....

    Répondre à ce message

  • Bonjour,

    Je suis en train d’utiliser ce super plugin pour créer un objet éditorial et je rencontre deux problèmes.

    Lors d’un test (le dernier) le plugin a fait planter le spip (en local, bien sûr) avec une page blanche. Impossible donc de désinstaller le plugin depuis la page d’admin. J’ai donc supprimer le dossier du plugin et ça refonctionne. Problème : plusieurs messages d’erreurs s’affichent alors.
    -  Le premier (sur la page d’admin des plugins) m’indiquant

    "Actions non réalisées

    Le plugin « XXX » (version : 1.0.0) va être installé

    Certaines actions n’ont pas été réalisées. Cela peut provenir d’une erreur lors des actions à réaliser, ou d’un affichage de cette page alors que des actions sont encore en cours. Les actions avaient été lancées par test le 28 août 2020 à 13h54min."

    -  Le second, sur toutes les pages d’admin, m’indiquant que les deux tables que devait créer le plugin n’existent pas (Erreur SQL 1146 par le squelette /spip/ecrire/genie/maintenance.php)

    La question est la suivante : comment désinstaller proprement un plugin manuellement. Quels sont les fichiers de conf à supp ? Un script a lancer ?

    J’ai testé ceci https://gist.github.com/Cerdic/5848603#file-site-desactive-plugin-php mais sans succès (les chemins et fichiers ne correspondent pas).

    Je peux repartir d’un spip tout frais mais il y avoir mieux, surtout si ça arrive lors du déploiement sur le site en ligne ! :s Si quelqu’un saurait comment procéder ?

    Autre soucis, déjà évoqué plus bas, sûrement accessoire mais peut-être pas étranger au crash du plugin : les boutons « pré-remplir cet objet » et « supprimer cet objet éditorial » ne sont pas fonctionnels.
    Je suis sous spip SPIP 3.2.7 [24473] avec la Fabrique 2.3.15

    Répondre à ce message

  • Erreur inopinée !

    Si, comme moi, vous avez chargé une version récente de Fabrique et qu’au moment de sauvegarder votre plugin, vous vous prenez une « Erreur inopinée » ?
    Je vous suggère de vérifier la version de PHP que votre serveur utilise...
    -  en PHP 5.6 j’avais l’erreur (sans en comprendre la cause)
    -  en passant sous PHP 7.2... actualiser la page restée ouverte a suffit !

    P.S. : normal que cet outil de développeur utilise les dernières possibilités du langage ! ;-)

    Répondre à ce message

  • Bonjour,
    si c’est pas encore fait, je confirme que dans un environnement windows 7 pro 64bits, avec wampserver 3.1.9 (apache 2.4.33, php 5.6.35 à 7.2.4, MySQL 5.7.21, spip 3.2.5) la fabrique (2.3.15) bloque sur la génération des fichiers avec les messages suivant
    -  si le dossier /plugins/fabrique_auto/ est présent : La sauvegarde de ../plugins/fabrique_auto/alloc n’a pu être réalisée. Le plugin par précaution n’a pas été régénéré. La cause probable provient de droits insufisants ce répertoire source pour le serveur. (avec une faute « insuffisants » dans la chaîne de langue)
    -  si le dossier est absent : vérifier les droits d’écriture
    Le système a rencontré une erreur lors de l’écriture du fichier tmp/cache/fabrique/alloc /.plat. Veuillez, en tant qu’administrateur du site, vérifier les droits d’écriture sur le répertoire ecrire/tmp/cache/fabrique/alloc .
    La même chose dans un environnement Unix/Linux y a pas de soucis (sauf la faute d’orthographe ;)
    cordialement

    Répondre à ce message

  • Callaghan

    Salut,

    Une petite anomalie sous spip 3.2 Factory (2.3.15)
    Je crée un objet blob simple sans liaison directe, mais avec une liaison indirecte
    sur des articles

    Lors de l’édition du premier objet, nous avons une erreur de compilation :
    Argument manquant dans la balise INFO_
    ../plugins/fabrique_auto/blobings/prive/squelettes/contenu/blob_edit.html

    01 [(#ID_BLOB|oui)
    
    02     [(#AUTORISER{modifier,blob,#ID_BLOB}|sinon_interdire_acces)]
    03     [(#SET{id_parent,#INFO_{blob,#ID_BLOB}})]
    04 ]

    Mauvaise utilisation ?

    Merci

    Répondre à ce message

  • 1

    Bonjour,
    je n’arrive pas à effectuer ce correctif :

    Vous pouvez sur la vue de votre objet, lister les objets (sélectionnés au dessus) qui lui sont liés. Note : il est possible que ces listes ne fonctionnent pas parfaitement, affichant l’ensemble des objets, au lieu de seulement ceux liés au votre ; il faudra alors surcharger le fichier de liste utilisé (prive/objets/liste/xxx.html) pour ajouter un critère {xxx_liens.id_xxx ?} supplémentaire.

    Pourriez-vous donner un exemple ou « xxx » en effet les fichiers sont au pluriel et le id_ au singulier...
    Voici mon code après modification la table s’appelle bien « spip_etapes_liens » avec « id_etape » :

    <BOUCLE_liste_etapes(ETAPES){id_rubrique?}{id_secteur?}{tours_liens.id_tour?}{journees_liens.id_journee?}{id_mot?}{id_auteur?}{where?}{statut?}{recherche?}{tri #ENV{par,num titre},#GET{defaut_tri}}{par titre}{pagination #ENV{nb,10}}{etapes_liens.id_etape ?}>

    Ce code provoque une erreur « Critère inconnu etapes_liens.id_etape »
    je ne comprends pas d’où vient cette erreur...
    NB : retirer l’espace devant le «  ? » ne change rien.

    • Voici un exemple ou j’avais fait cette modification et qui marche :
      ajout de rivieres_liens.id_riviere ? sinon
      a l’affichage d’une riviere on a tous les articles et non seulement les articles qui lui sont associes .

      \prive\objets\liste\articles.html

       
      	<BOUCLE_liste_art(ARTICLES){id_article?}{id_rubrique?}{id_mot?}{id_auteur?}{rivieres_liens.id_riviere?}{where?}{statut?}{recherche?}{tri #ENV{par,date}|defaut_tri_par{#GET{defaut_tri}},#GET{defaut_tri},session_liste_art}{par titre}{pagination #ENV{nb,10}}{!lang_select}>

      => et alors seuls les articles (et non tous) auxquels une riviere est associee, sont listes quand on affiche cette riviere

    Répondre à ce message

  • 7

    Merci pour cet outil vraiment pratique ! J’ai créé un nouvel objet éditorial (que j’appelle « fiches »), tout fonctionne sauf les inclusions de doc.
    Je copie/colle une inclusion de doc dans un texte (exemple : doc18, entre balises ouvrante et fermante). Dans l’espace privé, ma fiche s’affiche bien avec sa jolie image.
    Dans l’espace public, impossible par contre d’afficher cette fiche avec son image. Cela m’affiche l’inclusion « doc18 » en toute lettre.... Pourtant, je code exactement pareil que pour un objet « article » standard (sauf le nom des balises qui changent...).
    Ya un truc que j’ai pas dû suivre... Vous avez une idée ?

    • Il n’y a rien de spécial à faire. Je suppose que le nom du champ (la colonne SQL) n’est pas commune pour SPIP (pas ’texte’ ou ’descriptif’ par exemple). Dans ce cas, il faut soit utiliser [(#TRUC|propre)] pour appliquer les traitements typos au cas par cas dans les squelettes, soit déclarer un traitement typo automatiquement sur cette balise, ce qui se fait dans le pipeline ’declarer_interfaces’, avec par exemple : 

      $interface['table_des_traitements']['SLOGAN']['fiches'] = _TRAITEMENT_RACCOURCIS;

      où ’SLOGAN’ est le nom du champ, et ’fiches’ le nom de la table (sans spip_).

    • Merci beaucoup Matthieu !
      Effectivement |propre fonctionne bien. Je vais de suite me renseigner par quelle magie ce filtre opère !

    • Bonjour,
      vous écrivez :
      « , soit déclarer un traitement typo automatiquement sur cette balise, ce qui se fait dans le pipeline ’declarer_interfaces’, avec par exemple :

      $interface[’table_des_traitements’][’SLOGAN’][’fiches’] = _TRAITEMENT_RACCOURCIS ;
      où ’SLOGAN’ est le nom du champ, et ’fiches’ le nom de la table (sans spip_). »

      Où se trouve ce pipeline ’declarer_interfaces’ ?
      Cordialement

    • Il est créé et utilisé normalement tout seul par le plugin Fabrique et est présent dans base/objet.php par exemple là : https://gitlab.com/magraine/vortaro/blob/master/base/vortaro.php#L15 ; et c’est effectivement declarer_tables_interfaces, pas declarer_interfaces.

    • Merci de votre réponse.
      Suite à vos commentaires j’ai modifié mon fichier « bases/tours.php » comme suit

      function tours_declarer_tables_interfaces($interfaces) {
      
      	$interfaces['table_des_tables']['tours'] = 'tours';
      	$interfaces['table_des_tables']['journees'] = 'journees';
      	$interfaces['table_des_tables']['etapes'] = 'etapes';
      //modifications
      	$interface['table_des_traitements']['PTIDEJ']['journees'] = _TRAITEMENT_RACCOURCIS ;
      	$interface['table_des_traitements']['DEJEUNER']['journees'] = _TRAITEMENT_RACCOURCIS ;
      	$interface['table_des_traitements']['DINER']['journees'] = _TRAITEMENT_RACCOURCIS ;
      // /modifications
      	return $interfaces;
      }

      Je n’ai aucun effet...

      Cordialement

    • C’est pourtant il me semble la bonne écriture.
      (je me suis permis d’éditer ton commentaire pour colorer le code)

      Ah… je vois le problème : dans ton code, il faut utiliser $interfaces au pluriel ; c’est le nom de la variable qui arrive et repart du pipelines. Tu as modifié $interface sans s.

      Une fois ce genre de modifications faite, il faut ensuite soit repasser par la page de gestion des plugins (ecrire/ ?exec=admin_plugin) soit lancer un ?var_mode=recalcul sur une page. Mais je suppose que c’est ce qui avait été fait ; le seul problème venant de ce petit s

    • Bonjour,
      merci pour ta réponse.
      Effectivement comme cela c’est bon. J’aurais du y penser et non me contenter de recopier le le code.

    Répondre à ce message

  • 1

    Bonjour,
    près plusieurs tentatives d’installations, de réinitialisation...
    J’arrive à créer le plugin, mais lorsque que j’ai créé un objet éditorial, je n’arrive pas utiliser la commande : Pré-remplir cet objet.
    Je suis en PHP 7.2, SPIP 3.2.4
    Merci de me donner une piste pour trouver une solution...

    • l
      La console d’inspection affiche ce message :
      An invalid form control with name=’objets[0][nom]’ is not focusable.
      An invalid form control with name=’objets[0][table]’ is not focusable.

    Répondre à ce message

  • 2
    bourdeau alain

    Bonjour,
    sous ubuntu 18.04 et spip
    SPIP 3.2.1 [24285] plugin la fabrique 2.3.13
    + écran de sécurité 1.3.11 (la mise à jour vers 3.2.4 se déroule, mais l’info de version ne change pas).
    je peux créer un début de pluning, mais désque je cherche à intégrer un objet éditorial, j’ai systématiquement :

    Oups. Une erreur inattendue a empêché de soumettre le formulaire. Vous pouvez essayer à nouveau.

    et ça ’plante’ !
    je suis démuni.
    Merci bien pour votre implication Alain

    • Même erreur, dans un environnement Debian/Strecth
      Aucune erreur dans les log d’apache :-(
      Dans les log de spip, j’ai
      Pri:ERREUR : Le serveur ’_connect’ version 1 n’a pas ’showbase’

      Mais cela ne semble pas être dans le code de la fabrique...
      Sur une autre machine, très semblable (stretch aussi), la fabrique veut bien fonctionner !

      Une idée ?

    • Pour le « Le serveur ’_connect’ » ... c’est qu’il doit exister un fichier config/_connect.php compris par SPIP comme une base de données distante, mais qui ne fonctionne pas dans ton contexte. Renommes le en _connect.php.prod par exemple, ou du moins quelque chose ne terminant pas par .php :)

    Répondre à ce message

  • Bonjour,
    Après moult tentatives, ça avance mais j’ai l’erreur -voir image jointe-
    Sous UBUNTU 18.04.1
    apache 2.4.29
    php 7.2.17
    mariadb 10.3.14
    et spip tout neuf 3.2.4(24285)
    Dans la déclaration de table si je ne mets pas le nom de la base (spip2) devant le nom de la table je n’ai pas de création de table et si je mets spip2_qrcodes, j’ai bien la création de la table mais j’ai cette erreur ?
    Que faire
    J’ai par le passé, il y a plusieurs mises à jour de spip depuis, utilisé la fabrique avec bonheur, mais la ça plante.
    Merci bien Alain

    Répondre à ce message

  • Deux suggestions pour cet outil (qui est vraiment génial et je vous en remercie) : 1) pouvoir désactiver la gestion des champs par La Fabrique une fois qu’on a tout bien paramétré, de sorte que les Champs Extra ne s’affichent plus et qu’on fixe la base une fois pour toutes sans risquer de supprimer par mégarde un Champ Extra ; 2) pouvoir gérer les statuts d’auteurs supplémentaires que l’on a créé de façon personnalisée. Ce serait (pour moi) une aide sans pareille que de pouvoir voir, dans la liste des statuts à sélectionner quand le Champ Extra de type « Auteur » est configuré, tous les autres statuts — autres que les statuts prédéfinis (admin, rédacteurs et visiteurs). Je précise par ailleurs que les Champs Extra permettent de pallier une anomalie des bases SQL en version 4.7.7 qui crée un bug sur les dates (le format datetime ne permet pas de gérer un paramétrage par défaut à 0000-00-00 00:00:00 et seule l’utilisation des Champs Extras permet de résoudre ce problème ! ) Merci beaucoup.

    Répondre à ce message

  • 2

    Bonjour,

    Impossible d’utiliser un champ « checkbox ».

    Par exemple, on crée un objet éditorial avec 2 champs : Titre et Checkbox (avec 3 choix par exemple).

    Quand on crée une occurence de l’objet, pas de souci. MAIS si on coche une des checkbox, on a l’enregistrement le message « Une erreur technique a empêché l’enregistrement correct du champ XXXX ».

    Quelqu’un s’en est déjà rendu compte et a la soluce ? Ou suis je le premier ?

    Merci

    Répondre à ce message

  • 2
    Tederic Merger

    Bonjour,
    Le problème de page blanche et de non installation du plugin se pose même quand j’en ai enlevé toute création d’objet éditorial.
    A mon dernier test dans ces conditions, la log de SPIP ne me donne que des « INFO : Probleme de configuration opcache.revalidate_freq 2s ».
    J’ai vu que dans le passé, le moteur d’optimisation OpCache avait pu entrainer « chez certains hébergeurs (dont OVH) » la mauvaise installation des tables SQL des plugins.
    Je suis chez OVH, alors ne serait-ce pas à la base un pd d’OpCache ?

    • Bonjour Tederic,

      Désolé des problèmes rencontrés.
      Alors, concernant Opcache, non il n’y a pas de problème particulier avec la configuration normalement de nos jours (effectivement on avait eu quelques soucis par le passé).

      Concernant la page blanche, je t’invite à faire afficher les erreurs PHP ; quelque chose comme cela dans mes options, temporairement :

      error_reporting(E_ALL^E_NOTICE);
      ini_set ("display_errors", "On");
      define('SPIP_ERREUR_REPORT',E_ALL);

      Pendant un temps, on tolérait les champs dans les tables qui étaient des mots clés réservés à mysql (tel que ’option’), et qui pouvait empêcher une table SQL de se créer. Ces champs sont normalement bloqués aussi maintenant lors de la création par la Fabrique.

      J’espère que l’affichage d’erreur sera informatif. Ça pourrait être un timeout par exemple (le script qui prendrait plus de 30 secondes de travail)

      MM.

    • Tederic Merger

      Merci Matthieu, notamment pour les instructions de pistage des erreurs en cas de page blanche.
      Mais j’ai recommencé un plugin sous un autre nom, et avec le premier objet éditorial créé, je n’ai justement plus la page blanche, et l’installation se fait correctement ! J’ai donc bon espoir que le problème soit résolu.
      Il y avait un trait d’union dans le préfixe du premier plugin (« locs-noms »). J’espère que c’est pas ça...

    Répondre à ce message

  • Tederic Merger

    Bonjour,
    Problème toujours non résolu...
    Je vois dans les logs qu’il y a des erreurs ou des messages d’information « trouver_table : table inconnue... » sur des tables qui n’existent plus dans la base depuis longtemps.
    Que faut-il mettre dans la zone schéma de la structure de données de la définition du paquet du plugin, et qui sert à l’installation ?
    J’ai mis au hasard 1.0.0 puis 2.0.0... lors de l’activation du plugin, toujours une page blanche et échec de l’installation, et par la suite un message « activation réussie du plugin », mais intallation échouée !

    Répondre à ce message

  • Tederic Merger

    Bonjour,
    Je tente d’installer un plugin qui crée 5 objets éditoriaux.
    Un message me dit que l’activation s’est correctement déroulée, mais l’installation ne se fait pas, et en plus, j’ai la terrible page blanche !
    Les tables spip_locs, ... spip_prenoms existent déjà et sont remplies. Le but n’est pas de les créer par l’installation du plugin.
    Or la log me met des messages du genre « Erreur mysql 1146
    2018-11-22 14:55:38 88.186.116.75 (pid 24792) :Pri : !INFO : trouver_table : table inconnue ’’ ’locs’. » Il semble donc que les tables sont cherchées sans le suffixe spip_.
    Dans le fichier de Déclarations relatives à la base de données, j’ai ceci :
    $interfaces[’table_des_tables’][’locs’] = ’locs’ ; (etc.)
    Dans le fichier d’administration-installation du plugin, j’ai
    /** $maj[’create’] = array(array(’maj_tables’, array(’spip_locs’, ’spip_noms’, ’spip_nom_normats’, ’spip_nom_normats_liens’, ’spip_paraulas’, ’spip_paraulas_liens’, ’spip_prenoms’, ’spip_prenoms_liens’))) ; **/
    Les fichiers liens figurent aussi préalablement dans la base, mais ne semblent pas causer l’erreur.
    Que je désactive ou non cette instruction, l’erreur table inconnue et la page blanche surviennent... Mysqsl ne cherche jamais les tables avec suffixe.
    J’ai aussi essayé d’enlever le suffixe dans le nom des tables telles qu’elles existent dans la base, mais ça ne marchait pas plus : les tables étaient toujours recherchées et non trouvées.
    J’ai aussi fait attention de vider le cache presque à chaque fois...
    Merci de votre attention !

    Répondre à ce message

  • Bonjour et merci pour cette moulinette qui permet de créer rapidement de nouveaux objets éditoriaux.

    J’aurais besoin d’un peu d’aide pour sauter une étape qui ne m’est pas utile...

    J’ai créé un objet caption lié aux articles. Tout fonctionne superbement... Je peux créer de nouveaux objets caption, les modifier, les lister....

    Mais lors de l’étape de création d’un nouveau caption, je souhaite juste ne pas afficher l’étape « ajouter un caption ». Cette étape va en effet me lister les captions existants dans la table caption et puis seulement m’afficher « créer un nouveau caption » qu’à la suite de cette liste... Je souhaiterais uniquement afficher les captions attachés à l’article et directement le bouton « créer un caption » ??... Mais je ne sais pas comment m’y prendre ?....

    Si quelqu’un pouvait me mettre sur la piste ?? Merci :-)

    Répondre à ce message

  • 4

    Bonjour à tous,
    Je suis en train de tester le plugin La Fabrique pour créer un objet éditorial « Fiche - Contact » + un modèle pour permettre l’affichage des objets créés, du côté public.
    Ça marche de façon tout à fait satisfaisante.
    Super ce plugin !

    Seul petite question : du côté public, mes champs « text » sont affichés sans retour à la ligne.
    Quand je mets des retours (entrée) dans mon texte, ou même des retours « SPIP » avec « _ », à l’affichage, mon texte court apparait sans retour ligne.
    Alors évidemment, des -br- pourraient faire l’affaire, mais je voudrais éviter que mes rédacteurs aient à taper du HTML.

    Ai-je raté quelque chose au moment de la création e mon plugin ?

    Répondre à ce message

  • 1

    Hello ici ! :)

    Je travaille actuellement sur le dev d’une appli interne avec SPIP et la Fabrique qui, l’air de rien me fait tous les jours gagner plusieurs heures de dev et de quantité de cheveux ! :D

    J’ai juste vu 2 trucs :

    • bug : à la création/édition d’un objet éditorial, lorsqu’on ajoute des champ, et qu’il s’en créé un vide #XX à la toute fin de liste, on ne peut pas le supprimer sans renseigner les 3 champs obligatoires.
    • suggestion : sur la création des champs, en plus du glisser-déposer (merci !) une option ’dupliquer le champ’ serait magique mais je sais pas faire :O * sort de supplication level 3 avec bonus beta_testeur de +2 à mon jet de mental <3 :) *

    Merci pour le boulot et love sur tous \o/

    • +1 pour dupliquer le champ
      perso je rajouterai la possibilité d’ajouter des librairies externes (du moins en designer le nom, l’url et l’’url final dans spip) et aussi faire appel a des plugins spip (activés) pour certaines fonctions
      pour outils dans peuplement d’un objet, prévoir de coller une liste texte directement, chaque ligne est alors importée dans le champs (ou objet), sans import a partir d’un objet existant

    Répondre à ce message

  • 3

    alors quoi de neuf avec la Fabrique...tutorials, mise a jour a venir, ...merci

    • bonjour,

      je viens de découvrir votre superbe plugin pour faciliter la création de plugins...bien que la vidéo date un peu, elle est superbe...c’est dommage que d’autres utilisateurs ne partagent pas de tutorials sur les plugins qu’ils ont créés.

      j,ai quelques questions :

      1/est-ce que la fabrique peut prendre en charge la création d’un objet editorial sans que celui-ci ne passe par les phases de publication, plutôt genre un objet editorial qui est directement publie, puisqu’il sera utilise tel quel (l’info introduite)

      2/est-il possible de créer des liaisons entre deux ou plusieurs objets éditoriaux entre eux ?

      3/comment faire pour créer des fichiers editoriaux qui ne soient que temporaires, nés des calculs ou bien de choix...ce qui fait qu’isl sont stockes dans un fichier json par exemple...

      MERCI

    • autres questions

      4/peut-on cree un auteur qui n’aurait qu’un role d’editer l’objet en question est rien d’autre sur le site
      5/dans le meme esprit peut-on creer un gestionnaire/admin limite aux objets editoriaux crees en dehors du reste de spip ?

      MERCI

    • bonjour Racim,

      a lire tes questions, on se rend compte que tu n’a jamais utilise le plugin.
      voila les réponses si quelqu’un souhaite ajouter qu’il le fasse :

      1/est-ce que la fabrique peut prendre en charge la création d’un objet editorial sans que celui-ci ne passe par les phases de publication, plutôt genre un objet editorial qui est directement publie, puisqu’il sera utilise tel quel (l’info introduite)

      oui tu peux le faire sans rien spécifié ou en indiquant les différents status

      2/est-il possible de créer des liaisons entre deux ou plusieurs objets éditoriaux entre eux ?

      Oui une fois que tu créé tes objets éditoriaux tu pourra créé des jointures ou liaisons entre eux ou avec les objets spip sinon des plugins actives si je ne me trompe pas

      3/comment faire pour créer des fichiers editoriaux qui ne soient que temporaires, nés des calculs ou bien de choix...ce qui fait qu’isl sont stockes dans un fichier json par exemple...

      j’ai pas compris...désolé

      4/peut-on cree un auteur qui n’aurait qu’un role d’editer l’objet en question est rien d’autre sur le site

      5/dans le meme esprit peut-on creer un gestionnaire/admin limite aux objets editoriaux crees en dehors du reste de spip ?

      Oui tu peux généré un auteur spécifique a ton objet editorial et lui attribué un administrateur restreint ou plus si ton objet est lie a une rubrique, donc id rubrique.

      en espérant que cela t’aide.
      il est vrai que ceux qui ont créé des plugins avec la fabrique auraient pu partager le procédé de fabrication pour les nouveaux utilisateurs, perso, je le ferai pour mon prochain plugin...

      @+

    Répondre à ce message

  • Bonjour,

    j’ai un soucis avec l’utilisation du plugin, voici ce qui s’affiche lors de la création d’un plugin :

    Warning : Illegal string offset ’fichier’ in /home/clients/5e2b79ef917a0cd6e87047fff3f6c083/web/plugins/auto/fabrique/v2.3.11/formulaires/fabriquer_plugin.php on line 828

    si vous avez une solution ce serait top car je trouve ce plugin vraiment puissant

    Merci

    Répondre à ce message

  • 2

    Bonjour,

    Une fois que j’ai activé le plugin et que je retourne sur la fabrique sur mon plugin je n’ai plus le deuxième onglet qui me me permet de configurer mon objet éditorial
    (j’ai la derniere version de la fabrique)

    merci de votre aide !

    • Bonjour,

      J’ai crée un objet éditorial, je voudrai que dans la partie publique du site les utilisateurs puissent depublier ou mettre à la poubelle cet objet, pour ce faire je veux utiliser #BOUTON_ACTION et #URL_ACTION_AUTEUR mais je ne sais pas quoi utiliser comme paramètre pour pouvoir réaliser la depublication ds l’espace public
      ci dessous le code :

      [(#GET{nb_file}|=={1}|?{#BOUTON_ACTION{Supprimer,#URL_ACTION_AUTEUR{objet_instituer,#ID_NOTE/poubelle,[(#SELF)]},ajax,Note supprimée}})]

      Merci de votre aide.

    • Bien tardivement.

      Avec

      [(#AUTORISER{instituer,note,#ID_NOTE})
      [(#BOUTON_ACTION{supprimer note,#URL_ACTION_AUTEUR{supprimer_note,#ID_NOTE-off,#SELF|ancre_url{note#ID_NOTE}},'ajax supprimer'})]
      ]

      Cela devrait fonctionner.

    Répondre à ce message

  • Salut,
    Déjà, merci pour ce plugin : ça étend vraiment l’utilisation de SPIP. Mais j’ai un problème de sauvegarde. Je suis sur SPIP 3.2.0. Je peux enregistrer une première fois. Puis une fois quelques éléments ajoutés, impossible à nouveau de sauvegarder... Que faire ?

    Répondre à ce message

  • Bonjour,

    après 10 ans à utiliser SPIP je me lance ENFIN dans la création d’un plugin avec La Fabrique. C’est génial ! Simple comme bonjour :) Merci.

    Seulement j’ai un petit soucis, je peux créer mon nouvel objet, il me demande à le publier et j’ai un formulaire pour le logo mais à droite, les informations de l’objet et le bouton pour le modifier ne sont pas affichés. J’ai un espace vide. Sur quel fichier cela se gère t’il ? Comment cela se fait ?

    Répondre à ce message

  • 2

    Bonjour, utilisateur depuis longtemps de ce plugin merveilleux, je rencontre un petit soucis de débutant. Je n’ai jamais eu besoin d’afficher du texte formaté dans les précédentes réalisations. Mais là, sur un champ qui ne s’appelle pas TEXTE ou DESCRIPTIF, j’ai bien la possibilité de formater le texte (gras, italique, liste, etc...) mais impossible d’afficher le texte formaté dans le site public comme il le fait pour le champ TEXTE. J’ai bien regardé du côté des filtres applicables aux texte, mais je n’ai rien trouvé.

    Merci d’avance pour l’astuce qui doit être très simple...

    • Dans un squelette, ça serait |typo ou |propre.
      Cela dit c’est mieux de le déclarer dans le plugin tant qu’à faire, une fois qu’il a été généré, dans le fichier base/{prefixe}.php en utilisant la constante _TRAITEMENT_RACCOURCIS dans le pipeline déclarant les traitements des champs.

      Exemple :

      // syntaxe
      $interfaces['table_des_traitements']['NOMCHAMP']['nomtablesansprefixe'] = 'letraitement(%s)';
      // spécifique
      $interfaces['table_des_traitements']['TYPE']['mots'] = _TRAITEMENT_RACCOURCIS;

      Regarder d’autres plugins pour s’inspirer, tel que :

      MM.

    • Bonjour Matthieu et merci pour cette réponse. J’avais fini par retrouver le filtre. Je vais essayer de le déclarer dans le plugin (base/prefixe.php).

      Bravo pour tout ton travail et toutes les aides que tu apportes à beaucoup de monde, ici et ailleurs, car je tombe souvent sur tes écrits numériques. Ta rapidité et ton efficacité nous permettent d’avancer plus rapidement, et l’existence même de ce plugin justifie largement l’utilisation de SPIP. Encore une fois, BRAVO et MERCI !

    Répondre à ce message

  • Bonjour,
    Je trouve se plugin très utile pour commencer le développement d’un plugin sans trop de difficulté.

    Mais j’ai un souci, j’ai commencé par voir ce que cela pouvait donner en créant un plugin avec un objet éditorial créer de 0, la création est OK mais quand je veux éditer un nouvel objet j’ai le message d’erreur suivant :

    Erreur SQL 1146
    Table ’spip.spip_suivis’ doesn’t exist
    SELECT suivis.id_suivi, 0 as points, ’’, suivis.titre, suivis.titre AS titre_rang FROM spip_suivis AS suivis GROUP BY suivis.id_suivi ORDER BY 0+suivis.titre, suivis.titre

    Je comprends que ma table spip_suivis n’existe pas. Pourquoi La Fabrique n’a pas créé ma table ? Suis-je passé à côté de quelque chose ?
    J’ai pourtant suivis l’exemple de la video des félins...

    pour information, j’utilise :

    • spip v.3.1.6
    • La Fabrique 2.3.11

    Merci de votre aide ou éclaircissement.

    Répondre à ce message

  • 4

    Je viens de créer une ébauche de plugin destinée à gérer des « auteurs de livres » autrement désignés « écrivains » (le plugin s’appellera... ecrivain).
    J’ai décris les tables du nouvel objet éditorial, et fabrique m’a bien généré le fichier ecrivain_administration.php (jusque là, tout va bien !)
    fichier qui contient
    function ecrivain_upgrade($nom_meta_base_version, $version_cible)
    $maj = array() ;
    $maj[’create’] = array(array(’maj_tables’, array(’spip_ecrivains’, ’spip_ecrivains_liens’))) ;
    include_spip(’base/upgrade’) ;
    maj_plugin($nom_meta_base_version, $version_cible, $maj) ;

    MAIS à l’activation du plugin seule la table de jointure est crée, pas la table principale :-(
    Le fichier fabrique_ecrivain.php.zip est disponible ici :
    http://w3.adapt.snes.edu/IMG/zip/fabrique_ecrivain.php.zip

    Bon, au pire, je vais créer la table à la pain pour continuer...

    • Bon, en reprenant tout de puis le début, tout fonctionne bien :-) (Merci Matthieu pour la vidéo !)
      Bon mon plugin « fonctionne », il me reste à lui faire faire ce que je veux !
      Je cherche un espace où discuter du développement de celui-ci sans polluer les espaces de discussion bien connus... Ça existe ?

    • effectivement

      mais ce n’est pas dans le nom d’objet, mais dans le nom de la table
      et il faut après l’avoir changé comme nom de table, aller modifier les noms d’identifiant qui trainent...

      merci
      pam

    • Bonjour,

      j’ai exactement le même problème. La table principale n’est pas créée. Mais j’ai beau recommencer depuis le début, j’ai le même problème. Avez vous compris ce que vous ne faisiez pas correctement ?

      J’ai également quelques autres dysfonctionnements, par exemple le prebuild ne fonctionne pas. En indiquant une table (p.ex., spip_article) le bouton est ineffectif.

      Une idée ?

    • Le prebuild ne marche pas pour moi non plus. Par contre, si les tables des nouveaux objets ne se créent pas, vous pouvez toujours procéder à une Réparation de la base de données. Ce n’est peut-être pas l’idéal, mais ça a fonctionné pour moi.

    Répondre à ce message

  • Bonjour à tous,

    Dans l’écriture d’un champ de type « radio », j’ai érit :
    datas=[(#ARRAY{cle1,Faible,cle2,Modéré,cle3,Moyen,cle4,Élevé,cle5,Fort})]

    A l’édition : ce sont les « cle » qui apparaissent à la place des valeurs.
    Je n’ai pas dû comprendre quelque chose ?
    Merci de vos lumière,
    jpcrea

    Répondre à ce message

  • 1

    Bonjour,

    Ce magnifique plugin m’a permis de créer facilement un nouvel objet pour publier des recettes de cuisine qui fonctionne très bien.

    Mais j’ai, lorsque je désire modifier la recette : « Modifier cette recettes » avec un « s » ;
    J’avais effectivement, dans un premier temps, mis par erreur un « s » lors de la création du plugin, j’ai rectifié, mais j’ai toujours ce « s » qui m’embête bien .
    Que faire, je ne vois plus ou aller pour rectifier cette anomalie ?
    Merci de vos lumières.

    Répondre à ce message

  • 2

    Bonjour à tous...
    Version Fabrique 2.3.11 :
    Juste pour vous informer qu’il me semble qu’une petite erreur d’écriture s’est glissée dans le fichier fabrique/fabrique/prefixe_autorisations.php.html
    Ligne 63, remplacer :

    function autoriser_#GET{type}creer_menu_dist($faire, $type, $id, $qui, $opt) {
    	return autoriser('creer', ['(#TYPE)'], '', $qui, $opt);
    }(#VAL{outils_rapides}|in_any{#VALEUR{boutons}})]

    par :

    function autoriser_#GET{type}_creer_menu_dist($faire, $type, $id, $qui, $opt) {
    	return autoriser('creer', ['(#TYPE)'], '', $qui, $opt);
    }(#VAL{outils_rapides}|in_any{#VALEUR{boutons}})]

    Il manque un underscore entre « #GETtype » et « creer_menu_dist ».

    Cela entraîne le plantage d’un site lors de l’activation d’un plugin généré par la fabrique et utilisant cette fonction.
    Bon développement ! et merci pour ce super plugin !

    • Non non, cette écriture est correcte et doit générer autoriser_chatcreer_menu_dist(...)

      Voir par exemple dans ecrire/inc/autoriser.php la fonction autoriser_articlecreer_menu_dist.

      Il y a quelques autorisations un peu spécifiques $type$verbe_xxx de la sorte.

      Maintenant que dans ton cas cela provoque une erreur d’activation est plus ennuyant. Il faudrait avoir plus de détail sur l’erreur ?

    • Bonjour Mathieu,
      Merci pour ta réponse rapide...
      Ok, pourtant si je ne corrige pas de la façon indiquée, Fabrique génère un fichier prefixe_autorisations.php (prefixe = prefixe de votre plugin) avec la fonction suivante :

      function autoriser_prefixecreer_menu_dist($faire, $type, $id, $qui, $opt) {
      	return autoriser('creer', 'prefixe', '', $qui, $opt);
      }

      Ce qui fait planter mon site spip de dev (3.1.4 ).
      Si je corrige avec :

      function autoriser_prefixe_creer_menu_dist($faire, $type, $id, $qui, $opt) {
      	return autoriser('creer', 'prefixe', '', $qui, $opt);
      }

      Tout est OK.
      Je vais investiguer, sans doute que quelque chose en amont en avale cloche et qu’en changeant la syntaxe je désactive la fonction qui entraîne le crash...
      Merci encore !

    Répondre à ce message

  • 1

    Bonjour et bravo pour ce plugin vraiment très utile,

    Le plugin Fabrique propose t il un moyen de modifier une version précédente de son plugin qui serait déjà en exploitation et ce sans perdre les données qui seraient déjà saisies ? On peut supposer que l’évolution consisterait à ajouter des champs sur le tard pour s’adapter à un nouveau besoin.

    Merci !

    • Oui et non.

      La fabrique génère un fichier fabrique_{prefixe}.php à la racine du plugin, qui est une sauvegarde de toutes les données du formulaire.
      Par contre ça n’a aucune information sur les fichiers que tu aurais pu avoir modifié / créés à la main, après la création du plugin.

      Ce fichier peut être réimporté pour recréer le plugin depuis la Fabrique (et ajouter des champs donc). Cependant, les actions de mises à jour ne seront pas créées. Il faut t’inspirer d’autres plugins pour ce faire, mais cela consiste à :
      -  augmenter le schéma dans paquet.xml
      -  ajouter un $maj[’x.y.z’] = ... dans le fichier xxx_administrations.php (du numéro de schéma), avec les actions à faire.

      Cela peut être pour ajouter les champs manquants sur spip_matables quelque chose tel que :

      $maj['1.1.0'] = array(array('maj_tables', 'spip_matables'));

      Tu as plein de beaux exemples ici :
      https://zone.spip.org/trac/spip-zone/browser/_plugins_/gis/trunk/gis_administrations.php

      MM.

    Répondre à ce message

  • 3

    bonjour

    découvrant (impressionné !) la fabrique, je fais un premier essai avec qq objets liés, la génération se passe bien, mais j’ai systématiquement une erreur lors de l’activation du plugin...

    Parse error : syntax error, unexpected ’-’, expecting ’(’ in /home/venissie/test/spipr/plugins/fabrique_auto/elec/elec_autorisations.php on line 259

    au cas ou j’ai coché le fichier autorisations...sabs changements...
    je en vois rien de particulier dans elec_autorisations à la ligne indiquée...

    je n’ai fait que des objets éditoriaux avec qq champs et des liaisons indirectes entre eux...

    merci d’avance d’une piste...

    pam

    • Si tu peux mettre dans un pastebin le code généré pour ce fichier d’autorisations, cela pourrait aider à comprendre. Par exemple sur http://spip.pastebin.fr/
      Merci.

    • c’est fait...

      http://spip.pastebin.fr/50123

      la ligne 259 signaliée est la définition de fonction sur un des objets...

      function autoriser_spip-resultat_creer_dist($faire, $type, $id, $qui, $opt) {
      	return in_array($qui['statut'], array('0minirezo', '1comite'));
      }

      merci

    • Ah voilà une blague quelle est bonne :)

      Bon, donc, il ne faut pas mettre de - dans les noms de tes objets. Tu peux utiliser le _ de préférence je pense.

      Bizarre que je n’ai pas de test sur ce cas. Je verrais, mais je pense que tu as la réponse.

    Répondre à ce message

  • 2

    Bonjour,
    J’ai un plugin crée avec fabrique, qui ajoute deux tables à la base.
    Depuis la dernière mise à jour spip je reçois cet erreur :

    Unknown column 'projets.date' in 'where clause'
    SELECT projets.id_projet, projets.titre, projets.texte FROM spip_projets AS <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+cHJvamV0czwvY29kZT4="></span> INNER JOIN spip_mots_liens AS L2 ON ( L2.id_objet = projets.id_projet AND L2.objet='projet') INNER JOIN spip_projets_liens AS L1 ON ( L1.id_projet = projets.id_projet ) WHERE (projets.statut = 'publie') AND projets.date<'2016-11-27 00:01:00' AND (L1.id_objet = 2117) AND (L1.objet = 'article') AND (L2.id_mot = 645) GROUP BY projets.id_projet

    squelette : /monchemin/ecrire/public/composer.php
    boucle : calculer_select(){ sql_select(); }

    Je n’ai effectivement pas de champs « date » dans ma table, et je n’en ai pas besoin. ça m’embête que ce squelette en a besoin. Est-ce que c’est indispensable ? Est-ce que c’est qqchose qu’il faudrait savoir avant de créer son plugin ?

    J’ai contourné l’affichage de l’erreur en ajoutant tout à ma boucle sur cette table...

    Merci d’avance pour vos lumières

    • Bonjour joz,

      Peux tu préciser de quelle mise à jour tu parles ? de SPIP (et de quelle version à quelle version ?) ou de la Fabrique ? à quel endroit tu as cette erreur ?

    • Ah oui, sorry : c’est depuis la dernière màj spip que j’ai eu ce problème, vers spip 3.1.3

      J’ai cette erreur sur une page ou j’utilise l’objet « projet » que je cré avec mon plugin. C’est sur ma boucle (PROJETS) où j’ai ajouté {tout} pour que l’erreur ne s’affiche plus.

      J’espère que je m’exprime un peu compréhensible...

    Répondre à ce message

  • 2

    Bonjour,

    J’ai relevé un bug quand on utilise « pré-construire » sur l’interface de définition d’un nouvel objet éditorial.

    Si dans la table SQL de notre objet, on a une colonne « id_secteur », celle-ci se retrouve définie au niveau de la section « Champs » et la case à cocher dans la section « champs spéciaux » ne l’est pas. Ça fonctionne en revanche pour « id_rubrique » : « champs spéciaux » coché et rien dans « champs ».

    Voici le schéma SQL utilisé sur lequel je me suis appuyé.

    CREATE TABLE spip_pomme (
      id_pomme bigint(21) NOT NULL AUTO_INCREMENT,
      id_rubrique bigint(21) NOT NULL DEFAULT '0',
      id_secteur bigint(21) NOT NULL DEFAULT '0',
      titre text NOT NULL,
      variete varchar(255) NOT NULL DEFAULT '',
      date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
      statut varchar(10) NOT NULL DEFAULT '0',
      maj timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (id_pomme),
      KEY id_rubrique (id_rubrique),
      KEY id_secteur (id_secteur),
      KEY statut (statut,date)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    • Ah oui, bien vu.
      La version 2.2.1 corrige ce point.
      Je considère qu’il faut forcément id_rubrique pour que id_secteur soit pris en compte aussi.

      Merci.

    • Ça fonctionne, merci.

      Je viens de voir la réorganisation avec les sections « liaisons directes/indirectes » : de mieux en mieux. C’est un un plaisir d’utiliser cet outil !

    Répondre à ce message

  • 2

    Bonjour,

    J’ai un problème « récurent » : je n’arrive pas à créer un objet éditorial.

    Message d’erreur : « Oups. Une erreur inattendue a empêché de soumettre le formulaire »
    Puis je me retrouve avec le panneau « Site en travaux ».

    Message dont la recherche m’a mené ici : http://contrib.spip.net/Champs-Extras-3#forum488227

    Problème récurrent, car j’ai déjà rencontré ... il y a longtemps (sur des 3.0), à partir d’une certaine version. Si besoin, je peux retrouver plus de détails.

    Actuellement, mes versions :

    SPIP 3.1.3
    CHAMPS EXTRA 3.8
    SAISIE 2.7.12
    Serveur local : UBUNTU 16.04 (PHP 7 ...)

    J’ai adoré ce plugin ... mais je n’arrive plus à m’en servir. (Snif ...)

    Merci pour votre aide

    • Je ne sais pas ce qui provoque cela. Cette erreur peut apparaître si le formulaire n’arrive pas à se poster, en ajax donc. Peut être surchargez-vous des fichiers, tel que jQuery dans votre répertoire squelettes ?

      Avez vous d’autres plugins qui pourraient interagir en dehors de ceux que vous avez déjà indiqué ?

    • J’ai installé le plugin sur une configuration toute neuve : cela marche.

      J’ai, petit à petit, ré-établi la configuration initiale en espérant trouver le coupable .... Niet, cela fonctionne ! ??????????

      Alors, ce n’est pas gênant, puisque « La fabrique » peut être exploitée hors contexte.

      Si je reproduis le problème avec un soupçon, je reviendrai vers vous sur ce fil.

      Merci beaucoup et encore bravo pour ce plugin !

    Répondre à ce message

  • 2

    J’ai ajouté dans la déclaration :

    'url_voir' => 'concours',
    'url_edit' => 'editer_concours',

    ça semble résoudre la bizarrerie ?exec=concour qui donne page introuvable
    et pour le bouton de création rapide qui ne fonctionnait pas, dans paquet.xml régler l’URL concours_creer action=« editer_concours »

     ?exec=concours toujours Accès interdit
    qui serait peut-être causé par ? (les autorisations sont laissées par défaut et « échafauder » les fichiers tout est coché)

    [(#ENV**{exec}|=={concours_edit}|?{#INCLURE{fond=prive/squelettes/contenu/concours_edit,redirect='',env,retourajax=oui},#REM|sinon_interdire_acces})]

    En effet, prive/squelettes/contenu/concours_edit.html n’existe pas ...

    Pas faciles les exceptions de la langue française ... un concour, des concours c’est bien aussi :-)
    Prochain exemple de plugin pour suivre le plugin Chats : le plugin Chevaux !

    • Hum, je pense que tu ferais mieux de laisser url_voir à ’concours’ et url_edit à ’concours_edit’.
      Par contre, tu pourrais faire comme Gis pour la page qui liste l’ensemble des concours, c’est à dire l’appeler elle ’concours_tous’.

      C’est un cas que je n’ai pas testé avec la Fabrique d’avoir un objet avec un s final au singulier et pluriel. Le cas cheval / chevaux doit poser moins de souci, de même que jeu / jeux (singulier différent du pluriel donc).

      Il y a des choses à améliorer…

    • Merci pour ta réponse Mathieu
      Le ’s’ pose d’autres problèmes que je ne peux pas résoudre, j’ai laissé sans s au singulier, tant pis

    Répondre à ce message

  • 3

    Bonjour,

    d’abord merci pour ce plugin !!!

    un petit complément à la doc, pour celles et ceux qui galèrent à afficher les nouveaux objets liés à un mot clé. Pour faire ça, il faut une jointure sur la table mots_liens. Or la jointure automatique avec le critère {id_mot} est ambiguë... elle se fait sur la table objets_liens. Pour contourner ça, il suffit de préciser sur quelle table on veut la jointure en mettant le critère {mots_liens.id_mot}

    Répondre à ce message

  • 2

    Salut, je crée un objet « Concours » :
    Nom pluriel : Concours
    Nom singulier : Concours

    ça m’affiche des id_concour, supprimer_concour.php, ’type’ => ’concour’, ... sans le ’s’ à la fin, c’est normal ?

    Cordialement

    • Le nom pluriel ou singulier sert juste à la création des chaînes de langue ; pas à la création du nom du champ dans la table.

      Ici tu es dans le cas d’une table un peu spéciale dont tu voudrais id_concours ; c’est ce que j’ai nommé dans la Fabrique une « Table hors norme » il me semble.
      Dans la déclaration de l’objet dans la Fabrique :

      • Table > Spécificités de tables hors normes > clé primaire => adapter id_concour à id_concours
      • et type de l’objet au même endroit, je pense qu’il faut mettre ’concours’

      Cela devrait te générer quelque chose de plus adapté. Enfin dans base/concours.php il te faudra peut être adapter (il me semble que la Fabrique crée un code à peu près correct), par exemple en suivant le code de GIS pour les surnoms, qui a la même contrainte (gis, id_gis) :
      http://zone.spip.org/trac/spip-zone/browser/_plugins_/gis/trunk/base/gis.php#L27

      $tables['spip_gis'] = array(
          /* Declarations principales */
          'table_objet' => 'gis',
          'table_objet_surnoms' => array('gis'),
          'type' => 'gis',
          'type_surnoms' => array('gi'),

      Notamment le dernier type_surnoms doit avoir la valeur sans s final !

    • Merci beaucoup Mathieu pour ta réponse
      Effectivement c’était prévu dans « Table hors-normes », my bad

      Dans base/concours.php, il n’y a pas de ’surnom’, j’ai d’ailleurs fait une recherche dans tous les fichiers du plugin, ’surnom’ n’apparaît nul part, ni ’table_objet’

      La déclaration commence par :

      function concours_declarer_tables_objets_sql($tables) {
      
      	$tables['spip_concours'] = array(
      		'type' => 'concours',
      		'principale' => "oui",
      		'field'=> array(
      			'id_concours'        => 'bigint(21) NOT NULL',
      			'titre'              => 'text NOT NULL DEFAULT ""',

      Maintenant j’ai /ecrire/ ?exec=concours : Accès interdit
      Et bizarrement : /ecrire/ ?exec=concour amène sur la gestion de l’objet
      Hors concour.php n’existe pas, on a bien base/concours.php

      J’ai désinstallé le plugin, vérifié que le table était supprimée, vidé le cache, réinstallé, vidé /tmp à la main

       ?exec=concour&var_mode=debug me montre qu’un squelette ../tmp/cache/scaffold/contenu/concour.html est appelé qui donne :
      #ENV
      exec  : concour
      date  : 2016-08-31 04:45:14
      date_default  : 1
      date_redac  : 2016-08-31 04:45:14
      date_redac_default  : 1
      type-page  : concour
      composition  :
      lang  : fr
      espace_prive  : 1

      J’ai vérifié qu’il n’y a pas de concour.* dans le plugin et il n’y a pas de fichier qui contienne concour sans ’s’ ...

      J’ai aussi essayé d’ajouter les mêmes champs que gis :

      function concours_declarer_tables_objets_sql($tables) {
      
      	$tables['spip_concours'] = array(
      		'type' => 'concours',
      		'principale' => "oui",
      		'table_objet' => 'concours',
              'table_objet_surnoms' => array('concours'),
              'type_surnoms' => array('concour'),
      		'field'=> array(
      			'id_concours'        => 'bigint(21) NOT NULL',

      ça rend le même résultat

    Répondre à ce message

  • 7

    Bonjour,

    J’ai créé avec succès des nouveaux objets éditoriaux avec votre plugin et qui fonctionnent parfaitement.

    Cependant je me suis aperçu que du côté privé, n’importe quel rédacteur pouvait librement modifier ces nouveaux objets éditoriaux sans en être l’auteur pour autant.

    Il y a-t-il un champ sql ou des champs sql spécifique(s) à créer pour qu’un nouvel objet éditorial puisse n’être modifié que par son auteur ?

    Merci et bonne journée.

    • J’ajouterai que paradoxalement la table spip_auteurs_liens référence bien les nouveaux objets éditoriaux avec une juste correspondance id_auteur-id_objet-objet. Alors peut-être le manque se situe-t-il côté privé. Le cas échéant dois-je créer un formulaire côté privé pour chacun de mes nouveaux objets éditoriaux et qui vérifie réellement qui est l’auteur (avant de proposer une modification) ? Si je trouve entretemps, je réponds ici-même..

    • Dans la partie de la Fabrique qui crée l’objet éditorial, il est possible de modifier déjà quelques paramètres d’autorisations, dans le cadre donc « Autorisations ».

      Cependant le choix de ne permettre la modification que par les auteurs appartenant à l’objet n’est pas présent. C’est un manque à mon avis. Il faudrait je suppose également donc un choix de plus, tel que "Être auteur sur l’objet éditorial ou être au moins administrateur ou administrateur restreint sur la rubrique"… C’est à dire à peu près comme cela se passe sur les articles.

      Sinon, donc, on parle d’autorisations, la Fabrique ne fait que créer les fonctions d’autorisations qu’il est possible d’adapter donc ensuite. Ça se passe dans le fichier généré prefixe_autorisations.php, particulièrement donc sur l’autorisation ’modifier’.

      Il faut s’inspirer d’autres plugins / autorisations pour adapter le code dans votre plugin. Par exemple :
      -  https://core.spip.net/projects/spip/repository/entry/spip/ecrire/inc/autoriser.php#L653
      -  http://zone.spip.org/trac/spip-zone/browser/_plugins_/albums/branches/v2/albums_autorisations.php#L88
      -  http://zone.spip.org/trac/spip-zone/browser/_plugins_/itineraires/trunk/itineraires_autorisations.php#L82

    • Je viens d’ajouter une nouvelle option d’autorisation qui permet de tester l’auteur de l’objet éditorial. http://zone.spip.org/trac/spip-zone/changeset/99199

      Ça répond en partie à la problématique. Là le statut de l’objet éditorial n’est pas testé, du coup, un rédacteur auteur de son objet peut l’éditer même s’il a été publié (contrairement aux articles).

      En tout cas c’est déjà mieux qu’avant.

    • La version 2.2.0 ajoute 2 nouvelles options d’autorisations en plus, dont une qui est comme le fonctionnement des articles. http://zone.spip.org/trac/spip-zone/changeset/99203

    • Merci pour tous ces efforts.

      J’ai fait la mise à jour de la fabrique, j’ai recréé mes 2 objets éditoriaux à partir de la sauvegarde du fichier fabrique_[monplugin].php, j’ai pu recréé le plugin de mes 2 objets éditoriaux toujours avec succès mais au final rien n’est changé. N’importe quel rédacteur peut toujours modifier l’objet qui ne lui appartient pas.

      Donc de mon côté je n’ai aucune différence, l’auteur de l’objet éditorial n’est pas testé côté privé apparemment, tout comme avant.

      Peut-être ai-je mal compris ce qu’apportait la mise à jour ?

      Pour mon nouvel objet information par exemple, je suis tombé sur le fichier prive/squelettes/contenu/information.html, et c’est bien sur cette page que je trouve l’autorisation de modifier mon information puisque concrètement c’est là qu’apparaît le bouton de modification alors qu’il ne devrait pas s’y trouver quand nous ne sommes que simple rédacteur et pas l’auteur de l’information.

      Tout à l’air de se passer ici :

      	[(#AUTORISER{modifier,information,#ID_INFORMATION})
      		[(#ID_INFORMATION|afficher_qui_edite{information}|non)
      			[(#URL_ECRIRE{information_edit,id_information=#ID_INFORMATION}|icone_verticale{<:information:icone_modifier_information:>,information,edit,right ajax preload})]
      		]
      		[(#ID_INFORMATION|afficher_qui_edite{information}|oui)
      			[(#URL_ECRIRE{information_edit,id_information=#ID_INFORMATION}|icone_verticale{#ID_INFORMATION|afficher_qui_edite{information},warning-24,'',right edition_deja ajax preload})]
      		]
      	]

      Je peux certainement faire un bricolage pour sauver les meubles en attendant mieux, mais s’il était possible de revoir ce bout de code pour que seul l’auteur de l’information (ou l’administrateur) puisse avoir le droit de modifier ce serait formidable.

      Sinon je m’inspirerai des autres plugins comme suggéré, mais ça va être beaucoup plus difficile à comprendre...

    • Il ne s’agit pas seulement de faire la mise à jour.

      Sur la fabrique, dans la description de l’objet éditorial « Informations » il y a un accordéon nommé « Autorisations ». Dedans, il y a des sélecteurs pour plusieurs types d’autorisations (créer, modifier, supprimer…). Il faut que tu modifies la sélection sur « Modifier » pour le mettre sur "Auteur de l’objet" ou "Auteur de l’objet sauf si publié"… Et de régénérer le plugin. L’avais tu fais ?

    • Ca marche ! Effectivement dans l’accordéon « Autorisations » j’avais laissé les réglages par défaut... J’ai cette fois régénéré le plugin en spécifiant modifier->Être auteur de l’objet ou au moins administrateur complet.

      Et maintenant donc plus de souci, le rédacteur reste à sa place et ne peut plus inopinément modifier un objet éditorial qu’il n’a pas créé, ni trafiquer son statut.

      Merci infiniment pour ces réponses très rapides !! Bonne fin de soirée !

    Répondre à ce message

  • 1

    Bonjour,
    J’ai une installation mutualisée ou je gère les plugins de la façon suivante
    -  Dans spip/plugins j’ai installé les plugins principaux utilisés sur la plupart des sites par svn. Sinon, sous SPIP3.0 j’avais pleins d’erreurs de désactivations de plugins lors des mises à niveau automatisées par l’interface. Ce fut un peu pénible.
    -  Dans /spip/sites/monsite.tld/config/mesoptions.php je mets :

    define('_ROOT_PLUGINS_SUPPL',_DIR_RACINE.'sites/'.$site.'/plugins/');
    define('_DIR_PLUGINS_SUPPL',_DIR_RACINE.'sites/'.$site.'/plugins/');
    define('_DIR_PLUGINS_AUTO',_DIR_RACINE.'sites/'.$site.'/plugins/auto/');


    -  Cela me permet de mettre d’autres plugins automatiquement installés qui restent au niveau de chaque site, et de développer mes squelettes sous forme de plugins dans ’.$site.’/plugins/gitdev/" pour sinchroniser mon développement à local avec le serveur de production.

    Tout ça pour dire que j’aurais voulu idéalement faire ’.$site.’/plugins/gitdev/fabrique_auto pour synchroniser mon développement, ou à la rigueur : ’.$site.’/plugins/fabrique_auto ...
    Mais celà ne marche que quand je fais /spip/plugins/fabrique_auto ... donc mon plugin de la fabrique serait disponible pour tous les sites ; ce qui n’est pas forcément le but.

    Y a t’il moyen de développer un site dans la fabrique pour un site spécifique d’une installation mutualisée.
    Sinon, une fois l’ébauche du plugin fait à la fabrique, je le ramènerai dans le rpertoire spécifique du site ; c’est pas la mort !

    merci Marcimat pour les conseils rapides et pertinents sur le Chat

    Bon été a tous ...

    • Je comprends. Il n’y a rien de prévu pour l’instant pour un tel usage avec la mutualisation.

      Personnellement j’aurais tendance à dire que du développement ne se fait pas au même endroit (ie sur un même SPIP) que des sites en production ! Il est beaucoup plus simple et sain d’avoir un site de développement en local, ou une copie d’un site existant en local et de travailler dessus pour tester de nouveaux plugins ou en créer avec la Fabrique.

      Il faudrait voir comment pouvoir améliorer le code de la Fabrique pour ton usage, mais c’est loin d’être évident ; en tout cas ça concerne les endroits où FABRIQUE_DESTINATION_PLUGINS est écrit dans le code, notamment la fonction fabrique_destination(), mais pas que.

      Peut être qu’on pourrait tenter d’ajouter une constante _DIR_PLUGINS_FABRIQUE qui vaudrait _DIR_PLUGINS par défaut, et remplacer les usages de _DIR_PLUGINS par cette nouvelle constante. Ça permettrait de la définir avant dans ton fichier d’options sur _DIR_PLUGINS_SUPPL .

      Si tu as le cœur à regarder, tester, le code est sur la zone :)

    Répondre à ce message

  • 1

    Lorsque je fais des modifs sur des champs d’un objet éditorial (ajout de champ, ou modification de taille d’un champ), j’ai compris qu’il fallait modifier le n° de « schéma » (Version de la structure des données), et aussi le n° de version du plugin.
    Mais même dans ces conditions, je dois désinstaller et réinstaller le plugin (et donc, repeupler les tables) pour que les modifications des champs soient prises en compte.

    Ai-je loupé quelque chose, ou bien est-ce le comportement normal ?
    J’avais cru comprendre (ou l’ai-je rêvé ?) qu’en désactivant le plugin, et en le réactivant, la magie opérerait pour trouver les modifications de la base.

    Merci,
    Sylvain

    • Je tente une reformulation... lorsqu’on fait une mise à jour de plugins « traditionnels », on ne perd pas les données, même s’il y a modification des objets éditoriaux.
      Avec mon joli petit plugin issu de la fabrique, chaque modification de la structure des objets éditoriaux nécessite une désinstallation et réinstallation, puis repeuplement de la base pour que la modification soit prise en compte.
      Est-ce que la « fabrique » prend en compte les mises à jour de structure des objets éditoriaux « à chaud » ? si oui, comment faire ? Et si non... comment faire ?...

    Répondre à ce message

  • Ce plugin me sert pour l’instant uniquement à créer le .xml, et les fichiers de conf. J’ai suivi consciencieusement le tuto ci dessus et je bloque dès que je crée un objet. Si je veux le peupler avec une table existante , comme dans l’exemple, ou créer un objet vide, la bulle « Veuillez compléter ce champ » apparait. Le problème est que je ne sais pas où est ce foutu champ sans nom. Et du coup je ne vais pas plus loin. Et pourtant je suis sur que ce plugin est très utile. Ce message d’alerte imprécis est $%&£ !

    Répondre à ce message

  • 2

    Bonjour,

    Je viens d’installer la Fabrique 2.0.30 pour tester en local sous Wamp SPIP 3.1.0 [22707].
    Je n’ai pas le lien du plugin dans l’onglet configuration du site.

    Quelqu’un saurait pourquoi ?

    • Oui, on met des pièges pour voir si les gens suivent :p
      La Fabrique en 3.1 est passé dans le menu « Développement »…
      qui ne s’active que depuis des préférences de l’utilisateur.

      Dans l’espace privé, cliquer sur ton nom en haut pour accéder aux configurations.

    • C’est malin, tu aurais pas pût le dire dans la doc du plug ? :-D
      J’allais te faire remonter le bug aussi :-D

    Répondre à ce message

  • Bonjour,

    Je suis en train de suivre pas à pas le screencast. La fonctionnalité « Différences avec la précédente création » ne fonctionne pas sur mon SPIP (3.1.0) qui tourne sur Ubuntu 12 (Php 5.3, Plesk 11).
    La zone où je devrais voir toutes les différences à chaque mise à jour du plugin est vide.

    Y a-t-il quelque chose à activer pour bénéficier de cette fonctionnalité ?

    Répondre à ce message

  • 1

    Lorsque j’affiche dans un squelette les champs créés avec la fabrique, je dois explicitement passer le filtre « propre » pour pouvoir afficher « proprement » le contenu, avec les sauts de ligne et autres jolies foritures d’affichage de spip.
    Y a-t-il quelque chose que j’aie loupé ?
    Faut-il mettre un paramètre lors de la définition des champs ?

    • Voir la doc sur table_des_traitements dans http://programmer.spip.net/declarer_tables_interfaces,379.

      Ensuite vous devez intégrer tout ça dans le fichier prefixeplugin/base/prefixplugin.php, et enfin secouer SPIP plus violemment qu’une bouteille d’Orangina pour que cela prenne effet :)

      Plus concrètement , sur ce dernier point, je crois avoir trouver une recette
      1- désactiver votre plugin ;
      2- faire la modif et changer la version du plugin (up de z comme ont dit) ;
      3- vider le cache du site ;
      4- réactiver le plugin.

      Ça devrait être bon.

    Répondre à ce message

  • 2

    Bonjour,

    En local ubuntu 14.4 64bits et un spip tout neuf 3.1 (même problème avec un spip réputé mis à jour), rien n’est présenté dans l’onglet « squelettes » pour démarrer avec la fabrique ?

    que pourrai-t-il me manquer ?

    MErci bien Alain

    • Natacha Courcelles

      Bonjour
      en attendant appelez ecrire/ ?exec=fabrique

      Natacha

    • Avec SPIP 3.1, l’accès à la Fabrique se fait via le nouveau menu Développement.
      L’activation de ce menu se fait en allant sur la page « Mes préférences » (/ecrire/ ?exec=configurer_preferences).

      À noter que ce menu n’est activable que par un webmester.

    Répondre à ce message

  • Apparemment la Fabrique oublie d’ajouter un H1 au début des pages de liste d’objets (exec=patates). Donc pas de titre principal à la page, et donc pas non plus de titre dans la fenêtre/onglet.

    À priori il faudrait ajouter à minima le titre de l’objet au pluriel « Patates » (ou une nouvelle chaîne ajoutée « Toutes les patates » ?), juste avant le formulaire de recherche.

    Répondre à ce message

  • 3

    Bonjour,
    Bravo et merci pour ce magnifique plugin très impressionant.
    A force de modifications d’un plugin, en particulier l’ajout de nombreux champs à un objet éditorial, sans savoir désactivé le plugin au préalable, j’ai dû désinstaller mon plugin.
    Lors de la réactivation, la table de l’objet n’est pas recréée.
    Je ne trouve pas comment recréer cette table qui me manque...
    MErci,
    Sylvain

    • Problème non résolu.
      Je réinitialise tout, recommence un plugin tout neuf.
      J’ajoute un objet éditorial.
      J’ajoute des champs, je teste le plugin, tout va bien.
      Au bout d’un certain nombre de champs (64), je reteste : le plugin ne veut pas s’installer, j’insiste, il s’installe, mais ensuite la table de l’objet a disparu.
      Je désactive et/ou désinstalle, réactive, je reviens en arrière avec les backups, rien à faire, même avec la toute première version de sauvegarde (sans l’objet editorial), il cherche la table, qui n’existe pas(Erreur SQL 1146 Table ’matable’ doesn’t exist ).
      J’’ai bien vu le message concernant max_input_vars, je l’ai ajouté au php.ini, cela ne change rien.

      une idée ?

    • Le bug : j’avais un nom de champ qui contenait un « - » et non un « _ », ce qui provoquait une erreur sql lors de la création de la table.
      Merci infiniment Marcimat pour la piste : regarder les logs de tmp/var/mysql.log

    • euh... tmp/log/mysql.log ... !

    Répondre à ce message

  • 1
    Spipmalion

    Pour info : La Fabrique écrit en autorisation :
    autoriser_configurer_nomplugin_dist
    alors qu’en fait c’est :
    autoriser_nomplugin_configurer_dist
    qui fonctionne (en tout cas « pour moi »)

    Répondre à ce message

  • Dudfactory

    Encore une question, cette fois cosmétique.
    Lorsque je crée une sélection ou une checkbox, le squelette dans la partie privée me renvoie clé1, clé2 ou clé3 au lieu des valeurs correspondantes à ces clés. Quelle syntaxe faut il utiliser pour afficher les valeurs au lieu des options ? Merci encore pour vos réponses.

    Répondre à ce message

  • Dudfactory

    Bonjour,
    Un grand merci pour ce plugin qui permet d’étendre les possibilités déjà nombreuses de Spip. Dans mon premier plugin, j’ai crée un champs de type Fieldset. Cependant, une fois mon fieldset crée, comment ajouter des champs à l’intérieur de ce fieldset. Merci d’avance pour vos réponses.

    Répondre à ce message

  • 4
    Spipmalion

    Le lien vers le .zip de la version 2.0.19 donne à télécharger la version 2.0.21 qui ne fonctionne qu’avec SPIP 3.1 : compatibilite=« [3.1.0-dev ;3.1.*] »

    Répondre à ce message

  • 5

    Secteur par défaut

    Bonjour,

    Comment configurer un secteur par défaut pour chaque nouvel Objet Editorial créé avec la Fabrique ?

    Après install du plugin j’ai tenté de définir une valeur par défaut du champ id_secteur ( et aussi id_rubrique ) directement dans la DB sql,
    mais SPIP écrit invariablement id=1 (par défaut)

    Merci.

    • Bonjour,

      Dans ces lignes,
      je vais préciser ma requête
      et vous informer de ce qui ne fonctionne pas...
      ... Faute d’avoir trouvé une solution :-(

      Le but :

      Imposer un secteur pour un type d’objet éditorial créé avec la Fabrique

      car lors de la création de l’objet,
      si dans Champs spéciaux on coche :

      • Créer le champ id_rubrique
      • Créer le champ id_secteur

      , malheureusement,
      ils ne proposent pas de renseigner une valeur par défaut qui serait passée dans le contexte d’édition NEW.

      Cela affiche dans le squelette editer_objet.html
      un champs déroulant Rubriques qui propose toutes les rubriques.

      Je cherche donc le moyen de réduire ce choix à un seul secteur et ses sous-rubriques

      le code responsable de ce champ déroulant semble être :

      [<li class="editer editer_rubrique[ (#ENV**{erreurs/id_parent}|oui)erreur]">
      		<label for="id_parent"><:titre_cadre_interieur_rubrique:></label>[
      		<span class="erreur_message">(#ENV**{erreurs/id_parent})</span>
      		]
      		(#VAL|chercher_rubrique{#ENV{id_produit},#ENV{id_parent},'produit',#ENV{id_secteur},'',0,form_simple})
      </li>]

      bien que je sois incapable de l’analyser précisemment c’est chercher_rubrique qui pose problème
      et le fichier php associé dépasse aussi mon entendement ( SPIP... CMS sans connaitre php.... @@@@TCHOOM !!!)
      (c’est de ma faute j’suis pas tombé dedans petit )

      chercher_rubrique.php dit au début :

      // Selecteur de rubriques pour l’espace prive
      // En entree :
      // - l’id_rubrique courante (0 si NEW)
      //.....

      et l’url est :

      /ecrire/?exec=objet_edit&new=oui

      Donc NEW ???

      Je tente :

      /ecrire/?exec=objet_edit&new=oui&id_secteur=2 

      => échec !

      /ecrire/?exec=objet_edit&new=oui&id_rubrique=2

      => pré-sélectionne la rubrique2 mais les autres secteurs restent accessible donc les erreurs de saisies aussi !

      C’est pour l’instant la moins PIRE solution
      -  
      -  
      Ce qui n’a pas fonctionné car SPIP enregistre invariablement id_rubrique=1

      • valeur par DEFAULT des champs SQL par modification directe de la DB
      • Dans :./plugins/fabrique_auto/mon_plugin/formulaires/editer_produit.php le paramètre $id_rubrique=0 apparaît à plusieurs reprises (3)→ Modification pour $id_rubrique=n
      • Dans : ./plugins/fabrique_auto/mon_plugin/formulaires/editer_produit.html suppression de :
      [<li class="editer editer_rubrique[ (#ENV**{erreurs/id_parent}|oui)erreur]">
      		<label for="id_parent"><:titre_cadre_interieur_rubrique:></label>[
      		<span class="erreur_message">(#ENV**{erreurs/id_parent})</span>
      		]
      		(#VAL|chercher_rubrique{#ENV{id_produit},#ENV{id_parent},'produit',#ENV{id_secteur},'',0,form_simple})
      </li>]

      → n’affiche plus le choix déroulant des rubriques
      et ajout des saisies :

      <input type='hidden' name='id_secteur' value='n' />
      <input type='hidden' name='id_rubrique' value='n' />

      dans mon cas n=2

      J’ai aussi tenté sans résultat plein de modif des critères associés à chercher_rubrique

      Voilà où j’en suis après des heures et plus de recherches et d’essais, que cela puisse servir ....

    • Pour affecter par défaut un id_secteur, tu peux passer par le pipeline pre_insertion

      Méthodo
      Note importante : à ma connaissance, le code ci-dessous ne peut pas être géré via les formulaires de la Fabrique. Donc une fois que tu en as terminé avec la Fabrique, tu peux utiliser le code suivant :

      Dans le fichier base/prefix.php, insérer le code suivant :

      function prefix_pre_insertion($flux) {
         if ($flux['args']['table'] == 'spip_matable') {
             $flux['data']['id_secteur'] = '12'; // 12 par exemple
             $flux['data']['id_rubrique'] = '38';  //  38 par exemple
         }
      return $flux;
      }

      et dans le fichier paquet.xml

      ....
       <pipeline nom="pre_insertion" inclure="base/prefix.php" ></pipeline>
      ....
    • Bonjour, dans le même ordre d’idée, je souhaite lier mon nouvel objet éditorial (Participations) lors de l’édition d’un nouvel événement. Jusque là pas de soucis avec le plugin fabrique. Cependant, comment transmettre l’id_evenement à l’objet participations en lieu et place d’un titre ? En effet, cet objet (Participations) ne servirait que de conteneur à un objet éditorial du plugin (Contacts & Organisations). Ensuite, un autre objet éditorial (Catégories) lié à (Participations) me permettrait d’ajouter autant de Catégories nécessaires pour une Participation et Une école... Là, je cale...

      Un petit coup de pouce serait bienvenu :-/

    • Cependant, comment transmettre l’id_evenement à l’objet participations en lieu et place d’un titre ?

      Pas sûr de comprendre ?

    • Oui, j’imagine que c’est abstrait dit comme ça :-(

      Je poste donc un schéma....

      Peut-être que je me complique moi-même la vie là où il ne le faut pas...

    Répondre à ce message

  • 1
    Eric Luyckx

    Bonsoir

    super contrib

    je cale sur une petite fonction : je voudrais que l’#ID_AUTEUR de celui qui remplit le formulaire soit associé dans un champs… impossible d’y arriver (y compris avec la table_liens)
    j’ai dû zapper qqchose.

    s’il y a une solution je suis demandeur :-)

    Eric

    • Eric Luyckx

      je me réponds :-)

      si on utilise pas id_auteur comme colonne SQL et qu’on permet les liens sur auteurs > l’id_auteur est attribuée

      désolé du bruit

      à+ éric

    Répondre à ce message

  • merci pour votre générosité lors du développement de ce plugin et de votre tutoriel !

    Répondre à ce message

  • 2

    Bonjour

    Le Diff ne fonctionne pas chez moi. J’ai bien une petite fenêtre mais elle est vide.
    Le fichier fabrique_diff.diff existe, il est mis à jour (date) mais il est vide.
    Les anciens fichiers sont bien copiés dans le répertoire .backup.

    Une idée ?

    • Quelle plateforme ?

      Je n’ai jamais testé sous windows, ni mac os.
      Y a peut être à voir quelque chose à voir de ce côté.

    • Re Mathieu

      En client, je suis sur Windows 8.
      Sur le serveur, c’est du Linux.

      Mais le diff est généré par le serveur n’est-ce pas ?

    Répondre à ce message

  • 2

    Re-bonjour

    1 ) Un petit truc qui peut être gênant surtout si on ne le
    sait pas. Si on ajoute des saisies dans le répertoire saisies, il faut que le plugin en cours de création soit activé.

    2) Fabrique génère le fichier de saisie d’un nouvel objet éditorial. Mais il n’y a que le HTML. Il manque le yaml ? cela expliquerait-il que le sélecteur de saisie de cet objet ne soit pas disponible dans un autre objet ?

    • Bonjour Bruno,

      1) Activé pour que quoi ? pour qu’il soit disponible dans les propositions de saisie si tu crées d’autres objets éditoriaux avec la fabrique ? si c’est ça effectivement. Autrement je ne sais pas de quoi tu parles.

      2) Oui, la fabrique actuelle ne génère pas le yaml ; Ça serait bien pourtant effectivement, même un yaml minimal.

    • Bonjour Matthieu

      Il faut que le plugin en cours de création par la Fabrique soit activé pour que les nouvelles saisies créées par Fabrique, et relatives à ce nouveau plugin, soit visibles dans le selecteur de type de saisie, quand on créé une nouvelle entrée dans le plugin.

    Répondre à ce message

  • 1

    Je ai défini un champ checkbox en un formulaire avec fabrique et le formulaire renvoie une chaîne comme celle-ci :

    array(4) [0]=> string(20) « manutenzione_pulizie » [1]=> string(23) « assistenza_alla_persona » [2]=> string(24) « formazione_professionale » [3]=> string(12) « baby_sitting »

    mais pas sauvé à MySQL...
    « Une erreur technique a empêché l’enregistrement correct du champ ’attivita’. »

    Quel type champ de mysql dois-je utiliser pour un ckeckbox ? je ai tenté avec text, longtext,varchar()....

    Merci, Enzo

    • On ne peut pas enregistrer de données tabulaires directement en base de données. En tout cas en mysql. Il faut sérialiser d’une manière ou d’une autre ce tableau.

      Il y a différentes manières ou lieu pour faire cela. Ça peut être fait en JS au moment de la soumission du formulaire, ou dans le CVT, ou au moment de l’enregistrement des données (pre_edition). Le plus simple si on débute étant de le faire dans le CVT. Le plus courant est de faire un implode(',', $valeurs), par exemple dans la fonction verifier. À l’inverse il faut recréer le tableau, par exemple dans la fonction charger (ci dessous), OU dans le html du formulaire, dans la saisie en ajoutant [(#SAISIE{checkbox,mon_champ, ..., valeur=#ENV{mon_champ}|explode{","}})].

      function ...charger(...) {
         $valeurs = ...();
         $valeurs['mon_champ'] = exlpode(',', $valeurs['mon_champ']);
         return $valeurs;
      }
      
      function ... verifier(...) {
        $erreurs = ...();
        set_request('mon_champ', implode(',', _request('mon_champ')));
        return $erreurs;
      }

    Répondre à ce message

  • 2

    Bonjour Matthieu

    Plugin magnifique et intelligent, que j’utilise depuis quelques années.

    Aujourd’hui, je m’essaye à la création d’objet éditoriaux. Comme je n’ai pas les idées très claires, j’ajoute des champs au fur et à mesure que me viennent les idées. Cependant, j’aimerai pouvoir commencer à utiliser mon plugin même s’il n’y a pas encore tous les champs.

    J’ai essayé de créer de nouveaux champs et de désactiver/réactiver le plugin. Les nouveaux champs ne sont pas présents dans la table. :o(

    Le code a l’air correct pourtant :

    function compobase_upgrade($nom_meta_base_version, $version_cible) {
    	$maj = array();
    	$maj['create'] = array(array('maj_tables', array('spip_compobase_fabricants')));
    
    	include_spip('base/upgrade');
    	maj_plugin($nom_meta_base_version, $version_cible, $maj);

    Quelle erreur ai-je commise ?

    MERCI pour ton aide.

    • Salut bruno,

      Si tu veux up les champs faut désinstaller ou bien faire une maj dans ce fichier

      function compobase_upgrade($nom_meta_base_version, $version_cible) {
              $maj = array();
              $maj['create'] = array(array('maj_tables', array('spip_compobase_fabricants')));
              $maj['1.0.1'] = array(array('maj_tables', array('spip_compobase_fabricants')));
      
              include_spip('base/upgrade');
              maj_plugin($nom_meta_base_version, $version_cible, $maj);

      et modifier la version du shema dans le paquet.

    • Bonjour Pierre

      MERCI pour ton aide.

      Le problème de la désinstallation est qu’elle supprime les tables, avec les données évidemment. Et cela je ne peux le faire.

      Donc il reste la mise à jour manuelle de la fonction d’installation/upgrade, qui permettrait d’ajouter finement les champs tout en conservant les données.

      MERCI Pierre

    Répondre à ce message

  • Bonjour Matthieu,

    Petite remarque : la fabrique génère le fichier nom-plugin_options.php et il manque un espace dans la 3e ligne juste avant « au chargement » :

    * Options du plugin nom-pluginau chargement

    françois

    Répondre à ce message

  • 3

    Bonjour,
    Je viens d’essayer de télécharger la version 1.20.4 de La Fabrique mais, contrairement a ce qui est indiqué sur cette page, elle ne semble etre compatible qu’avec SPIP 3.1 ( [3.1.0-dev ;3.1.*] ).

    Alors, oublie de mise a jour sur cette page, ou erreur dans le paquet.xml ? ( l’option 2 serait plus pratique pour moi :) )

    Merci d’avance !

    Répondre à ce message

  • 1

    J’ai une petite remarque à faire : il faudrait signaler au moment de l’ajout des champs qu’ils doivent être en minuscule. C’est une restriction liée à SPIP. La Fabrique permet de créer des champs en camelCase, mais ils sont inexploitables dans les formulaires. Donc il faudrait que le plugin passe les champs par un strtolower() pour être fonctionnel, non ?

    • Je pense aussi que l’élément qui sert pour calculer le titre devrait être obligatoire car en pratique il sert pour les squelettes générés, ou presque

    Répondre à ce message

  • tche edja olivier amateur developpeur

    je cherche le code en php de par exemple lorsque on a un checkbox et trois champs de saisies on veut dit a la page que si le checkbox n’est pas selectionner faut geiser les trois champs

    Répondre à ce message

  • Bonjour

    Bravo matieu pour ce super plugin !

    j’ai une petite question, j’ai créé un plugin contenant 3 objets éditoriaux, Maisons, Appartements et Terrains , ils ont en commun un champ « ville », je voudrais savoir s’il y avait une astuce pour pouvoir faire une boucle spip sur les 3 objets éditoriaux ? sachant qu’ils partagent un certain nombre de champs (ville, code postal etc...)

    dans le genre :

    <BOUCLE_test (maisons terrains){id_rubrique}{par ville} >[...]

    Merci d’avance, sachant que je ne suis pas une bête en php :-(

    Marc

    Répondre à ce message

  • Tederic Merger

    Bonjour,
    J’ai utilisé « La Fabrique » pour créer des objets éditoriaux, et ça marche ! Merci et bravo !
    Je l’ai probablement fait d’une manière maladroite (j’ai créé plusieurs plugins, presque un par objet éditorial), mais j’étais tellement pressé d’obtenir quelque chose...
    J’apprécie particulièrement la génération d’un système de liens entre objets éditoriaux.
    Par contre, je voulais aussi pouvoir générer des liens entre différentes fiches du même objet éditorial, et ça ne marche pas :
    J’affiche un objet A, j’utilise le formulaire « lier à objet A » ; finalement, le lien n’est pas créé.
    Mais je vais faire sans pour l’instant.
    Une question : j’ai utilisé la version 1.18.1 du plugin La Fabrique, est-il important de passer à la version 1.20.1 que je vois proposée aujourd’hui ?
    Bravo aussi pour SPIP 3 et justement son concept d’objet éditorial !

    Répondre à ce message

  • 2

    Bonjour, j’utilise pour la première fois ce plugin et je suis en train de rencontrer quelques problèmes : est-ils possible de gérer les relations entre les nouveaux objets éditoriaux ?
    J’ai créé 5 nouveaux objets (A, B, C, D, E), mais je ne n’arrive pas à gérer les liaisons entre eux, même si j’ai activé « creer une table de liens » et coché l’objet A (et les articles*) pour ajouter « un formulaire d’édition de liens sur les objets » dans l’onglet des objets B, C, D et E,.

    Dans la page de gestion d’un ecrire/ ?exec=A&id_A=X, je peux tranquillement associer un mot clé à l’objet X, mais je ne peux pas ajouter une liaison avec B, C, D, E, tandis que dans la page de gestion d’un article (*) je peux ajouter soi des mots-clés soi des liaisons avec B, C, D, E

    SPIP 3.0.16 [21266]
    Fabrique 1.20.1 - essai
    PHP 5.3.28
    MySQL 5.1.56

    Que faire ?
    Merci en avance

    • J’ai résolu le problème du post précédent en ajoutant la possibilité de lier les objets B, C, D et E même aux articles : je crois qu’il s’agissait d’un petit bug.
      Maintenant je suis en train de modifier le squelette rubrique.html pour faire en sorte d’afficher tous les objets du type A et je voudrais me servir de B, C, D et E comme critères conditionnels pour filtrer la liste.
      Est-il possible d’utiliser comme critères conditionnels les objets créés avec le plugin la fabrique ?

      J’ai essayé avec le code qui suit

      mais malheureusement j’obtiens seulement l’erreur « critère inconnu »

      Au contraire avec le code

      il n’y a pas d’erreur et j’obtiens la liste des objets A auxquels j’ai attribué le mot que je mets comme paramètre dans l’url (ex. spip.php ?rubrique1&id_mot=1).

    • J’ai résolu le problème du post précédent en ajoutant la possibilité de lier les objets B, C, D et E même aux articles : je crois qu’il s’agissait d’un petit bug.
      Maintenant je suis en train de modifier le squelette rubrique.html pour faire en sorte d’afficher tous les objets du type A et je voudrais me servir de B, C, D et E comme critères conditionnels pour filtrer la liste.
      Est-il possible d’utiliser comme critères conditionnels les objets créés avec le plugin la fabrique ?

      J’ai essayé avec le code qui suit
      < BOUCLE _liste_A (A) id_rubrique  !par id_A id_B ? id_C ? id_D ? id_E ?>
      mais malheureusement j’obtiens seulement l’erreur « critère inconnu »

      Au contraire avec le code
      < BOUCLE _liste_A (A) id_rubrique  !par id_A id_mot ?>
      il n’y a pas d’erreur et j’obtiens la liste des objets A auxquels j’ai attribué le mot que je mets comme paramètre dans l’url (ex. spip.php ?rubrique1&id_mot=1).

    Répondre à ce message

  • 2

    Re bonjour,

    Concernant la pondération de la recherche dans un champ, on peut aller de 1 à 10. Mais ça marche dans quel sens ? Si je veux donner l’importance la plus haute à un champ pour la recherche, je dois mettre 1 ou 10 ?

    Merci d’avance de vos explications !

    Répondre à ce message

  • 2

    Bonjour,

    Pour un site bien spécifique un doit créer un plugin qui doit se connecter et créer des tables pour les objets dans une base externe. J’ai connecter cette base depuis « Maintenance => Maintenance technique ». Elle y apparait bien et j’ai créer à la main une table avec quelques champs que j’ai rempli et j’arrive à bien boucler dessus... De plus, cette table apparaît avec le nom du fichier de connexion créé par spip au moment ou il possible de créer la structure d’un table pour un objet à partir d’une table existante... Par contre, j’ai essayer de créer une table en mettant comme nom de la table sql « maconnexiontableexterne:manouvelletable », mais cela ne semble pas marcher... Pas d’erreur lors de la création du plugin, mais page blanche suite à son activation...

    Est ce normal ? Est ce possible de créer une table dans un table externe grace à ce plugin ? Si oui, comment faire ?

    Merci d’avance de votre aide !

    • Il n’est pas possible actuellement de déclarer un objet éditorial à SPIP appartenant à une table externe. Ce plugin ne pourra pas vraiment t’aider à cela.

    • OK ! Merci pour la réponse.
      Je vais donc dans un premier temps créer les tables dans la base de spip avant d’en copier la structure dans l’autre base... En parallèle, je chercherais comment il faut modifier le code généré par La Fabrique pour créer directement les tables dans la base voulue...

    Répondre à ce message

  • 4

    Hello !

    Apparemment, y’a encore le soucis de l’enregistrement des champs datetime/date avec La Fabrique ? Sur Google Chrome je n’arrive même pas à modifier la saisie avec le datepicker, tandis que sur Firefox j’arrive à l’éditer mais j’ai l’erreur

    Une erreur technique a empêché l’enregistrement correct du champ 'date_debut'.

    Y’a bien le bout de code qu’il faut dans la fonction verifier du formulaire pour normaliser le tout...

    ++

    • Il te manque probablement le plugin « verifier » ?

    • Et non, verifier est bien présent.

    • Effectivement, il y a un problème si...
      1- tu utilises Chrome ;
      2- dans fonctions avancées -> Norme HTML à suivre, tu as coché « Permettre le HTML5 »

      ....auquel cas le champ de saisie de la date est de type=date (en HTML 4 il sera type=text) et Chrome surcharge automatiquement avec un un calendrier de son cru. Il y a alors un conflit.

      Solution #1
      En repassant à Fonctions avancées -> Norme HTML à suivre -> Se limiter au HTML4 sur le site public et en vidant le cache, cela remarche de nouveau.

      Solution #2
      surcharger le fichier saisies/date.html dans le plugin Saisies. Mais bon...

    • Je crois avoir trouvé mieux. Dans le fichier editer_suffixe_plugin.html ajouter la ligne suivante :

      <div class='formulaire_spip formulaire_editer ....'>
      .....
      </div>
      <script>
      $(function(){
      	$('input[type="date"]').prop('type','text');
      });
      </script>

    Répondre à ce message

  • 4

    Bonjour et merci pour ce plugin qui semble prometteur !

    Je suis confronté à un problème : j’ai une installation spip avec un préfixe « machin_ » sur mes tables (exemple « machin_articles ». Lors de la création d’un nouvel objet « livres » avec comme nom de table « livres », le formulaire de mon objet apparait bien dans l’admin de mon spip.

    Le problème c’est que lors d’un ajout dans cette table, il me dit que l’ajout a échoué car il ne trouve pas la table « machin_livres ». Effectivement, ma table est déclarée comme « livres » dans mon plugin et non « »machin_livres".

    De même si je modifie mon plugin en modifiant le nom de ma table « livres » en « machin_livres », (je le desinstalle et réinstalle) et que je tente à nouveau un ajout, l’insertion échoue à nouveau car il cherche cette fois la table « machin_machin_livres ». Cette fois-ci, il me double le préfixe de mes tables ...

    De plus, si je modifie dans ma BDD son nom en « machin_machin_livres » (comme le voudrait la requête d’insertion), la table est alors trouvée, l’insertion fonctionne, mais mon enregistrement n’apparait pas dans la liste des livres ... Il est donc bien présent en BDD mais n’est pas affiché.

    Merci pour votre aide.

    • Il n’y a normalement rien à faire. Que le préfixe soit ’spip_’ (par défaut) ou ’machin_’, les déclarations dans le plugin sont les mêmes. La table doit avoir un nom ’spip_livres’ et c’est ensuite SPIP qui adapte la requête comme il faut. Peut être que tu as nommé la table ’livres’ au lieu de ’spip_livres’ tout simplement ?

      Lorsque tu installes le plugin, la table créée devrait alors s’appeler ’machin_livres’. Est-ce le cas ?

    • En fait si je dis au plugin de créer un table « livres », il me crée dans la BDD une table « livres », sans préfixes donc. En revanche lorsque je cherche à interragir avec l’objet créé avec mon nouveau plugin il cherche une table « monpréfixe_livres » qui n’existe donc pas en BDD.

      Si je crée dans mon plugin la table « monpréfixe_livres », il crée en bdd une table « »monpréfixe_livres« mais il cherche à interroger (d’après les messages d’erreurs SPIP) une table s’appelant »« monpréfixe_monpréfixe_livres », qui n’existe pas non plus.

      As tu une idée d’ou ca pourrait venir ?

    • Reprenons…

      Dans l’édition de ton objet éditorial « Livres », dans la Fabrique, tu as une partie « Table » dans laquelle est un champ « Nom de la table SQL » avec écrit « Par exemple « spip_choses » ».

      Il te faut ici renseigner « spip_livres ». Est-ce bien ce que tu as fait ?

    • Merci Mathieu pour ton aide, le problème était là.

      Je pensais que la nouvelle table créée dans la BDD devait avoir le même préfixe que les autres tables de mon spip. Je pensais que l’exemple « spip_choses » signifiait qu’il fallait appeler ma table « machin_choses ».

      Le préfixe « spip_ » est donc obligatoire pour toutes les tables des nouveaux objets créés.

      Je vais pouvoir exploiter à fond toutes les possibilités de ce plugin :)

    Répondre à ce message

  • 15
    David Mich

    Bonsoir, super heureux de ce plugin que j’utilise depuis un certain temps, Bravo à Matthieu !

    Mais j’ai un petit soucis avec la saisie de checkbox.

    Dans la configuration du champ concerné de La Fabrique, je mets :
    -  Checkbox pour le type de saisie. OK.
    -  datas=[(#ARRAYcle1,valeur1,cle2,valeur2)] pour l’option. OK.

    Mais que dois je mettre dans la Définition SQL. La je bloque (j’ai essayé des varchar, des tex NOT NULL, et autres mais rien à faire. Impossible d’enregistrer le formulaire après avec juste ce champ en checkbox défini.

    Y a t’il une doc autre que je n’aurais pas trouvé pour choisir les bonne définitions SQL en fonction du type de saisie ?

    Cordialement.

    • Ce n’est pas un problème de structure des données SQL (varchar ou text va très bien). C’est un problème de traitement du formulaire. On ne peut enregistrer dans une colonne SQL une donnée tabulaire. Ici, une liste de choix est une donnée tabulaire. Il faut donc « sérialiser » la donnée, la « linéariser », c’est à dire stocker sous forme de chaîne, d’une manière ou d’une autre ce tableau. Par exemple stocker « cle1,cle2 » ou « cle1|cle2 » ou encore « a:2{s:4{cle1}s:4{cle2}} ».

      En général, pour ces cas là, c’est la virgule qui est utilisée. C’est à dire que dans la partie « traiter » du formulaire, avant l’appel à la fonction d’enregistrement des données soumises par l’utilisateur, il faut modifier la saisie de celui ci pour le champ chekbox. par exemple avec :

      set_request('champ', implode(",", _request('champ')));

      On prend le champ tabulaire saisi avec _request, on l’implose en chaîne séparé par une virgule, et on le restocke dans la saisie d’origine (ce qui la modifie).

      Voilou.

    • David Mich

      Génialissime ! Super, j’ai essayé, j’ai réussi, de nouvelles perspectives s’ouvrent à moi ... Et quelle rapidité pour nous aider ! La Fabrique est magique, elle permet effectivement de renseigner de nouveaux objets éditoriaux, mais pas seulement, il y a une multitude d’applications possibles en détournant l’objectif initial, et l’intérêt d’utiliser SPIP devient évident et grandiose ...

      J’espère que dans les évolutions futures de LAFABRIQUE vous ne supprimerez pas la partie expérimentale « Scripts à exécuter » car elle me semble essentielle pour tout amateur de ce plugin.

    • Heu, on est pas toujours aussi rapides :)

      Pour infos, peux tu expliquer à quoi te sers la partie « Scripts à exécuter » ? Et des exemples si tu as ?

    • David Mich

      Bonjour, je me servais des scripts à exécuter par exemple pour corriger un truc qui me gêne un peu : le peuplement d’une base qui se fait dans le répertoire maître de lafabrique auto.

      foreach(array(
      ’importer_spip_sc_competences.php’,
      ’importer_spip_sc_domaines.php’,
      ’importer_spip_sc_domaines_liens.php’,
      ’importer_spip_sc_items.php’,
      ) as $f)
      copy($destination_plugin. ’../’ . $f, $destination_plugin . ’base/’.$f) ;

      Je fais un peu différemment maintenant, en modifiant les maj dans le fichier administrations.php mais je vais revenir à cette méthode qui me permet d’avoir le répertoire du plugin complet avec les bases à peupler dans /base. En effet, les plugins que je crée avec la fabrique sont destinés à 3 sites, cela me simplifie la vie, un petit peu.

      include_spip(’../importer_spip_sc_competences’) ;
      $maj[’create’][] = array(’importer_spip_sc_competences’) ;

      En effet, je teste souvent peut-être trop l’affichage et la saisie des résultats, alors pour éviter de saisir trop souvent des exemples, je peuple les tables au moment de la création du plugin.

    • Hum… en fait en général je les copie dans base du plugin créé, puis j’utilise le Futilitaire pour réimporter à chaque création via la fabrique du plugin les fichiers que j’avais ajouté dans base/

      http://zone.spip.org/trac/spip-zone/browser/_plugins_/fabrique/trunk/inc/futilitaire.php

      C’est expliqué là http://marcimat.magraine.net/Integrer-une-table-existante-dans-361 .
      Y a eu quelques améliorations du Futilitaire depuis, pour simplifier l’écriture de l’ajout de ligne dans le code source généré. Faut regarder le code source du Futilitaire qui est bien documenté.

      MM.

    • David Mich

      Merci pour cette info, je vais me pencher dessus. A priori, si tu les copies dans base, tu passes par ftp pour la copie, non ? Pour ce qui est de ton exemple avec futilitaire ( (http://marcimat.magraine.net/Integrer-une-table-existante-dans-361), tu n’exclues pas non plus d’utiliser Les scripts à exécuter :

      include_once($destination_ancien_plugin . ’fabrique_geoniche_post_creation.php’) ;
      fabrique_geoniche_post_creation($data, $destination_plugin, $destination_ancien_plugin) ;

      Le code de Futilitaire est effectivement bien documenté et je vais voir ce que je peux en faire, l’idée n’est pas de conserver les scripts à exécuter une fois le plugin prêt pour le déploiement, juste pour me faciliter la vie au moment de la conception.

      Bonne journée.

    • Bonjour,

      J’ai le même problème que Mich, mais j’ai moins de bagage technique que lui. Donc quand je lis : « set_request(’champ’, implode(",", _request(’champ’))) ; » qui semble être la solution à toutes les réponses .... je suis perdu. Je suppose que ça doit être qu’une partie du code, à modifier en fonction. J’utilise la fabrique depuis quelques temps et là ça coince beaucoup.

      je dois mettre ce type de code où dans Le plugin de Lafabrique ?, ( très bien au passage, même pour une bille comme moi ), j’ai regardé par-ci et par-là sur le net pour essayer tant bien que mal de comprendre mais , je séche complètement.

      merci, bonne soirée

    • Bonjour, tu dois mettre ce code dans un fichier php qui se trouve dans le répertoire :

      plugins\fabrique_auto\NOMDETONPLUGIN\formulaires\editer_NOMDETONOBJETEDITORIAL.php

      La fonction dans laquelle tu dois mettre le code est :

      « function formulaires_editer_NOMDETONOBJETEDITORIAL_traiter_dist »

      et tu mets au début de cette fonction le fameux set_request.

      Pour exemple, avec un champ « niveauscolaire » de type checkbox, dans l’objet éditorial sc_connaissance voici ce que cela donne :

      function formulaires_editer_sc_connaissance_traiter_dist($id_sc_connaissance=’new’, $retour=’’, $associer_objet=’’, $lier_trad=0, $config_fonc=’’, $row=array(), $hidden=’’)
      //MOFIFICATION, MERCI MATTHIEU
      set_request(’niveauscolaire’, implode(« , », _request(’niveauscolaire’))) ;

      $res = formulaires_editer_objet_traiter (’sc_connaissance’,$id_sc_connaissance,’’,$lier_trad,$retour,$config_fonc,$row,$hidden) ;

      // Un lien a prendre en compte ?
      if ($associer_objet AND $id_sc_connaissance = $res[’id_sc_connaissance’])
      list($objet, $id_objet) = explode(’|’, $associer_objet) ;

      if ($objet AND $id_objet AND autoriser(’modifier’, $objet, $id_objet))
      include_spip(’action/editer_liens’) ;
      objet_associer(array(’sc_connaissance’ => $id_sc_connaissance), array($objet => $id_objet)) ;
      if (isset($res[’redirect’]))
      $res[’redirect’] = parametre_url ($res[’redirect’], « id_lien_ajoute », $id_sc_connaissance, ’&’) ;



      return $res ;

      En espérant t’avoir aidé.

    • bonjour,
      merci pour cette réponse rapide et précise. ça fonctionne très bien. Je viens de finir le formulaire avec plus de 20 checkbox et je ne rencontre pas de problèmes dans l’immédiat. Merci beaucoup

    • Heureux d’avoir pu t’aider. Bonne Fabrique.

      PS : tu peux aussi personnaliser les champ en te penchant sur les champs extras du plugin saisie et aller plus loin dans les champs de type checkbox. Il faudra toujours utiliser le set_request mais tu pourras éviter d’avoir à lister les couples clés/variables dans la Fabrique, et même automatiser tes listes déroulantes ou listes de checkbox en fonction de valeurs dans ta base. Mieux encore, et là je dis encore bravo à Matthieu Marcillaud, tu peux avoir les champs saisies créés par LaFabrique, en cochant la bonne case, et utiliser un objet éditorial dans un autre objet éditorial.

      Cordialement.

    • bonjour !!
      un truc dont je m’attendais pas, c’est que spip ne fait pas de recherches dans les fiches que les utilisateurs créeront avec le plugin ! Après moultes recherches, je suis tombés sur le plugin « fulltext ». Malheureusement la base ne doit pas comprendre plus de 16 champs. Donc j’ai effectivement splitté ma base pour avoir plusieurs objets éditoriaux - je vais tester -.
      En tout cas, effectivement le plugin est bien bien pensé pour être souple et efficace :)

      A+

    • Spipmalion

      Attention si vous copiez-collez la ligne suivante il faudra remplacer les apostrophes :
      set_request(’niveauscolaire’, implode(« , », _request(’niveauscolaire’))) ;

      Ce code permet de résoudre un problème avec par exemple un champ selecteur_article (la Fabrique), mais il reste ceci :

      Warning : md5() expects parameter 1 to be string, array given in ecrire\inc\editer.php on line 355

    • Il faut bien copier la ligne avec les apostrophes, en tout cas cela marche.

      Par contre, ton premier champ doit être avec des guillemets, ce qui n’est pas le cas, ce ne sont pas les bons caractères guillemets pour php... qui entoure la virgule de séparation des champs ....

    • Spipmalion

      C’est bien ce que je précise pour les futurs lecteurs, le copier/coller du message de Mich http://contrib.spip.net/La-Fabrique#forum471715 ne fonctionnera pas si on ne change pas les apostrophes pour mettre des bons guillemets.

      Il y a toujours le problème Warning : md5() expects parameter 1 to be string, array given in ecrire\inc\editer.php on line 355
      avec les champs de la Fabrique malgré le implode qui règle le problème pour l’enregistrement des champs.

    • Spipmalion

      Ni ça « ni ça ’ ne fonctionne, ça oui mais je crois que c’est modifié quand on valide le post : ’

      Voici une proposition de code à améliorer : http://spip.pastebin.fr/32666

      Pourquoi ne rajouterait-on pas directement dans le code du plugin la Fabrique la génération de ce code, avec :

      if(is_array(...)) ... implode

      Puisque de toutes façons les array ne passent pas ?

    Répondre à ce message

  • 1
    Spipmalion

    Bonjour,

    En créant un objet éditorial avec un champ sélection_article, j’obtiens cette erreur lors de la validation du formulaire du type « Créer un nouveau chat ». Même chose avec sélection_rubrique

    PHP Warning : addslashes() expects parameter 1 to be string, array given in /home/www/www.site.com/ecrire/req/mysql.php on line 1186, referer : http://www.site.com/ecrire/?exec=home_bloc_edit&new=oui&id_home_bloc=0&picker=1&id_r=2

    J’ai mis une définition SQL « text » pour ces champs

    Répondre à ce message

  • 5

    Bonjour,

    J’ai enfin l’occasion de tester la fabrique, après qu’on m’en ait maintes fois parlé.
    Le hic, c’est que lorsque je veux ajouter un objet éditorial, un message s’affiche « Site en travaux Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de votre compréhension. »

    Je suis en SPIP 3.0.11, avec la Fabrique 1.18.1.
    J’ai fait des tests avec une base SQLite, une base MySQL, sur des sites fonctionnant en local (sur Wamp et easyphp) - Version PHP 5.3.27 - MySQL 5.6.11

    Quelqu’un aurait-il une piste à creuser ?

    Merci d’avance,
    Sandrine

    • Bonjour et bonne année à tous,

      Je réponds à ce message car je me trouve dans la même situation, après avoir créé mon plugin via La Fabrique, en tentant d’ajouter un objet éditorial je me retrouve avec un vilain « Site en travaux »

      Et chaque fois que je reviens sur le plugin La Fabrique (j’ai aussi tenté de désactiver/réactiver le plugin) j’obtiens cette erreur.

      Je suis sous SPIP 3.0.13
      J’utilise WAMP :
      Version de Apache : 2.2.22
      Version de PHP : 5.3.13
      Version de MySQL : 5.5.24

      Merci d’avance pour votre aide.

      Freed

    • bonjour,
      pour moi aussi la fonction ajouter un objet éditorial ne fonctionne pas sous spip 3013 et wamp mysql 5612 php 5412 apache 24 ;4 mais je n’ai pas page en travaux mais ça mouline et rien ne vient.

      cordialement alain cousin

    • Et peut être un système Unix/Linux pour son serveur (appel de exec(’diff’) en PHP) [1]

      Je crois que l’article précise que laFabrique peut ne pas fonctionner avec un WAMP apparemment, de mémoire ça à toujours été précisé par l’auteur.

      Vos messages le confirme donc plus ou moins.

    • Bonjour

      Merci pour cette précision. Effectivement, ça semble se confirmer...
      N’ayant pas de compétences techniques très avancées, je n’avais pas tilté sur cette remarque.

      J’avais finalement contourné le problème en installant la fabrique sur un site en ligne (que j’utilise pour des tests) pour créer les objets éditoriaux dont j’avais besoin. Ensuite, il me suffisait de récupérer le plugin généré par FTP pour l’installer sur mon site local.

      Bonne journée,
      Sandrine

    • bonjour, merci pour vos commentaires, j’ai essayé comme Sandrine sur mon hébergeur nuxit mais cela n’a pas fonctionné, donc j’ai installé un linux ubuntu avec apache mysql et tout le reste et la cela fonctionne à merveille. qu’elle pluglins merveilleux il m’aide énormément à la compréhension du php merci aux créateurs.
      merci à tous cordialement alain cousin.

    Répondre à ce message

  • 3

    Bonjour. Est-il possible d’ajouter un champs input de type file depuis l’interface de saisie de la fabrique ou bien est-il nécessaire de modifier manuellement les fichiers dans le répertoire formulaires ?
    Merci.

    • Bonjour,

      Il ne me semble pas encore possible d’ajouter de champs de ce type dans la fabrique en voyant ceci : http://zone.spip.org/trac/spip-zone/browser/_plugins_/saisies/saisies

      Il faut le faire à la mano…

    • Je corrige un peu ce que j’ai dit, ou du moins précise.

      Dans la mécanique de SPIP, l’ajout de fichiers (images, documents, etc.) à des objets éditoriaux se fait par l’intermédiaire des documents joints, implémentés en natif.
      Donc, il suffirait dans votre configuration d’activer les documents joints sur votre nouvel objet.

    • Merci Teddy. Oui j’avais pensé à cela mais je me suis finalement inspiré du mécanisme de médiathèque pour lier des vignettes à des documents.

    Répondre à ce message

  • 3

    Bonjour,

    Est-il possible de déclarer de nouvelles saisies pour quelles soient reconnues par La Fabrique lorsqu’on crée un nouvel objet éditorial ?

    Un exemple concret : je désire ajouter un select issu du plugin Pays ISO 3166-1. Au lieu de le faire à la min après avoir créé les fichiers de mon plugin, je voudrais que la Fabrique le fasse tout comme il faut.

    cf. http://zone.spip.org/trac/spip-zone/browser/_plugins_/fabrique/trunk/formulaires/fabriquer_plugin.html#L93

    • Hello

      Pourquoi ne pas mettre la saisies dans le plugins pays et ensuite l’utiliser depuis ton plugins ?
      Tout le monde en profiterais car je doute que cela est possible via la fabrique.

    • Justement Pierre, c’est le but.

      Le plugin Pays v3 va offrir de nouvelles saisies. Je voudrais que ces nouvelles saisies puissent être faire parti de la datalist de la Fabrique.
      (Les 2 nouvelles saisies en question vont permettre de sélectionner le Pays et de récupérer soit le #CODE_ALPHA3, soit le #CODE_NUM du pays.)

      Pour le cas ici de la Fabrique, c’est leur accès lorsqu’on construit un nouvel objet éditorial.

      Remarque

      Tout à fait par hasard, hier en mettant à jour le plugin Réglements, j’ai mis « factures » dans le « Type de saisies » et La Fabrique n’a pas bronchée. Elle a ajouté tout ce qu’il fallait et tout et tout.
      (cf. ici : http://zone.spip.org/trac/spip-zone/changeset/79290/_plugins_/reglements/trunk/formulaires/editer_reglement.html )
      Il faudrait peut-être documenté cet aspect. ;-)

      La Fabrique, c’est magique !

    • Oui je fais cela pour mes développement.
      La fabrique prend tout type de saisies en compte mais faut pas faire de faute de frappe car tout passe ;)

      Pour moi dans la data list on devrait liste tout les objets non ?

    Répondre à ce message

  • Super plugin !
    Merci beaucoup.

    J’aurais juste une question ?
    J’aimerai créer un champ hidden. Pas de soucis mais j’aimerais lui passer une value=id_auteur dans les options de saisies coté Fabrique, j’ai essayé avec #ID_AUTEUR, id_auteur, #SESSIONid_auteur rien à faire, je n’arrive pas à avoir l’id de l’auteur dans mon formulaire, la balise input hidden est bien là mais mon champ value est vide ??
    Pouvez-vous m’indiquer la méthode ?
    Merci

    Répondre à ce message

  • 2
    Christian

    Bonjour,

    j’ai une intérrogation concernant la gestion des langues dans un site multi-lingue.

    Le nouvel objet éditorial que j’ai créé avec la Fabrique tient bien compte de la langue par défaut du site. Si je change la langue par défaut, les multi de mon nouvel objet s’adaptent.

    En revanche les multi ne tiennent pas compte du contexte de langue de l’objet lui-même ou de la rubrique. Ils restent dans la langue par défaut.

    Est-ce que vous savez où je peux trouver la noisette qui gère ça pour tout SPIP pour que je puisse rajouter pour nouvel objet ou avez vous une autre piste ?

    Merci pour votre aide !

    Christian

    • David Mich

      Je reviens sur ce poste pour compléter la réponse de Matthieu.

      set_request(’champ’, implode(« , », _request(’champ’))) ;

      Marche très bien à une exception près ! En effet, si on ajoute des valeurs à la liste multiple ou dans mon cas à une suite de checkbox, cela marche. Si après, on décide de TOUS les enlever, aïe.

      J’ai donc modifier lègèrement le code :

      $testme = trim(implode(’ ’, _request(’champ’))) ;
      if (strlen($testme) == 0)set_request(’champ’, ’’) ;
      else
      set_request(’champ’, implode(« , », _request(’champ’))) ;

      en fait, apparemment, le champ n’est plus envoyé vers la base s’il est vide, et donc, dans la base, on garde les anciennes valeurs.

    • bonjour,

      merci encore pour ce petit bout de code qui me permet de sortir d’un gros souci que je venais de constater ... oui je sais .. que maintenant ....

      je vais finir par mettre une spéciale dédicace dans le plugin :)

    Répondre à ce message

  • 3

    Bonjour,
    Tout d’abord merci pour ce plugin qui ouvre beaucoup de perspectives.
    Pour ma part, je ne suis pas experte du tout en bases de données et je rame. Voici ma problématique : je voudrait réutiliser dans une base SPIP des tables générées dans une base joomla.
    J’ai intégré dans ma base SPIP les tables joomla qui m’intéressent et je voudrais maintenant créer un nouvel objet à partir d’une de ces tables.
    Je suis la procédure décrite dans la video pas à pas mais à chaque fois, au moment d’afficher le formulaire de l’objet dans l’espace privé j’ai 5 ou 6 erreurs de squelettes. Le formulaire n’est pas créé, j’ai juste la mention « aucun objet ».
    J’ai essayé autrement en connectant ma base Joomla moulinée par Joomla2spip à ma base SPIP : idem.
    Je me doute que je passe à coté de quelque chose et qu’il faudrait que je prenne des cours de SQL mais j’ai espoir qu’il y a peut-être une explication simple à mon problème ?
    Déjà est-ce que ce que j’essaye de faire est possible ?
    J’aimerais bien avoir quelques avis éclairés.... Merci si vous pouvez m’aider !

    • Bonjour, je pense que tu devrais te pencher sur les champs extras, dans le plugins « saisies » et créer ton propre traitement du champ personnel qui fait référence à tes données personnelles (de Joomla) de ta base.

      Tu devras modifier ou créer une boucle sur tes données qui se trouvent dans ta table personnelle (exemple « joomlaexemple »), par exemple

      < BOUCLE_maboucle (JOOMLAEXEMPLE) >
      ...

      Les fichiers à copier et à modifier se trouvent dans le répertoire « saisies » du plugins « saisies ».

      Ce n’est pas une mince affaire pour qui ne l’a jamais fait, mais il existe de nombreux tutoriels sur internet pour faire cela. Plutôt que de chercher des informations sur LaFabrique, cherchez plutôt sur le plugin saisies ou les champs extras personnalisés.

    • Bonjour Mich,
      Merci beaucoup pour ce conseil. J’avais pensé aux champs extra à un moment mais je me suis plus focalisée sur La fabrique après. Je vais essayer ce que tu dis et je reviendrai donner des nouvelles !
      Vraiment merci de ton aide !

    • J’ai pas mal avancé... Finalement, ce sont bien de nouveaux objets éditoriaux qui répondent à mon besoin. Un objet « candidature » et un objet « offre d’emploi » .
      J’ai réussi à les créer dans la fabrique et je peux enregistrer de nouvelles offres et de nouvelles candidatures. Mais j’ai un problème : je ne parviens pas à peupler mes tables. J’ai suivi la procédure (fichier d’import dans Base, et insertion du code dans le fichier xx_administrations.php à partir de l’administration de La fabrique). ça fonctionne, j’ai un message qui m’informe que 5000 et quelques références ont été copiées et qu’il en reste quelques centaines mais à partir de là, ça tourne dans le vide.
      La manip ne va pas jusqu’au bout et tout se retrouve bloqué.
      J’ai essayé de limiter les imports à une centaine de références mais je ne dois pas mettre le code au bon endroit, ça ne marche pas.
      J’ai l’impression d’être tout près du but. Qu’est-ce que je loupe ? Est-ce un problème de réglage du timeout ?
      Merci de m’aider si vous avez une idée...

    Répondre à ce message

  • Bonsoir,

    Un petit message pour signaler un « bug ». Quand on ajoute un nouveau champ à un objet, puis sélectionne « fieldset », on est obligé de renseigner la définition SQL. Après cela, lors de la création dudit plugin, le fieldset est ajouté en tant que champ « classique » à la base de données.

    Ce qui en soit n’est pas normal.

    Le soucis déjà vient de l’interface. Si on choisit fieldset, on ne devrait pas avoir à renseigner le type de champs. L’interface devrait reconnaître la sélection du type de champs.
    De même à la création du plugin et la génération des fichiers du plugin. Il devrait reconnaître « fieldset » comme le fait Champs Extras. ;-)
    Voilà pour la théorie. Maintenant, faut qu’on passe à la pratique. :-D

    Répondre à ce message

  • Mathieu

    Je commence à utiliser la fabrique et même si je tatonne un peu, je voudrais vous féliciter pour ce plugin. C’est top ! Merci

    Répondre à ce message

  • 2

    Bonjour,
    merci pour l’outil qui est absolument ce qu’il me fallait.

    J’ai un souci avec des objets « simplement liés ».

    j’ai créé sans problème un objet éditorial « contacts » (id_contact-nom-prenom-etc)
    j’ai créé en plus on objet « adresses » qui est de la forme (id_adresse-id_contact-type-contenu)

    L’idée est que chaque contact a un nombre X d’adresses qui sont de type [mail, tel, mobile,etc..] avec le contenu adéquat.

    Comment gérer cela
    -  dans le formulaire de contact de l’espace privé
    -  dans la liste des « adresses » de l’espace privé (puisque adresse est un objet éditorial qui apparait....)

    -  je sais écrire le formulaire spécifique dans l’espace public puisque déjà fait sur une version en SPIP 2. Mais grâce à la Fabrique, cela va devenir de jolis formulaires CVT corrects alors que les miens faisaient de l’insertion « en dur » ce qui est ..... au moins dangereux.

    • Je me réponds à moi-même pour éviter que les admins perdent du temps....

      1° tous les problèmes de contact sont gérés par le plugin « Contacts & organisations » et par le plugin « Plugin Coordonnées » (Merci à Mathieu et à Cyril).

      2° PAR CONTRE. je souhaite rajouter un objet « action » (facile, la Fabrique sait rajouter des objets) mais que je voudrais lier aux « organisations ». Ca me parait un peu lourdingue de recopier le code de « Plugin Coordonnées », y-a-t’il une vraie méthode ?

      Merci beaucoup !
      Michel

    • ma question est trop spécifique....

      Après avoir vu la video de Marcimat jusqu’au bout, je sais lier de façon multiple les objets éditoriaux (ca fait, en gros, comme les mots clefs)

      Ce que je souhaiterait c’est lier un nouvel objet « action » à un object « organisation » (facile) MAIS de façon univoque (comme un article est lié à sa rubrique)...

      Y’a t-’il déjà une méthode ou es-ce impossible (à ce moment là, je triche en espace public en écrivant les formulaires, mais l’espace privé est tout dégueu...)

      Merci !

      Michel

    Répondre à ce message

  • 2

    bonjour,
    j’ai une erreur de squelette dans prive/squelettes/contenu/objet.html
    cette erreur est lié à la balise #BOITE_OUVRIR qui a cette forme là :
    [(#BOITE_OUVRIR[ ... ],simple fiche_objet)]

    Si je remplace les crochets par des accolades, l’erreur disparait.

    Je veux bien faire la modif mais ça me semble bizarre que cette erreur apparaisse que maintenant.

    Cordialement

    • Bonjour,

      Il n’y a pas de raison à cela. Peut être n’as tu pas défini le champ qui indique le calcul du titre de l’objet. Sinon, peux tu poster le code complet de la boite ouvrir (entre <cadre class=spip>...</cadre>) ici ?

      MM.

    • Merci Matthieu,
      c’est ça,
      j’ai oublié de définir le nom du champ.

      Merci pour ta réponse

    Répondre à ce message

  • Je repose ma question j’ai fait une mauvaise manip sur mon message précédent :

    Bonjour,

    J’ai crée un objet éditorial, je voudrai que dans la partie publique du site les utilisateurs puissent depublier ou mettre à la poubelle cet objet, pour ce faire je veux utiliser #BOUTON_ACTION et #URL_ACTION_AUTEUR mais je ne sais pas quoi utiliser comme paramètre pour pouvoir réaliser la depublication ds l’espace public
    ci dessous le code :
    [(#GETnb_file|==1| ?#BOUTON_ACTIONSupprimer,#URL_ACTION_AUTEURobjet_instituer,#ID_NOTE/poubelle,[(#SELF)],ajax,Note supprimée)]

    Merci de votre aide.

    Répondre à ce message

  • 4
    BOURDEAU Alain

    Bonjour,
    erreurs blocante :

    Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de votre compréhension.

    J’ai cette erreur dans l’étape : création d’un objet. jusqu’à cette étape la création du plugin est ’normale’.
    Ce même message est affiché lorsque je veux retourner dans fabrique. Je ne peut aller plus loin.

    Je suis en local ubuntu 12.04 64bits spip 3.0.8 20422 et fabrique 1.17.0 67099

    • BOURDEAU Alain

      Idem avec une mise à jours de fabrique 1.18.1 71828 et aprés avoir enlevé les traces de la version précédente.
      Une recharge de l’archive remets l’accés à la fabrique mais re plante dé l’ajout d’un objet éditorial.
      Autre indication si ça peut éclairer, la page privée est alors perturbée dans le haut de la page.

    • Ah je crois qu’on a déjà eu ce cas (pas corrigé) qui serait du à la présence dans config/ d’un fichier de connexion non valide (genre un ancien renommé en connect.old.php).

    • BOURDEAU Alain

      Bonjour,
      Je viens de ’trouver’ ce qui coince (un peut tardivement).
      Si dans /config, il existe des fichiers de déclaration complémentaires de tables du style : thelia_2.php , alors la fabrique perd ses billes pour la création des objets éditoriaux.

      Le plugin, explore-t-il ’trop’ de .php dans /config ?

      MErci bien

    • BOURDEAU Alain

      Je complète :
      Si j’ai convenablement regardé, il se pourrait que ce soit dans :
      V1.18.1/fabrique/formulaires/fabrique_plugin.php entre les lignes 737 et 762.
      Amicalement Alain

    Répondre à ce message

  • 2
    David Mich

    Bonjour, je trouve ce plugin super, il va me faire gagner un maximum de temps. Mais je rencontre quelques difficultés pour le peuplement de ma base au moment de la création de mon plugin.

    En effet, J’aimerais pouvoir peupler les bases créées au moment de l’installation du plugin avec des données (comme suggéré dans la vidéo, avec déjà 10 chats dans la base au moment de l’installation).
    J’ai trouvé dans le fichier /base/importer_spip_eist_sc_competences.php
    * include_spip(’base/importer_spip_eist_sc_competences’) ;
    * $maj[’create’][] = array(’importer_spip_eist_sc_competences’) ;

    La solution semble être là, sous mon nez mais je cale ....

    • David Mich

      Bonjour, je me répond puisque j’ai trouvé le truc ...

      Il fallait que je mette le code :
      include_spip(’base/importer_eist_sc_competences’) ;
      $maj[’create’][] = array(’importer_eist_sc_competences’) ;

      dans « Compléter $maj dans la fonction upgrade() » de la partie administration du plugin.

      J’en ai profité aussi pour changer le préfixe de la table dans le fichier puisque j’ai choisi comme préfixe de table pour spip « eist_ » et non le « spip_ » par défaut.

      Cela va me poser d’ailleurs des problèmes à venir car ce plugins est destiné à être diffusé pour les sites d’établissements scolaires et évidemment ils n’ont pas choisi « eist » comme préfixe. Je sais modifier le préfixe de la base spip, des tables pour remettre le préfixe par défaut « _spip » mais je n’ai pas réussi à intégrer le préfixe en cours dans la procédure d’installation du plugin. Résultat : si un webmaster souhaite utiliser mon plugin alors qu’il n’a pas choisi le préfixe de table par défaut, il ne peourra pas utiliser mon plugin conçu avec la fabrique. J’ai bien essayer de récupérer le préfixe ($prefix, etc ...) mais je cale.

    • Non non, laisse le nom de ta table avec ’spip_....’, c’est SPIP qui s’occupera ensuite de gérer le bon nommage par rapport à ton préfixe ensuite (lors des appels aux fonctions sql_*().

    Répondre à ce message

  • 4
    peetdu

    Avec SPIP 3.0.8 et la Fabrique 1.18.1 Je viens de créer un objet « Stages » et j’ai posé dans la partie publique le formulaire correspondant :

    #FORMULAIRE_EDITER_PROJET

    Tout marche bien sauf que à la validation de l’objet je voudrais récupérer id_stage mais il reste à 0.

    [id_stage] => 0

    J’ai essayé mon plugin sur 3 serveurs différents et j’ai toujours le même résultat.

    Qu’est ce que j’ai pu oublier ?

    • Aucune idée. Mais je ne comprends pas bien ce que tu veux faire non plus.

    • peetdu

      suite à la validation du formulaire, je voudrais donner la possibilité de joindre un document au stage enregistré.

      Pour cela j’utilise

      [(#ENV**{message_ok}|oui)
         #FORMULAIRE_JOINDRE_DOCUMENT{new,#ID_STAGE, stage}
      ]

      A la validation du formulaire, je récupère bien toutes les valeurs enregistrées en base de données sauf id_stage.

    • Ah, bah, si tu as (ou calcule) un id_stage dans le traiter() de ton formulaire, tu peux le faire renvoyer via set_request(’id_stage’, $id_stage) ; (dans le traiter), en déclarant également dans le charger() que ’id_stage’ doit être récupéré. Par exemple avec $valeurs[’id_stage’] = 0 ; (au chargement).

      Donc, en gros, à vue de nez un peu brouillon, ça ferait peut être un truc comme ça :

      function formulaire_xx_charger_dist() {
         // ...
         $valeurs['id_stage'] = 0;
         return $valeurs;
      }

      et

      function formulaire_xx_traiter_dist() {
         // ...
         $id_stage = ...;
         set_request('id_stage', $id_stage);
         return $res;
      }
    • peetdu

      Ok. Ça marche avec

      function formulaire_xx_charger_dist() {
         // ...
         $valeurs['id_stage'] = _request('id_stage');
         return $valeurs;
      }

      et

      function formulaire_xx_traiter_dist() {
             $id_stage = _request('id_stage');
      	if ($id_stage =='') {
      		$id_stage = 'new';
      	}
      
      	$res = formulaires_editer_objet_traiter('stage',$id_stage,...);
      
      	if (!$retour) {
      		set_request('id_stage',$res['id_stage']); 
      	}
      	return $res;

      Du coup je peux insérer la balise #FORMULAIRE_JOINDRE_DOCUMENT après validation
      du formulaire et surtout mes fichiers editer_stage.html et editer_stage.php
      sont utilisables aussi bien dans la partie publique du site que dans la partie back-office.

      Merci beaucoup (vraiment beaucoup ) !
      ps : et encore merci pour cette Fabrique qui je me rend compte sert également à faire pleins d’autre chose que des objets éditoriaux.

    Répondre à ce message

  • 2

    Salut,

    J’ai créé des objets éditoriaux avec la fabrique et j’aimerais pouvoir utiliser le forum de l’espace privé sur ceux-ci.
    Je n’ai rien trouvé dans les options de mon objet dans la fabrique, rien dans la configuration du site (comme pour les documents joints ou les mots clés), et une comparaison de squelette avec des objets pourvus du forum comme « article » ne m’a rien apporté non plus.
    Si quelqu’un a une idée de la façon dont ça se passe...
    Amicalement,
    Dorch

    • Malheureusement ce n’est pas encore prévu dans le plugin forum.

      Deux possibilités :

      MM.

    • Pour la première possibilité, je vais attendre d’être un peu plus aguerri sur l’élaboration des formulaires de configuration. A priori, il faut modifier le formulaire configurer_forums_prives en s’inspirant de ce qui se trouve dans le plugin mots pour la sélection des liaisons de mot vers les objets SQL, mais là, j’ai un peu de mal à suivre...

      J’opte donc pour la deuxième solution, maintenant que je sais quel pipeline utiliser : http://programmer3.spip.net/afficher_fiche_objet

      Merci Matthieu pour ta réponse rapide et tes explications claires et précises :)

    Répondre à ce message

  • 1

    Bonjour

    J’ai créé un plugin mais je veux modifier par des styles CSS. Comme je peux faire ?

    Meci

    • peetdu

      Tu veux modifier la partie publique ou privée ?

    Répondre à ce message

  • 3

    Bonjour
    le formulaire d’ajout de documents n’apparaît sur la page d’édition que lors de la création d’un nouvel objet (?exec=objet_edit&new=oui).
    Si on modifie l’objet, plus de formulaire (?exec=objet_edit&id_objet=x)
    (j’ai déjà eu ce problème sous spip 2 suite à une maj de Médiatheque)

    Quelque chose à faire ? d’autres personnes rencontrent le même problème ?

    ma config : SPIP 3.0.5 (Medias 2.7.34) Fabrique 1.18

    Dans l’attente de vous lire
    Bien cordialement

    Répondre à ce message

  • 2
    Edouard

    Serait-il possible qu’il y ai une limitation de caractères ?

    J’ai des problèmes pour changer le statut d’un objet si j’appel la table « realisations » mais pas si je les appels « projets ».

    Idem avec « publications » qui fonctionnent lorsque je l’appelle « publi »

    • Edouard

      c’est un vrai bug. ça me fait exactement la même chose avec un objet « partenaire »

      les tables sont identiques en terme de configuration. les mêmes fichiers sont créés etc...

    • Normalement non, vu qu’on a créé l’autre jour un « spip_projets_categories » bien plus long, sans problème. En tout cas si limitation il y a, ça ne vient pas de la fabrique en elle-meme.

    Répondre à ce message

  • Bonjour,
    merci infiniment pour ce plugin
    je tente de créer un plugin de gestion de références bibliographiques
    une fois le plugin créé, en validant le formulaire de création d’une entrée de ce nouvel objet, j’obtiens

    Erreur SQL 1146
    Table ’glostran.glostran_refs’ doesn’t exist
    SELECT * FROM glostran_refs LIMIT 1

    et

    Erreur SQL 1146
    Table ’glostran.glostran_glostran_refs’ doesn’t exist
    SELECT * FROM spip_glostran_refs WHERE id_glostran_ref=0

    et je ne sais comment agir.
    je ne connais pas les bases SQL suffisamment pour pouvoir intervenir.
    merci de votre aide,
    E

    mac OS 10.8.2, spip 0.0.5, LaFabrique 1.18, Saisies 1.3

    Répondre à ce message

  • Bonjour,
    je suis en train d’essayer « la fabrique » en suivant votre vidéo.

    je suis pas à pas vos indications (n’étant pas un spécialiste)- je tente désespérément de mettre le logo et j’obtiens le message suivant :

    « La sauvegarde de ../plugins/fabrique_auto/felins n’a pu être réalisée. Le plugin par précaution n’a pas été régénéré. La cause probable provient de droits insuffisants ce répertoire source pour le serveur. »

    je ne comprend pas
    l’image est bien importée mais les dossiers et les images au formats .png ne sont pas crées.
    et précédemment la création de fichier et dossier (felin, lang, fabrique_felins.php...) c’est bien passé

    pouvez-vous m’aider ?

    Répondre à ce message

  • 4

    Bonsoir,

    Je viens de commencer un plugin avec la Fabrique. Tout fonctionne bien, sauf une chose : j’utilise 2 champs date « date_prise_fonction » et « date_validite ». Les deux champs dates sont affichés dans le formulaire grace au widget « jquery.ui.datepicker ».

    Lors de la validation du formulaire, j’ai cette erreur :

    Une erreur technique a empêché l’enregistrement correct du champ ’date_prise_fonction’,’date_validite’.

    et voici le contenu de modifier.log (pareil pour spip.log)

    Sep 18 21:25:46 127.0.0.1 (pid 5680) :Pri:CRITIQUE : Erreur enregistrement en base offre/1 champs :array (
    ’date_prise_fonction’ =>
    array (
    ’post’ => ’14/01/1980’,
    ’save’ => ’0000-00-00’,
    ),
    ’date_validite’ =>
    array (
    ’post’ => ’21/03/1990’,
    ’save’ => ’0000-00-00’,
    ),
    )

    L’enregistrement est cependant bien créé, mais les champs date restent à la valeur « 0000-00-00 ». Jje ne sais pas du tout où intervenir.
    Une aide serait la bienvenue.

    D’avance, merci

    • J’ai le même problème : en sql, mon champ est de type « date » (aaaa-mm-jj) alors que la saisie « date » retourne un « datetime » (aaaa-mm-jj hh:mm:ss).

      Une première solution est de modifier la définition sql du champ pour le passer en datetime.

      Une autre solution rapide est de modifier la saisie « date » en « date_jour_mois_annee ». Dans ce cas, on a plus le « picker » de date mais les données s’enregistrent bien.

      Une troisième serait de modifier les fonctions vérifier et traiter pour qu’elles convertissent la date dans le bon format. Mais je ne l’ai pas encore mise en œuvre.

    • Voilà, personnellement, j’ai :

      -  modifié la définition SQL de mon champ date en :
      datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
      dans mon_plugin/base/mon_objet.php
      function items_declarer_tables_objets_sql.

      -  désinstallé et réinstallé le plugin (mais je n’avais pas de contenu hormis des tests, donc, dans le cas contraire, il vaut mieux modifier la définition du champ avec phpMyAdmin, et simplement désactiver/réactiver le plugin sans désinstaller, sans quoi, on perd le contenu de la table).

      -  laissé la saisie de type « date » dans mon formulaire : [(#SAISIE{date,...

      -  ajouté deux lignes dans la fonction « vérifier » de ce formulaire :
      mon_plugin/formulaires/editer_mon_objet.php

      function formulaires_editer_mon_objet_verifier_dist($id_mon_objet='new', $id_rubrique=0, $retour='', $associer_objet='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
      	include_spip('prive/formulaires/dater');
      	$date_edition = dater_recuperer_date_saisie(_request('date_edition'));
      	set_request('date_edition',sql_format_date($date_edition[0], $date_edition[1], $date_edition[2], '00', '00'));
      	return formulaires_editer_objet_verifier('mon_objet',$id_mon_objet, array('titre', 'date_edition'));
      }

      Donc, avant d’utiliser la fonction standard formulaires_editer_objet_verifier, je récupère la date saisie par l’utilisateur grâce à une fonction trouvée dans prive/formulaires/dater puis je la formate en sql grâce à sql_format_date et je la réinjecte parmi les données renvoyées par le formulaire avec set_request.

      À terme, je pense qu’il y a moyen :
      -  dans le plugin Saisies, d’améliorer la saisie « date » en lui ajoutant une option « format » qui modifie, en javascript, la saisie de l’utilisateur pour la conformer au format attendu (prive/formulaires/dater semble le faire, de même que la saisie date_jour_mois_annee d’une certaine manière) ;
      -  dans le core de spip, la fonction formulaires_editer_objet_verifier et/ou formulaires_editer_objet_traiter devrait aussi pouvoir formater une date conformément à la définition de l’objet (date ou datetime). Je crois que la fonction objet_instituer le fait pour le champ « date » standard dans ecrire/action/editer_objet.

      Une nième piste théorique par rapport à ce problème est de passer par le pipeline pre_insertion. Le plugin pourrait sans doute utiliser ce pipeline pour reformater la date avant son injection dans la base.

      Bon, je cause, je cause, mais je suis incapable de mettre tout ça en oeuvre :-)

    • La réponse est dans ce forum. à la date du 27 avril.

      @Aurélie : à ma connaissance le pipeline pre_insertion ne fonction qu’avec des champs indéxés.

    Répondre à ce message

  • 2
    Christian

    Bonjour,

    j’ai utilisé la fabrique pour créer un nouvel objet éditorial dont je rêvais depuis longtemps ! Génial ! La je viens de rencontrer un petit hic - dans mes champs texte j’affiche bien la barre d’outils SPIP qui se mettent comme il faut. En revanche les raccourcis ne sont pas interprétés - j’imagine que c’est un rien du tout à rajouter quelque part... Mais quoi et où ?

    Merci pour ton aide !

    Christian

    Répondre à ce message

  • 4

    Un grand merci pour ce plugin absolument fantastique !
    Un tout petit truc rigolo : le plugin peut prendre __connect.php pour le legitime connect.php ce qui peut induire de longues minutes, heures d incompréhension pour les p’tits gars qui ont l habitude de désactiver des fichiers en leurs collant une petite flopée de underscore devant....
    amicalement
    triton

    • Je n’ai pas compris. Il le prend comme légitime où ? pour montrer la liste des tables importables ? Mais dans ce cas, elles sont affichées après le connect.php normal non ?

    • Bonjour,
      si dans mon dossier config j ai un fichier __inc_connect.php avec une chaine de connexion incorrecte
      -  je vais dans « fabrique>restauration/réini... »
      -  je charge un fichier fabrique_plug.php
      >>> OK
      -  Je retourne dans l onglet : « Fabrique à plugins »
      j ai au niveau de l’affichage du div.contenu le message :
      « Site en travaux
      Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de votre compréhension. »
      je viens de refaire la manip, bon d’un autre coté, a part moi, qui se trimbale avec des fichiers __inc_connect.php incorrectes dans son config ?

      triton

    • ah tu veux dire que si y a un connecteur foireux, ça plante ?

      j’avais pas pensé à ça pour le coup.
      hum…

      à l’occasion je regarderai…

      MM.

    • voila ! un « connecteur foireux », j’avais pas le terme technique....
      et oui, ça ne doit pas concerner grand monde comme problème....
      par contre j avais une autre question plus importante... est il possible de faire des clés uniques composites avec la Fabrique ?
      ’key’ => array(
      « PRIMARY KEY » => « id_truc »,
      « UNIQUE machin_unique » => « id_machin,id_option_du_machin »
      Je continue à tester la fabrique
      merci bien
      triton

    Répondre à ce message

  • 3

    Bonjour,
    Sous spip 3.0.5
    j’obtiens systématiquement les messages d’erreur lors de la création d’un plugin avec des champs issus d’un ’peuplement’ depuis une table existante ou avec un champs int(11) :

    1 Erreur SQL 1064
    You have an error in your SQL syntax ; check the manual that corresponds to your MySQL server version for the right syntax to use near ’’ at line 4
    SELECT les_equipes.id_les_equipe, 0 as points, ’’ FROM spip_les_equipes AS les_equipes GROUP BY les_equipes.id_les_equipe ORDER BY 0+
    ../plugins/fabrique_auto/test/prive/objets/liste/les_equipes.html _liste_les_equipes
    4

    Celà est-il dù à une table vide ?
    si non, ou faut-il bricoler pour faire sauter cette erreur de ’fabrique’ ?

    Merci bien

    • En changeant le type de variable pour varchar(30) j’ai alors :

      SPIP 3.0.5 [19905] est un logiciel libre distribué sous licence GPL.
      + écran de sécurité 1.1.3

      Pour plus d’informations, voir le site http://www.spip.net/fr.
      2 Erreur(s) dans le squeletteNuméro message squelette boucle Ligne
      1 Filtre ,<:les_equipe:label_ :>,ajax}) non défini ../plugins/fabrique_auto/test/prive/objets/liste/les_equipes.html / 12
      2 Erreur SQL 1064
      You have an error in your SQL syntax ; check the manual that corresponds to your MySQL server version for the right syntax to use near ’’ at line 4
      SELECT les_equipes.id_les_equipe, 0 as points, ’’ FROM spip_les_equipes AS les_equipes GROUP BY les_equipes.id_les_equipe ORDER BY 0+
      ../plugins/fabrique_auto/test/prive/objets/liste/les_equipes.html

      C’est avec fabrique 1.17.0
      Que faire ?
      Merci bien

    • Tu as bien renseigné le nom du la colonne servant à calculer les titres dans la déclaration de ton objet ?

      Par ailleurs, il est possible qu’il puisse y avoir des bugs avec les noms de tables en plusieurs mots (comme spip_les_equipes) mais il me semblait avoir corrigé cela pourtant.

    • Merci pour ta réponse.
      Bingo,
      C’est effectivement l’erreur. oubli de déclarer dans l’onglet ’champs spéciaux’ le nom de la table pour le titre.
      Je vais pouvoir aller plus loin.
      Merci bien

    Répondre à ce message

  • 4

    Bonjour,

    Tout d’abord un grand merci à Matthieu pour la fabrique qui rend la création d’un objet éditorial perso carrément plus facile que s’il fallait le faire à la mimine.

    Et maintenant quelques questions :

    • Pourquoi est ce que le listing de mes objets éditoriaux dans la partie publique me retournent tous la même URL : monobjet0 ? Alors que dans ma boucle, l’ID est correcte (1,2,...6), la balise #URL_MONOBJET retourne systématiquement monobjet0 ce qui m’envoie bien évidement sur une page d’erreur 404.
    • Quelle méthode (quelles boucles ?) pour lister correctement mes articles objets éditoriaux perso triés par dates sur ma page publique ? Il me semble avoir trouvé un lien (forum ?) qui en parlait, mais cette méthode ne permettait pas de conserver la pagination. Une piste ?
    • Est il possible de lier un forum privé à un objet éditorial perso (de la même manière que pour les articles) ?
    • Et enfin une question qui a déjà été posée mais peut être qu’une solution a été trouvée depuis : toujours rien concernant l’ajout d’images (upload, portefolio...) dans un objet éditorial perso ?

    Merci pour votre aide :)

    • Et je m’auto réponds une première fois :

      • J’ai bêtement utilisé #URL_MESOBJETS à la place de #URL_MONOBJET. L’url fonctionne parfaitement, c’est le combo « mes yeux + mes doigts » qui ont un peu de mal.
    • Je continu mon petit bonhomme de chemin, et une nouvelle interrogation se pose :

      • Est il possible d’utiliser la balise #INTRODUCTION sur un objet éditorial perso ?

      A première vue je dirais que non, elle ne récupère rien de ce que j’ai pu écrire dans les champs de mon objet.
      Mais est il possible de reproduire ce principe ?
      Que sur la page de l’espace public listant mes objets, je puisse avoir les XX premiers caractères d’un champs de mon objet ou bien ce qui se situe entre les balises <intro> et </intro>.

      Merci !

    • Et c’est encore moi !

      Cette fois ci j’ai un soucis avec l’affichage de la liste de mes objets pour un auteur donné.
      La boucle <BOUCLE_fiches(CDPHDAFICHES) {id_auteur}> ne sort rien.

      Je suis allez voir en mode debug ce que cela donnait, et j’ai tilté la dessus :
      $command['from'] = array('cdphdafiches' => 'spip_cdphdafiches','L1' => 'spip_cdphdafiches_liens');.
      Alors que pour la même boucle sur « articles » j’ai :
      $command['from'] = array('articles' => 'spip_articles','L1' => 'spip_auteurs_liens');

      On voit bien que Spip ne va pas chercher au bon endroit.
      Est-ce parce que j’ai eu la bonne idée d’utiliser un champs ayant pour nom « liens » dans mon objet éditorial perso ?
      Ou bien est ce une option de la fabrique que j’aurais coché / décoché maladroitement ?

      Merci !

    • Pour le dernier commentaire, c’est que tu as des tables de liens sur les 2 objets (le tien et auteurs). Par défaut il lie au plus près. Cf. http://marcimat.magraine.net/SPIP-3-Documents-Mots qui est du même acabit pour contourner.

    Répondre à ce message

  • 1

    Bonjour,

    super plugin, bravo !
    cependant, j’ai un plugin avec deux tables, je peux ajouter ou modifer mais pas SUPPRIMER un enregistrement !!!!!
    j’ai pourtant mis les bonnes options !
    une idée ?

    merci d’avance

    • Comme dit sur spip-zone, c’est peut être un problème de nom d’autorisation qui est incorrect quelque part. Soit dans l’appel, soit dans la fonction elle même. Quel est le nom de l’exec (url de la page privé) qui te provoque ce bug ? quels sont les autorisations qui ont été créées dans ton plugin dans le fichier d’autorisation ?

    Répondre à ce message

  • 2

    Bonjour,

    Dans l’espace privé tous les contenus d’un objet sont affichés les uns sous les autres, et les labels ne sont pas distingués.
    Comment faut-il faire pour « styler » la page d’un objet dans l’espace privé ?

    • Bonjour,
      Le pages dans l’espace privé sont composées de plusieurs bouts de squelettes imbriqués, ce qui vous intéresse ici ce sont les listes d’objets.
      Il faut d’abord activer dans la Fabrique l’option qui va lui indiquer de générer le squelette correspondant, en l’absence de celui-ci dans votre plugin c’est un squelette générique qui est utilisé.
      Vous pourrez ensuite modifier le fichier, qui se trouvera dans <répertoire du plugin>/prive/objets/liste/<nom de l'objet>.html

    • tu peux créer aussi un fichier dans ton plugin prive/styles_prive_plugin_xx.html (je crois) et mettre tes styles dedans.

    Répondre à ce message

  • 1
    Alex Massoutier

    Bonjour,

    Tout d’abord félicitation pour ce plug_in ambitieux qui va permettre de bien personnaliser les sites.

    Env. de travail (spip 3.0.5, XP, Wamp) ; mon nouvel objet s’appelle tableau

    Je suis dans l’install d’un nouvel objet éditorial et je rencontre 2 difficultés :

    1) Via le menu édition je ne parviens pas à VOIR mes tableaux ?? SPIP me retourne que je n’ai pas d’autorisations. Or dans « tableau_autorisations.php » la fonction autoriser_tableaux_voir_dist () renvoie true simplement, soit sans conditions de statut ou autres... Pour tester j’ai modifier cette valeur par celle qui réserve la possibilité à l’administrateur (par ex. pour CREER tableau qui fonctionne) ; mais malgré désinstall et réactiv du plug-in je tombe toujours sur la page qui m’interdit de voir les tableaux...?? Une idée ?

    2) Malgré tout, dans mon squelette rubrique-X spécifique à la rubrique qui contient mes tableaux (les tableaux crées sont associés à une même rubrique), je devrais pouvoir voir les images associées à mes tableaux (j’ai essayé #LOGO_TABLEAU en utilisant un logo ; j’ai essayé de lier à cet objet la possibilité de mettre un PORTFOLIO mais une boucle DOCUMENT dans ma boucle TABLEAU (fonctionnelle puisque #TITRE s’affiche) elle-même dans ma boucle RUBRIQUE (évidemment...) n’affiche rien... ? Mystery...

    Voilà. SI quelqu’un peut m’éclairer sur ces difficultés c’est super.

    Merci.

    Alex

    • Salut Alex,

      A tout hasard, as tu vérifié dans ton dossier IMG la présence d’une image ayant pour nom « tableauonXX » ? Peut être est ce un soucis d’upload ?
      Et encore à tout hasard, vérifie bien que tu utilises le nom au singulier de ton objet éditorial. J’ai par mégarde utiliser le nom pluriel et j’ai cherché un bon moment avant de comprendre ma bêtise.

    Répondre à ce message

  • Tous simplement génial ! Ce plugin est une révolution pour moi, merci !

    Répondre à ce message

  • 1

    Une petite erreur dans la génération d’un objet éditorial qui à pour effet de ’planter’ le sélecteur de rubrique lorsque la profondeur des rubriques est égale ou supérieure à trois.

    Dans le fichier « fabrique/formulaires/editer_objet.html.html » il faut corriger la ligne 28

    \[<li class="editer editer_rubrique\[ (\#ENV**{erreurs/id_parent}|oui)erreur\]">

    par ...

    \[<li class="editer editer_parent\[ (\#ENV**{erreurs/id_parent}|oui)erreur\]">
    • Ouuups... je suis allé trop vite. Il y a bien un problème, mais ma « solution » ne le résoud que partiellement.
      Ce problème est manifestement connu puisque un ticket a été posté à ce propos.

      Désolé pour le bruit .

    Répondre à ce message

  • 1
    Stéphane Santon

    Bonjour,

    Quelle méthodologie pour gérer l’évolution du plugin créé par la Fabrique ?

    Par exemple, je crée le plugin de base, avec un objet éditorial, dans fabrique_auto.
    J’y ajoute quelques fichiers, modèles, noisettes, ...
    Faut-il les mettre dans le dossier d’origine du plugin ?
    Ensuite si je mets à jour le plugin par la fabrique (nouveaux champs, ...), que prend le backup, comment la nouvelle version du plugin prend-elle en compte mes fichiers ajoutés ?

    Merci

    • Salut !

      Perso je crée deux plugins (ou plus) :

      -  le plugin « core » : généré par la fabrique (avec la définition des objets et des formulaires associés).
      -  le plugin « interface » : pour les squelettes et compagnie... (qui nécessite le « core »)

      Donc quand je mets à jour le plugin « core », la Frabrique ne touche pas au plugin « interface » et donc n’efface rien...

      Tu peux aussi décliner en plusieurs autres plugins (pour un projet, j’avais aussi un plugin « autorisations » et un autre « peupler » pour remplir la base)

    Répondre à ce message

  • La Fabrique ne parvient pas à retrouver certains de ses propres squelettes lors de la création du plugin.
    Il en résulte évidemment la génération de fichiers vides dans le plugin.

    Environnement :
    -  Windows 7
    -  WAMP 2 (Apache 2.2.17, PHP 5.3.4, MySQL 5.1.53)

    Répondre à ce message

  • 2

    Bonjour,

    Des pistes pour enrichir le plugin et permettre l’ajouts de documents et images aux objets éditoriaux ?

    Je ne suis pas un fin connaisseurs de SPIP, mais nous serions intéressés, avec un collègue, à intégrer cette possibilité.

    Si on pouvais nous dire, en vrac, où fouiller (ou peut-être n’est-ce pas possible à cause de SAISIES qui ne propose pas ces champs ?)

    Merci

    • Gérér directement les documents en tant que champ de type file va être très compliqué. Saisies, ni Formidable ni Champs extras ne permettent d’ailleurs cela encore.

      Cela dit, pour lier des documents, il suffit d’activer ce nouveau type d’objet dans la configuration de la médiathèque. Ainsi, le choix de documents apparaît.

    • Merci. Ça répond partiellement au problème que nous souhaitons contourner :)

      Bonne journée !

    Répondre à ce message

  • Bonjour,
    Il doit y avoir un petit bug dans la création du fichier /prive/objets/liste/toto.html
    en effet il ajoute une virgule après #TRI :

    <th class='' scope='col'>[(#TRI{,<:toto:label_:>,ajax})]</th>

    ce qui provoque une petite erreur de squelette.
    Sans cette virgule, cela fonctionne.

    Cdt

    tofulm

    Répondre à ce message

  • / !\ attention : pour que cela fonctionne, il m’a fallu :
    -  rajouter un « s » à $interface
    -  remplacer les « ’ » par « ’ »

    $interface[’table_des_traitements’][’SLOGAN’][’plugins’] = _TRAITEMENT_RACCOURCIS ;

    Merci Matthieu pour ce super plugin

    Répondre à ce message

  • Bonjour,
    Je suis en train de faire des tests avec le plugin fabrique qui est très sympa, mais j’avais encore quelques questions sur les objets :

    • Est-il possible de les hiérarchiser ? (Je voudrais créer des listes de boutiques, est-il possible de traiter un objet « ville » comme une rubrique et un objet « boutique » comme un article ?
    • Si ce n’est pas possible, comment faire pour qu’une rubrique soit publiée si elle possède des objets « boutique » mais pas d’article ?
    • Je n’ai pas non plus réussi à associer un objet à un article : y-a-t’il une manipulation que j’aurai ratée ?

    Répondre à ce message

  • Pour reproduire le bug du logo
    A savoir que je suis sous php 5.4.4 et Firefox 14.0.1

    Tu choisis le nom du plug
    Tu mets une image comme logo
    Dans paquet, tu remplis les champs vide prefix et cat

    tu cliques sur « creer un plugin »

    Après, tu vides le cache de spip via l’espace privé et quand tu reviens dans la fabrique, le logo n’est plus visible !

    D’ailleurs, si tu cliques sur « creer un plugin » sans rien faire, tu as un messages avec « Des fichiers ont été supprimés lors de cette nouvelle création. » avec les nom des fichiers effacer.

    Répondre à ce message

  • 4

    Un grand merci et bravo !

    Petit bug de mon côté en spip 3.0.4 : impossible d’attribuer des logos à plus d’un objet éditorial (seul un objet éditorial accepte un logo, les autres ne sont pas pris en compte après upload)

    Le fait que le plugin ait un logo ou non ne change rien.

    Comme rien n’empêche d’ajouter ses logos à la main, ce n’est pas du tout bloquant ;)

    • Je ne reproduis pas. Qu’est-ce qui ne fonctionne pas plus précisément ?

    • De mon côté je peux le reproduire : je vais regarder du côté des logs avant de te prendre du temps.

    • Edouard

      J’ai le même bug.
      lorsqu’on fabrique deux objets d’un coup, et qu’on installe le plugin. un des deux objets n’a pas ses logos.

    • Je confirme un souci avec les logos.

      Je fais un plugin qui ajoute plusieurs objets éditoriaux et les logos se sont bien enregistrés jusqu’au 6e objet. Pour ce dernier, pas moyen d’enregistrer le logo : je choisis le chemin vers l’image et il ne semble pas pris en compte du tout (quelle que soit l’image, y compris identique aux logos déjà placés sur les 5 autres objets éditoriaux) : le champ est vidé et aucun logo n’est utilisé.

      Normalement c’était mon dernier objet éditorial, mais si j’en rajoute : pas moyen non plus de leur donner un logo...

    Répondre à ce message

  • 3

    Coucou !

    Je me joins aux autres pour dire combien La Fabrique est magnifique ! Ce plugin justifie à lui seul l’utilisation de SPIP 3 pour tous les nouveaux projets !

    J’ai malheureusement un petit souci. Je crée un objet éditorial nommé « parcours »... invariable, donc. Et c’est là le souci.

    Malgré le fait que j’aie renseigné le champ « Type de l’objet » dans « Tables>Spécificités de table hors norme » avec « parcours » (donc avec le « s ») et « Clé primaire » avec « id_parcours » (avec le « s » aussi), le plugin créé dysfonctionne un peu :

    L’URL des liens dans la partie privée pour l’objet « parcours » mènent vers : «  ?exec=parcours »... mais cette page conduit vers le message :

    Accès interdit
    Vous n’avez pas le droit d’accéder à la page parcours.

    Car les contenus générés par La Fabrique sont dans «  ?exec=parcour » (sans s !!!)

    (je ne suis pas sûr d’être clair...)

    De même, dans la partie publique, SPIP cherche « parcour.html » dans squelettes et non « parcours.html ».

    Bref, le mot invariable qui fini par un « s », c’est le drame ! ce serait bien si c’était le « Type de l’objet » qui était utilisé pour générer les URL (partie publique et privée)... Mais je ne sais pas trop où modifier La Fabrique pour ça !

    • Oui enfin là ce n’est pas spécialement la Fabrique le problème. Disons que SPIP n’est pas prévu, sans son fonctionnement automatique d’objet, pour que le type d’objet soit de même valeur que le nom de table, c’est à dire avoir ’parcours’ pour le type (singulier disons) et ’parcours’ pour l’objet (pluriel disons). Si tu veux absolument un truc comme ça (je ne sais pas si c’est possible simplement) il te faut créer des squelettes et des liens différents pour un des 2 états. Par exemple suffixer de _tous les squelettes d’affichage des listes (pluriel) et faire en sorte que les liens pointent dessus (certainement créer des fonctions de génération d’url privée pour ton objet).

      Il faut comprendre que le comportement de SPIP avec les objets automatiques c’est de faire une page exec=$objet pour afficher la liste des éléments tel que exec=choux et exec=$type pour afficher 1 des éléments tel que exec=chou . Évidemment que si les 2 ont la même valeur, ça lui pose souci :)

      Bref je n’ai pas là de solution évidente sans regarder, mais peut être en trouveras tu une et nous l’expliquera ?

    • Merci pour ta réponse rapide pleine d’explications...

      Le fonctionnement interne de SPIP devient de plus en plus complexe pour moi, alors je ne sais pas si c’est possible, mais quand le nom de l’objet éditorial est invariable, peut-on forcer l’espace privé à distinguer exec=lestrucs et exec=trucs (donc rajouter « les ») ? Est-ce envisageable ?

    • Bon... finalement j’ai bien mieux : faire l’inverse de ce que je proposais dans le message précédent... au lieu de demander à SPIP de mettre un "les" quand c’est au pluriel, je rajoute moi-même un "un_" quand c’est au singulier :

      Pour « Type de l’objet » j’indique à La Fabrique "un_parcours" au lieu de "parcours" et ça a l’air de marcher du tonnerre !

      • Côté Privé, SPIP ne s’emmêle plus les pinceaux et distingue bien " ?exec=parcours" pour la liste des objets de " ?exec=un_parcours" pour la page de l’objet
      • Coté Public, #URL_PARCOURS renvoie bien vers « ?page=un_parcours&id_parcours=XXX ».

      Donc pour l’instant tout va bien ! Face aux nom d’objets invariables, la solution semble être de préciser « un_ » ou « une_ » devant le « Type de l’objet ».

    Répondre à ce message

  • 1

    Bonjour,
    (Félicitations encore une fois pour ce beau joujou ;) )

    Petite question : je ne suis pas arrivé a trouver ou on peut sélectionner un traitement a appliquer au(x) champ(s) d’un nouvel objet qu’on créerait. Est-ce que je loupe qqch, ou il faut le(s) définir « a la main » dans le fichier /base/xxx.php ?

    Merci !

    • À la main (pour l’instant).

      Cf. une copie du texte que viens d’envoyer pour Édouard sur la liste user :

      En fait, SPIP applique des traitements par défaut à certains noms, tel que ’nom’, ’titre, ’texte’, ’descriptif’ ...

      En dehors de ces noms de champs là, il n’en applique pas : il faut les déclarer soi-même. (il faudrait peut être faire une option de plus pour chaque champ du coup dans la fabrique).

      Mais cela se passe donc par une modification du code créé par la fabrique en ajoutant dans le pipeline d’interface quelque chose comme :

      $interface[’table_des_traitements’][’SLOGAN’][’plugins’] = _TRAITEMENT_RACCOURCIS ;

      plugins étant là le nom de la table sans spip (spip_plugins), slogan le nom du champ.

      Il existe aussi _TRAITEMENT_TYPO et _TRAITEMENT_TYPO_SANS_NUMERO dans les traitements prédéfinis.

    Répondre à ce message

  • 3

    Dans les exemples donnés en commentaire dans le fichier xxx_administrations.php il y a une coquille me semble-t-il : ne serait-ce pas sql_alter au lieu de sql_alert (lignes 32 à 36) ?

    Répondre à ce message

  • 1
    pascal weber

    Superbe outil !

    Question subsidiaire : est-il possible de rendre un plugin créé via la Fabrique rétro-compatible avec spip 2.1 ? Est-ce possible en créant le fichier plugin.xml par exemple ou y a-t-il trop de « spip 3 inside » pour espérer le faire tourner en spip 2.1 ?

    En tout cas merci pour ce plugin (et j’en profite pour remettre une couche de merci pour tous tes tutoriels fabuleux ;-)

    • Heu non, c’est bien parce que SPIP 3.0 existe que la fabrique peut exister aussi !
      Autrement dit, c’est la technologie SPIP 3.0 qui permet en grande partie l’existence de cette Fabrique.

    Répondre à ce message

  • 12
    roger burton

    Bonjour,

    tout simplement exceptionnel.

    Je cherche le meilleur moyen pour faire deux choses :
    1/ via une table de jointure lier un objet X à un autre objet X. malheureusement dans le panneau de config « liaisons », cette possibilité n’existe pas (toutes les tables sont présentes sauf celle que l’on est en train de créer)
    2/ dans une liaison (table jointure) j’aimerais ajouter un champ qui spécifie la liaison (une colonne supplémentaire en plus de id_machin, type_objet, id_objet) ?

    Si vous avez une idée de départ ... merci d’avance.

    par ailleurs, ce serait bien que :
    1/ le code génère automatiquement un sélecteur pour un nouvel objet éditorial, sur le modèle du sélecteur saisies-auteurs
    2/ quand je fais une liaison de l’objet X à l’objet Y (créé dans le même plugin), et que je souhaite faire une liaison de Y vers l’objet X (seule possibilité automatique pour que la possibilité de liaison soit présente dans chaque l’interface de chaque objet), deux tables de jointure sont créées. il y a moyend e faire avec mais c’est pas optimum.

    Mais c’est vraiment terrible comme plugin !!!
    Mille mercis

    R. Burton

    • 1.1)
      Il me semble que j’avais amélioré ce point en permettant d’attraper un objet en cours de création. Sinon, la solution est le de : créer le premier objet, activer le plugin, revenir sur la fabrique, et continuer la création : le premier objet est alors sélectionnable car connu de SPIP.

      1.2)
      Il n’y a aucune API graphique pour gérer ces champs là. par contre l’API editer_liens en SPIP/php le gère. Il suffit d’ajouter le champs à la table de liaison (mais ce n’est pas à la Fabrique de gérer un cas particulier comme ça).

      2.1)
      La saisie auteurs du plugin saisie n’est vraiment adapté que s’il n’y a que peu d’auteurs. Je vois pas en quoi générer ce type de saisie serait bien.

      2.2)
      Les liaisons X -> Y et Y -> X ne sont pas les même choses. Le cas typique est :
      -  Attacher des mots sur des documents, ou des documents sur des mots clés. La table de liaison n’est pas la même. Par défaut dans la fabrique, si on demande de lier à autre chose, il prend la même table, et ne fais le truc que dans 1 sens, par exemple en mettant le formulaire X->Y sur l’objet X. Si tu veux la même liaison sur l’objet Y (X->Y) il faut l’ajouter à la main dans le pipeline après la construction du plugin.

    • rburton

      Bonjour,

      D’abord merci pour cette réponse rapide.

      1.1 hé bien non. Je crée l’objet x, je crée le plugin, je reviens sur la fabrique,
      objet x : dans l’onglet liaisons, l’objet x n’apparaît pas. (il apparaît évidemment dans les autres objets, y, z, etc.)

      1.2 le seul fait d’ajouter ledit champ à la table de lien ne suffit pas à spip pour en afficher l’input dans le formulaire d’édition de liens. Mais ok, c’est pas à la Fabrique :-). je chercherai.

      2.1 ok en plus mal conceptualisé de mon coté

      2.2 merci du tuyau.

      votre plugin est balèze ! vraiment.

      RB

    • Pardon, j’avais mal compris 1.1
      Effectivement je n’ai pas permis de lier un X dans un X. Quel est l’intérêt ? À part peut être créer des bugs ? Non, pour gérer une hierarchie (si c’est pour cela), il faut ajouter et gérer un champ « id_parent » dans la table X.

    • Sinon, pour le 2.1, c’est loin d’être sot de proposer en option une saisie utilisable. Juste que la saisie auteurs du plugin saisie est un sélect qui ne s’adapte pas au nombre d’élément contenu dans la table et ceci ne va pas.

      Une autre idée est de faire générer des pages publiques de contenu, au format Z. Enfin ça urge pas, et ptet que des bonnes volontés voudrons améliorer la Fabrique pour le faire, maintenant que le mécanisme de construction est à peu près en place.

    • rburton

      Bonjour,

      pour 1.1
      j’ai trouvé la parade via une table tierce, mieux adaptée en fait.

      pour 2.1 la question des saisies. Je vais plancher pour élaborer une nouvelle saisie pour des objets susceptibles d’être très nombreux. si ça marche, je proposerai un commit sur saisies, et ce sera donc j’imagine disponible automatiquement dans fabrique.

      pour toucher à La Fabrique, me faudra du temps pour démonter ce que vous avez mis si ingénieusement en place. Ce sera pour beaucoup plus tard :-)

      J’ai lu vos deux articles sur Marcimat. Excellent pour conserver ses propres modifs au plugin créé via Fabrique, tout en continuant à le développer via Fabrique.

      Grand merci
      RB

    • Bonjour,

      je suis dans le même cas que vous c’est à dire « dans une liaison (table jointure) j’aimerais ajouter un champ qui spécifie la liaison » (le point 1.2) et je sèche.

      Voici où j’en suis :
      1- dans base/mon_plugin.php, j’ai ajouté le nouveau champ
      "nouveau_champ"        => "VARCHAR(6) DEFAULT 'non' NOT NULL",
      ...et le champ est bien là dans la table de liaison.
      2- dans prive/objet/liste/mon_plugin_associer.html, j’ai ajouté le champ input

      ...mais rien n’est enregistré dans la base de données.

      J’ai également exploré l’API editer_liens, mais je ne vois pas où il serait pertinent d’ajouter la fonction objet_associer.

      Avez-vous trouvé une solution ?

    • Bonjour,

      non pas réussi ...
      J’ai contourné le problème en créant un objet via La Fabrique, qui s’appelle « relation », et qui contient au moins un (chez moi plusieurs) champs de spécif de la relation.
      Cet objet est liable aux objets que je veux mettre en relation.

      ça complexifie un peu les boucles, mais ça marche.

      Attention, les tables de jointures ne sont pas « symétriques » si deux objets peuvent être associés l’un à l’autre à partir de chacun d’entre eux, il y aura deux tables à traiter pour retourner toutes les liaisons.

      Par ailleurs, la table jointure (en tous cas les boucles qui la traitent en cas de jointure automatique et l’interface privée) e permettent pas qu’une instance d’un objet soit liée à une autre instance du même objet.

      Bon travail,
      RB

    • Bonjour,

      et merci pour ce retour d’expérience.

      J’ai fini par trouver une solution à mon problème de qualification de la relation.
      Il était assez simple : il s’agissait pour une fiche film de dire qui est le réalisateur et/ou le scénariste, sachant qu’une même personne peut avoir à son actif plusieurs films, un film peut avoir été co-écrit et co-réalisé par deux personnes différentes, etc.

      Mon plugin créé un objet éditorial « Créateurs » avec le nom et la bio de la personne,et depuis la fiche film (un article SPIP), on lie le ou les créateurs en précisant si ils sont réalisateur et/ou scénariste.

      1- j’ai rajouté les deux inputs correspondants dans le fichier mon_plugin/prive/objets/liste/mon_plugin_associer.html
      2- j’ai créé un fichier mon_plugin_options.php dans lequel j’ai placé une surcharge de la fonction formulaires_editer_liens_traiter() (qui se trouve à l’origine dans prive /formulaires/editer_liens.php)
      La surcharge consiste à faire un _request(’mon_champ’), puis à passer cette valeur dans la fonction objet_associer du paragraphe « if ($ajouter’) »

      Todo : j’ai encore à trouver une solution si le rédacteur utilise le bouton « Créer et associer un nouveau créateur »

      Un grand merci pour ce plugin qui m’à fait gagner un temps considérable

    • Intéressant.

      Je vais sûrement faire dans les jours à venir un plugin pour permettre de gérer un peu des rôles sur les liens, et permettre à la Fabrique de créer les squelettes avec.

      Je serais néanmoins intéressé pour voir comment ça rend chez toi et le code que tu as utilisé.

      Enfin je n’avais pas pensé à ce bouton « créer et associer... ». Peut être dans ce cas devrait il y avoir une valeur par défaut du rôle à la création.

    • Je mis le code et des copies d’écran sur http://www.akilia.net/Nouvel-objet-editorial-Createurs-pour-SPIP

      Pour le bouton « créer et associer... » une valeur par défaut est nécessaire mais pas suffisante. J’ai mis par défaut la valeur "non". Ainsi, à la création d’une relation, la personne n’est donc ni scénariste, ni réalisateur. Il faut alors « Retirer le créateur », le qualifier puis l’ajouter. Faut que je trouve qqc de mieux !

      autre todo : rendre obligatoire la sélection d’au moins une des deux cases à cocher. Un petit jQuery fera l’affaire je pense

    • Je reviens sur ce point.

      J’ai envoyé aujourd’hui une adaptation de la Fabrique pour gérer de façon expérimentale des « rôles » sur des tables de liaison.

      Ce que génère la Fabrique nécessite alors le plugin « Roles » qui est le résultat pour SPIP 3.0 de la discussion abordée là http://thread.gmane.org/gmane.comp.web.spip.devel/63059 et dont une documentation est présente là http://contrib.spip.net/ecrire/?exec=article&id_article=4199

      Dans le textarea prévu on peut par exemple saisir :

      participant,Participant
      organisateur,Organisateur
      formateur,Formateur

      Le premier de la liste étant celui qui sera le rôle par défaut. Tous les rôles sont alors permis sur les objets de liaison cochés. Évidement comme toujours avec la Fabrique, le code créé est une base de travail simple que vous devrez certainement adapter ensuite à votre gré.

    Répondre à ce message

  • 2

    bonjour,
    Je souhaite que seuls les auteurs (administrateurs, auteurs OU visiteurs) d’un objet donné puissent le voir côté public.
    Je suppose que ça se passe dans la fonction :

    function autoriser_monobjet_voir_dist($faire, $type, $id, $qui, $opt) {
            ???
    }

    mais que dois-je mettre pour vérifier que l’utilisateur connecté est auteur de l’objet ?

    J’ai bien pensé au plugin accès restreint mais mon nouvel objet éditorial n’est pas dans une rubrique. y a-t-il moyen de déclarer à acces restreint qu’il y a un autre type d’objet à prendre en compte en dehors de toute rubrique ?

    • Il faut récupérer les liens de la table spip_auteurs_liens avec ton objet, et comparer avec $qui['id'] de la personne connectée.

      Tu peux donc jouer avec la fonction de action/editer_liens (http://www.spip.net/fr_article5477.html) : objet_trouver_liens($objets_source,$objets_lies)

      Tu peux aussi regarder dans inc/autoriser, il doit y avoir des exemples également avec sql_select() peut être.

    • merci pour le tuyau
      sur le principe je vois vaguement mais concrètement je ne sais pas comment faire.
      cette fonction objet_trouver_liens($objets_source,$objets_lies) je ne vois pas comment ça marche ni où la placer.

      d’avance merci pour ton aide

    Répondre à ce message

  • Pierre-Philippe

    Félicitations pour ce plugin !
    Quel gain de temps !

    Répondre à ce message

  • 2

    Bonjour,
    soit une table avec 2 champs date : date_publication et date_echeance.
    afin de pouvoir utiliser le critère age relativement à date_echeance dans une boucle, j’ai choisi
    dans la fabrique : Champ SQL de date = date_echeance

    (
    Si j’ai bien suivi c’est ce qui fait que j’obtiens dans /base/monplugin.php :
    function kaye_declarer_tables_objets_sql($tables)
    ...
    $tables[’spip_matable’] = array(
    ...
    ’date’ => « date_publication »,
    ...
    C’est ça ? je demande car en réalité j’ai fais la modif à posterori et je veux être certain de n’avoir rien oublié
    )

    Petit problème : dans l’espace privé, la page d’affichage de l’objet exec=mon_objet&id_mon_objet=x
    j’obtiens un cadre DATE DE PUBLICATION EN LIGNE : XX-XX-XXXX
    qui affiche la date d’écheance et non pas la date de publication

    je comprend la logique du système mais ça génère quelque chose d’incohérent pour l’auteur de l’objet.

    y a t-il un moyen de corriger cela ?

    d’avance merci

    • je voulais écrire ’date’ => « date_echeance »,

    • Non, date gère à la fois le statut de publication ET le champ par défaut des criteres ages.
      Je t’invite à utiliser les mêmes critères suivi du nom du champ que tu veux (xx dans date_xx) : {age_echeance} {mois_echeance} etc. ou {age_relatif_echeance} {mois_relatif_echeance}, etc. ... .

    Répondre à ce message

  • 5

    Bonjour,
    Très intéressant ce plugin.
    Son utilisation ne me permet pas cependant de corriger un bug déjà rencontré lors de la création d’un plugin « en dur » :
    -  lorsque je permets l’ajout de document à un objet éditorial et que je crée un nouvel objet, j’arrive bien à « téléverser » un document sélectionné. Mais lorsque j’enregistre ce nouvel objet, le document n’est pas lié à l’objet. Dans la table documents-lien, l’id_objet est =-1...
    -  Si une fois l’objet crée je fais « ajouter un document », alors cela fonctionne.

    Il y a donc un problème pour les nouveaux objets, que l’on ne rencontre pas pour les nouveaux articles.
    Merci de votre aide

    Répondre à ce message

  • 1

    Encore deux questions :
    Quand on a fait un plugin avec la fabrique puis modifié ce plugin à posteriori (à la main), est-il possible d’éditer à nouveau le plugin dans la fabrique sans perdre les modifs faites à la main ?

    Soit plugin avec 2 objets, dans le formulaire de saisie du premier objet comment intégrer une liste déroulante de sélection des occurrences du second objet.
    Pour l’instant j’édite à posteriori et ajoute une boucle dans un select, mais je ne bénéficie pas du traitement de l’erreur comme avec les autres saisies ?
    Y a-t-il un moyen simple de faire un sélecteur d’objet ?

    D’avance merci

    PS : c’est extra la fabrique, je n’arrive pas à décrocher

    • 1) Non.
      2) Ça dépend. Entre autres du nombre d’éléments possible dans la saisie : trop, il faut un chargement ajax avec recherche par exemple, sinon, un select avec 10000 éléments, c’est pas pratique, et en plus ça rame.

      Je t’invite à lire ou relire http://marcimat.magraine.net/?article361

      Y est expliqué une façon de faire pour :

      • qu’après la création du plugin, la Fabrique modifie ses fichiers (je m’en servais donc pour remettre du code que j’avais modifié ultérieurement)
      • faire une saisie ville / insee

      MM.

    Répondre à ce message

  • 3

    Pour les rédacteurs et les admin restreints, le bouton de création d’un nouvel objet n’apparaît pas dans les outils rapides.
    Voici les autorisations générées :

    ...
    // bouton de menu
    function autoriser_devoirs_menu_dist($faire, $type, $id, $qui, $opts){
    	return true;
    } 
    // bouton d'outils rapides
    function autoriser_devoirscreer_menu_dist($faire, $type, $id, $qui, $opts){
    	return autoriser('creer', 'devoir', '', $qui, $opts);
    } 
    // creer
    function autoriser_devoir_creer_dist($faire, $type, $id, $qui, $opt) {
    	return in_array($qui['statut'], array('0minirezo', '1comite')); 
    }
    ...

    J’ai pensé qu’il manquait un _ entre devoirs et creer dans autoriser_devoirscreer_menu_dist, mais ça n’a rien changé.
    Une solution ?
    D’avance merci

    (ie 8, ff 11, fabrique 1.14)

    Répondre à ce message

  • 4
    vince_

    Salut à tous,
    Pour remonter une info qui pourra intéresser Matthieu, j’ai eu une erreur lorsque j’ai accédé pour la première fois à /ecrire/ ?exec=fabrique

    Erreur :
    Filtremb_strtoupper non défini
    Dans le fichier : ../plugins/fabrique/formulaires/fabriquer_plugin.html
    _tab_objets
    Ligne : 44

    Config SPIP 3.0.0-rc [19216]

    En espérant que ça puisse aider au dev.
    Bonne journée

    • vince_

      Re ;-)
      J’ai dorénavant cette erreur lorsque j’affiche /ecrire/ ?exec=fabrique.
      Pour avoir ce message jai tenté de créer un objet éditorial après création du plugin...
      Je précise que je suis bien en PHP 5.3 et base MySql

      Erreur :
      Fatal error : Call to undefined function mb_strtoupper() in /xxx/xxxxxxx/xxx/xxx/plugins/fabrique/fabrique_fonctions.php on line 535

      Bonne appétit tout le monde !

    • Bah écoute, je sais pas, cette fonction est dans le module PHP « mbstring » qui est logiquement dans PHP par défaut (http://www.php.net/manual/fr/mbstring.requirements.php)

    • vince_

      Merci pour ton suivi parfait ;-) Effectivement mbstring n’était pas installé par défaut sur une config « grand public ». Une fois installé tout roule.
      Si ce module php est vraiment important peux-tu indiquer la necessité d’installer ce module auparavant et/ou l’indiquer dans un message d’erreur ?
      Si ce module permet d’aller de l’avant ou est très important évitons de l’éviter... ;-) Je pense que ce module s’adressera à des personnes (dev ou « bidouilleurs » confirmés) qui sauront certainement l’installer ou vérifier qu’ils l’ont...

    Répondre à ce message

  • 4

    L’arrivée de spip 3 et la perspective de devoir reprendre mon plugin kaye m’angoissait heureusement la fabrique est arrivée. Merci Matthieu Marcillaud.

    J’ai un message d’erreur avec un champ date :
    « Une erreur technique a empêché l’enregistrement correct du champ ’date_echeance’. »
    Détails :
    -  Définition SQL : date NOT NULL DEFAULT ’0000-00-00’
    -  Type de saisie : date
    -  SPIP 3.0.0-rc
    -  La Fabrique 1.13.3
    -  mysql 5.1.40-0
    -  php 5.2.6

    Une idée ?

    Remarque : lorsque le message d’erreur s’affiche, on reste sur la page exec=objet_edit, pourtant les données sont postées. Le risque c’est que l’utilisateur poste x fois les données avant de s’apercevoir de quelque chose.

    Grand merci et bonne continuation

    • Je suppose que c’est un champ que tu as ajouté toi-même dans la liste des champs créés (c’est pas un date dans « champs spéciaux » donc.

      Il me semble que la saisie date ne modifie pas automatiquement ce qui est saisi pour le formater à ce qui est attendu par mysql (ie. ça envoie ’2012/12/04’ au lieu de ’2012-12-04’) ou un truc comme ça.

      Tu peux essayer déjà de passer non pas un date SQL, mais un ’datetime’ avec defaut ’0000-00-00 00:00:00’ mais a mon avis cela sera pareil.

      En fait, pour date, il va te falloir éditer à postériori le plugin, en utilisant le plugin « verifier » et en demandant une vérification de ce champ tout en le « normalisant ». Ça pourrait ressembler, dans ton verifier() du formulaire d’édition de l’objet à quelque chose comme ça :

      $erreurs = formulaires_editer_objet_verifier('chat',$id_chat, array('nom'));
      // verifier et changer en datetime sql la date envoyee
      $verifier = charger_fonction('verifier', 'inc');
      $champ = 'date'; 
      $normaliser = null;
      if ($erreur = $verifier(_request($champ), 'date', array('normaliser'=>'datetime'), $normaliser)) {
          $erreurs[$champ] = $erreur;
      // si une valeur de normalisation a ete transmis, la prendre.
      } elseif (!is_null($normaliser)) {
          set_request($champ, $normaliser);
      }
      return $erreurs;

      Cf. une utilisation dans champs extras http://zone.spip.org/trac/spip-zone/browser/_plugins_/champs_extras/core/trunk/cextras_pipelines.php#L200

      N’hésite pas à poster ici la solution que tu auras utilisé.

    • Et par ailleurs, tu dois pouvoir lire l’erreur SQL générée dans tmp/log/ prive_mysql.log ou prive_sqlite.log

    • Merci Matthieu, voici la solution que j’ai utilisée :
      j’ai installé le plugin vérifier, et j’ai édité (dans mon plugin) le fichier /formulaires/editer_truc.php
      Dans la fonction formulaires_editer_truc_verifier_dist
      j’ai remplacé return formulaires_editer_objet_verifier('truc',$id_truc, array('titre'));
      par

      $erreurs = formulaires_editer_objet_verifier('truc',$id_truc, array('titre'));
      // verifier et changer en datetime sql la date envoyee
      $verifier = charger_fonction('verifier', 'inc');
      $champ = 'date_echeance';
      $normaliser = null;
      if ($erreur = $verifier(_request($champ), 'date', array('normaliser'=>'datetime'), $normaliser)) {
      $erreurs[$champ] = $erreur;
      // si une valeur de normalisation a ete transmis, la prendre.
      } elseif (!is_null($normaliser)) {
      set_request($champ, $normaliser);
      }
      return $erreurs;

      Une automatisation par la fabrique ça serait super bien.

      Important : la définition sql doit être de la forme datetime NOT NULL DEFAULT ’0000-00-00 00:00:00’

      Autrement j’ai trouvé une autre solution (mais beaucoup moins satisfaisante) :
      j’ai copié le fichier /prive/formulaires/dateur/inc-dateur.html (de spip) vers /formulaires/dateur/inc-mondateur.html (de mon plugin). J’ai été obligé de renommer car la surcharge ne fonctionne pas. Dans ce fichier j’ai changé dateFormat : ’yy-mm-dd’

      J’ai ensuite édité mon fichier /formulaires/editer_truc.html en changeant le type de saisie date en input et en rajoutant la classe date

      [(#SAISIE{input, date_echeance,
      label=<:truc:label_date_echeance:>,
      class=date})]

      puis j’ai ajouté

      [(#INCLURE{fond=formulaires/dateur/inc-mondateur})]

      Ce n’est pas satisfaisant car il y a une surcharge et les utilisateurs voient la date (dans le champ de saisie) sous la forme 0000-00-00.

      Merci Matthieu

      PS : comment fait-on du « beau » code dans les commentaires ?

    • Pour du code (on a normalement des icones pour ça dans la barre d’icones au dessus du textarea, mais Cédric l’a désactivé suite à un bug sur contrib. J’ai pas réussi à reproduire, faudra que je me repenche dessus voir). Et donc, il faut insérer des :

      <cadre class='spip'>
      Pour du SPIP
      </cadre_>
      (sans le _ de fin !)
      
      <cadre class='php'>
      Pour du PHP
      </cadre_>
      
      et ainsi de suite.

    Répondre à ce message

  • 2

    Easyphp 5.3.8.0
    Firefox 11
    Windows 7 64 bit
    SPIP 3.0.0-rc [19299]

    J’ai créer un répertoire fabrique_auto dans le dossier plugins/auto
    J’ai voulu faire un test en faisant comme dans la vidéo dans un premier temps.
    J’ai rempli description et paquet comme dans la video, puis j’ai cliquer sur « creer un plugin », j’ai eu comme message :

    Warning : copy(../tmp/cache/fabrique/.backup/exports/fabrique_felins 2012-04-25 00:32:48.php) [function.copy] : failed to open stream : Invalid argument in C :\Program Files (x86)\EasyPHP-5.3.8.0\www\spipdev\plugins\auto\fabrique\v1.13.3\formulaires\fabriquer_plugin_actions.php on line 282

    Le plugin a été créé avec succès dans
    ../tmp/cache/fabrique/felins/

    Vous pouvez pour vous faciliter les tests créer un répertoire fabrique_auto accessible en écriture dans votre répertoire de plugins. Ainsi, les plugins créés seront aussitôt disponibles sur l’administration des plugins et activables.

    • Manifestement il y a plusieurs problèmes :
      1) il y a un caractère, peut être les « :» que Windows n’aime pas dans les copies. Enfin c’est étonnant. Si tu veux essayer de trouver la source du problème n’hésite pas.
      2) si tu as bien créé le répertoire fabrique_auto avec des droits d’accès suffisants pour le serveur, il n’aurait pas du le créer dans tmp/cache.

    • 1) - même pb systématique. si je trouve, je vous dis...
      2) - le dossier « fabrique_auto » est à créer dans plugins et non dans plugins/auto ;-)

    Répondre à ce message

  • 1

    Bonjour Matthieu,

    Vraiment génial ce plug-in ! Merci pour cette contribution qui donne à Spip des fonctionnalités très étendues et accessibles pour celles et ceux qui n’ont pas toujours la technique et/ou le temps pour pouvoir réaliser leurs idées.
    On a l’impression de changer de CMS tout en gardant la philosophie d’origine… quel plaisir :-)

    J’ai toutefois quelques difficultés avec ma config pour commencer à tester les possibilités (énormes) de la Fabrique :

    Visiblement la table correspondant à un nouvel objet éditorial ne se crée pas correctement.
    Mettons que cet objet soit « Chiens », la table « spip_chiens » n’est pas construite et le message d’erreur s’affiche au moment de valider l’enregistrement lorsque je suis dans le processus de création d’un nouveau « Chien » :

    Erreur SQL 1146
    Table ’test_spip_3a.spip_chiens’ doesn’t exist
    SELECT * FROM spip_chiens WHERE id_chien=0

    Config :
    -  Mac OS 10.6.2
    -  FF 11

    -  SPIP 3.0.0-rc
    -  La Fabrique 1.13.3

    -  PHP 5.3.2
    -  MySQL 5.1.44

    Marc

    • Résolu :
      J’avais tout simplement oublié de créer le fichier d’installation dans l’onglet Installation du Plugin qui contient la commande de création de la table.
      La Fabrique rendrait-elle ivre ? En tout cas, c’est un plaisir de la tester :-)

    Répondre à ce message

  • Mathieu ya pas à dire, tu cartonnes ! :-D

    Répondre à ce message

  • Prodigieux !
    C’est exactement ce qu’il fallait faire !

    Tout écrire à la main est en effet beaucoup trop long et laborieux et sujet à de trop longues heures de debug. En un mot, décourageant !
    Ce plugin est donc vraiment bienvenue. J’ai jeté rapidement un oeil à l’interface et ça va loin, et c’est bien fichu en plus (même si j’ai pas tout compris, mais ça viendra !!)
    Pour les nouveaux objets éditoriaux, on va enfin pouvoir se concentrer sur ce qu’on veut faire sans perdre trop de temps....

    Je pense que c’est un plugin qui devrait être porté bien haut par la communauté SPIP !
    et qui devrait suivre les versions afin de toujours générer un code « d’actualité ». Une version majeure, une fabrique, ou qqch dans l’idée.
    bref,

    Merci en tout cas et chapeau bas.
    Longue vie à cette fabrique :-)

    Julien

    Répondre à ce message

  • 2

    Bonjour
    Je viens de faire quelques essais en local sur windows xp wamp2.1

    et le répertoire dans plugin ne se crée pas :

    Warning : copy(../tmp/cache/fabrique/.backup/exports/fabrique_assur 2012-04-21 16:43:22.php) [function.copy] : failed to open stream : Invalid argument in C :\Users\jmb\Documents\Mes sites\assur\plugins\fabrique\formulaires\fabriquer_plugin_actions.php on line 282

    Pas pu voir fonctionner le ’diff’.

    Bravo pour cette réalisation et la démo en vidéo.

    • Est-ce que tu saurais me dire quel caractère Windows n’apprécie pas dans la fonction copie() là ?

      Tu n’as que cette erreur affichée ?

      MM.

    • Je n’ai que cette erreur, à l’affichage et dans les logs php.

      Je viens de faire l’essai avec juste le minimum pour la création et j’ai quand même le message d’erreur. Ca doit donc venir du contexte, l’espace entre mes et sites dans le chemin sur mon windows : C :\Users\jmb\Documents\Mes sites} ???

      PS : la réinitialisation et la restauration depuis le menu outils fonctionnent.

    Répondre à ce message

  • 1
    Pierre-Jean

    Retour(s) concernant des problèmes d’utilisation de certaines fonctions de Fabrique et plus particulièrement lors du clic sur les boutons de validation de ses formulaires :

    Contexte :
    -  SPIP 3 RC
    -  Fabrique 1.13.3
    -  GG Chrome 18 ou FF 11.0
    -  Win 7

    Maux constatés :
    -  aucune action suite au clic de validation pour pré-remplissage d’un objet à partir d’une table existante
    -  aucune action lors du clic sur le bouton « Créer le plugin »
    -  aucune action lors du clic sur le lien de « diff » entre l’enregistrement de deux version d’un plugin

    Guérir les maux :
    -  en utilisant ie 9.0.8 ces problèmes disparaissent

    En contrepartie, l’autocompletion des champs ne fonctionne plus sous ie.

    Pierre-Jean

    Répondre à ce message

  • j’ai decouvert l’info de fabrique sur la liste, et j’en aurais deja eu le besoin... mais l’article d’info etant cible plus dev je vais tenter un second article : cote utilisateur
    bravo et a suivre

    Répondre à ce message

  • 1

    Bonjour,

    pour information, sous Mac OS X 10.6.8, Mamp Pro 2.0.5, MySQL : 5.5.9 et PHP 5.2.17, cela fonctionne pil poil de ce que j’en ai testé rapidement.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom