SPIP-Contrib

SPIP-Contrib

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

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

Accueil > Administration et BDD > Suivre les versions de SPIP > Migration d’un squelette de SPIP2 vers SPIP3

Migration d’un squelette de SPIP2 vers SPIP3

3 mai 2012 – par JLuc – 22 commentaires

21 votes

Ainsi que sa numérotation l’indique, la version SPIP3 récemment sortie est une version majeure de SPIP, qui apporte de nombreuses et importantes fonctionnalités. Dans l’ensemble, l’équipe de SPIP s’est assuré que les sites fonctionnant avec SPIP2 fonctionnent également avec SPIP3.

-  Base de donnée : la mise à jour se fera sans encombre mais aussi, comme toujours, sans possibilité de revenir à SPIP2. Comme pour toute migration, il est donc recommandé de faire une sauvegarde de la base de donnée dans sa version SPIP2 avant de faire une migration de vos sites vers SPIP3, afin de vous ménager la possibilité de revenir à SPIP2.

-  Plugins : l’API ayant été modifiée, une modification du code des plugins est souvent requise pour SPIP3, soit pour simplement fonctionner, soit pour bénéficier des nouveaux apports de SPIP3. De nombreux plugins distribués par la zone sont d’emblée compatibles avec SPIP3 ou bénéficient d’une version adaptée pour SPIP3.
Si jamais vous avez réalisé vous même un plugin et que vous devez le porter en SPIP3, un bloc note a collecté un ensemble de points destinés à faciliter sa migration. Voyez l’article « Migration de Plugins de SPIP2 à SPIP3 » du Carnet SPIP. Au besoin, vous pouvez aussi demander de l’aide sur les listes ou IRC.

-  Squelettes : Les éléments du langage SPIP2 sont tous valable en SPIP3. Bien que très rarement rencontrées, il existe toutefois de petites incompatibilités dans certaines configurations de squelettes, qui nécessiteront donc une adaptation.

C’est sur ce dernier point : les rares incompatibilités du langage de squelette, que porte cet article.

Chaînes de langues déportées dans des plugins

Un grand nombre de fonctionnalités du noyau de SPIP sont désormais déportées dans des plugins, et avec elles les chaînes de langues qu’elles utilisent. En conséquence, pour y faire appel dans les squelettes, il faut les préfixer par le préfixe du plugin correspondant si vous les utilisez dans vos squelettes.

Par exemple, <:forum_texte:> doit pour SPIP3 être remplacé par <:forum:forum_texte:>.

A propos des chaines de langues, voyez la doc sur les nouveautés des chaînes de langues avec SPIP3.

Formulaire inscription

La balise #FORMULAIRE_INSCRIPTION n’est jamais totalement vide en SPIP3, même quand les inscriptions ne sont pas autorisées sur le site. En conséquence, elle ne pourra pas servir pour conditionner un affichage (par exemple [(#FORMULAIRE_INSCRIPTION) lien vers la page d'inscription] affichera toujours le lien).

A la place, il faut tester directement la configuration du site SPIP. Il y a 2 entrées pour cela :
-  accepter_visiteurs
-  accepter_inscriptions

Exemple :

  1. [(#CONFIG{accepter_visiteurs}|=={oui}|oui)
  2. <a href='#URL_PAGE{inscription_visiteurs}'>]

Télécharger

Critère id_parent

Cette boucle ne fonctionne avec spip3 pas de la même manière qu’avec SPIP2 :

  1. <BOUCLE_sousrubrique(RUBRIQUES){id_parent}>
  2. #ID_RUBRIQUE
  3. </BOUCLE_sousrubrique>

Télécharger

En effet, si il y a une boucle RUBRIQUES englobante, id_parent prend le #ID_RUBRIQUE de la boucle englobante et s’il n’y en pas, id_parent prend le #ENV{id_parent}, alors qu’en spip 2.1 id_parent prend #ENV{id_rubrique}.

En conséquence, avec SPIP3, il est désormais possible d’écrire {id_parent ?}{id_rubrique ?}.

Pour migrer une telle boucle, il faut par exemple appeler l’url avec un paramètre id_parent supplémentaire, ou adapter la boucle en mettant un critère supplémentaire {id_parent ?}{id_rubrique ?}

Dans certains cas, le critère suivant a son utilité pour remplacer {id_parent} en assurant la compatibilité d’un squelette entre versions SPIP2 et SPIP3 : {id_parent=#ENV{id_parent,#ENV{id_rubrique}}}.

Boucles FORUMS et ARTICLES imbriquées

Avec spip2, la table forum comporte plusieurs champs id_article, id_breve et id_rubrique qui permettent certaines boucles, elles doivent être adaptées pour fonctionner avec SPIP3 puisque ces champs ont été remplacés par 2 champs objet et id_objet ». Ces 2 champs permettent en effet de mettre des forums sur n’importe quel objet éditorial, que ce soit des mots, des documents ou tout autre objet créé par un plugin.

Par exemple, les emboitements suivants ne marchent plus :

  1. <BOUCLE_racine_forums_parents(FORUMS) {id_thread}>
  2. <BOUCLE_forum_suivant_article(ARTICLES) {id_article}>
  3. ...

ou :

  1. <BOUCLE_forums(FORUMS){0,1}>
  2. <BOUCLE_articles(ARTICLES){id_article}>
  3. #ID_ARTICLE
  4. </BOUCLE_articles>
  5. </BOUCLE_forums>

Télécharger

En SPIP3 on corrige en :

  1. <BOUCLE_forums(FORUMS){0,1}{objet=article}>
  2. <BOUCLE_articles(ARTICLES){id_article=#ID_OBJET}>
  3. #ID_ARTICLE
  4. </BOUCLE_articles>
  5. </BOUCLE_forums>

Télécharger

ou bien avec :

  1. <BOUCLE_forum_suivant_article(ARTICLES){id_article=#ID_OBJET}{si (#OBJET|=={article})}>
  2. etc...

Télécharger

Titres et rangs

#TITRE bénéficie désormais d’un traitement qui enlève automatiquement le n° qui préfixe éventuellement le contenu.

La plupart du temps, c’est bien ce comportement qu’on recherche, et il est donc inutile d’appeler le filtre supprimer_numero comme il le fallait avant. Si toutefois vous voulez afficher le titre avec son numéro, il faut enlever ce traitement, c’est à dire employer #TITRE*.

Cette différence de comportement par défaut peut avoir des conséquences sur des squelettes qui feraient des comparaisons dans un critère, car le traitement n’est par contre toujours pas appliqué sur le champ ’titre’ lorsqu’il figure en partie gauche d’un critère.

Par exemple :

  1. <BOUCLE_A(ARTICLES){id_article}>
  2. <BOUCLE_tri(ARTICLES){titre>#TITRE|recuperer_numero} >
  3. etc...

Télécharger

Cette boucle pour afficher les articles de rangs supérieurs au rang de l’article courant ne marchera plus puisque #TITRE ne renvoie plus de numéro. A la place, sous sqlite par exemple, il faut employer la balise avec étoile #TITRE*.

  1. <BOUCLE_A(ARTICLES){id_article}>
  2. <BOUCLE_tri(ARTICLES){titre>#TITRE*|recuperer_numero} >
  3. etc...

Télécharger

Modèles

Les modèles reçoivent maintenant l’environnement. Tous les paramètres de contextes, présents dans l’environnement d’appel ou explicitement passés en paramètre de l’appel, avec une priorité à ces derniers, sont à la fois accessibles par #VARIABLE et en #ENV{variable}. Des adaptations sont donc nécessaires dans certains modèles.

À titre d’exemple, un modèle inclus dans le corps de l’article 18 et donc noté : <mon_modele|> transmet 2 informations supplémentaires :

  1. #ENV{article18} =>
  2. #ENV{id_article} => 18

Télécharger

Dans le cas où l’appel du modèle inclue id_article comme paramètre (<mon_modele|id_article=2>) c’est bien cet id_article là (2) qui sera transmis quel que soit l’id de l’article dans lequel ce modèle est appelé (comportement : comme avant). C’est seulement lorsqu’on ne passe pas de paramètre explicite que le comportement sera différent, si le modèle fait appel :
-  au critère conditionnel {id_article?} dans une boucle
-  à un test sur [(#ID_ARTICLE) affichage si id_article]
puisque dans tous les cas #ID_ARTICLE ou #ENV{id_article} existera.

Pour corriger lorsque ce sera nécessaire, il est possible :
-  de changer de nom de paramètre pour enlever l’ambiguité
-  d’utiliser le fait que seuls les paramètres passés explicitement lors de l’appel du modèle sont accessibles par en plus par #ENV{arg/variable}, et pas les paramètres non explicites de contexte automatique.
Ainsi on pourra remplacer un critère conditionnel {article ?} par la combinaison de 2 critères [1] :

{id_article >= #ENV{args/id_article, 0}}
{id_article <= #ENV{args/id_article, 99999999}}

Balise #FOREACH

La balise #FOREACH disparait. A la place il faut utiliser une boucle itérateur DATA.

  1. <BOUCLE_for(DATA){source tableau,#LE_TABLEAU}>
  2. #CLE / #VALEUR
  3. </BOUCLE_for>

Télécharger

Si c’est juste pour afficher le contenu des tableaux #ENV ou #CONFIG, il est aussi possible d’utiliser :

  1. [<pre>(#ENV**|unserialize|print_r{1})</pre>]
  2. [<pre>(#CONFIG**|unserialize|print_r{1})</pre>]

Télécharger

Avec le plugin developpement on pourra plus simplement écrire :
[(#ENV|bel_env)] ou [(#CONFIG|bel_env)]

Boucles avec jointures et tables de liaison

1) Certaines jointures qui devaient être explicitées dans SPIP2 se font désormais automatiquement.

Exemple : jointure de spip_rubriques avec spip_mots. Le commit 90091 remplace la boucle SPIP2

  1. <BOUCLE_Exclure(RUBRIQUES mots){type_mot=_FondPage}{fusion mots.id_mot}>

par la boucle SPIP3

  1. <BOUCLE_Exclure(RUBRIQUES){type_mot=_FondPage}{fusion id_mot}>

2) Par ailleurs, les tables de liaisons sur les mots, qu’il y avait pour chaque objet spip spip_mots_articles, spip_mot_rubriques... ont toutes été fusionnées en spip_mots_liens.
Cela ne change rien pour les boucles simples qui ne mentionnent pas ces tables de liaison même si elles les utilisent ; mais il faut évidemment modifier les boucles complexes qui référencent explicitement ces tables.

Exemple : dans c90093, la boucle avec double jointure explicite, dont une sur mots_rubrique

  1. <BOUCLE_MemoGoodiesRubrique(ARTICLES rubriques mots_rubriques){titre_mot=Goodies}{doublons goodies}{age>=(#CONFIG{soyezcreateurs/age_goodies,30})} />

est remplacée par les 2 boucles imbriquées :

  1. <BOUCLE_MemoGoodiesRubrique(RUBRIQUES){titre_mot=Goodies}>
  2. <BOUCLE_Articles_Exclus(ARTICLES){id_rubrique}{doublons goodies}{age>=(#CONFIG{soyezcreateurs/age_goodies,30})}{lang} />
  3. </BOUCLE_MemoGoodiesRubrique>

Télécharger

P.-S.

Attention : Pour la mise à jour de sites complexes déjà en production, nous vous conseillons vivement de tester et éventuellement mettre au point votre site localement avec SPIP3 avant de faire la mise du site en production.

Notes

[1Voir « les modèles et leur contexte » dans la page des astuces longues

Dernière modification de cette page le 30 décembre 2015

Retour en haut de la page

Vos commentaires

  • Le 1er novembre 2012 à 21:29, par Mike En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

    Bonjour !

    Je travaille actuellement sur la migration de mon site en Spip 2.1 vers Spip 3. Il me reste malheureusement un problème que je n’arrive pas à résoudre. J’utilisais jusque là une partie d’un vieux plugin de recherche multicritères que je m’étais longtemps amusé à modifier et à adapter.

    Le fichier de résultat est entièrement en php mais depuis le passage à Spip 3, il ne me retourne plus aucun résultat. Je pense que suite aux modifications de la base sur la version 3, une requête SQL n’est plus bonne mais je n’ai pas réussi à savoir quelles étaient les changements.

    Si quelqu’un pouvait m’en dire plus ou jeter un œil à mon code, ce serait cool !

    <div class="result_rm">
    <?php
    ######################################################################
    # RECHERCHE MULTI-CRITERES - MODELE AFFICHAGE DES RESULTATS          #
    #                                                                    #
    # Auteurs : Dominique (Dom) Lepaisant                                #
    # www.tispip.etab.ac-caen.fr                         #
    # Stéphanie De Nadaï - www.webdesigneuse.net                         #
    #  - Fev 2008                                                        #
    #                                                                    #
    # Adaptation de la contrib de Paul Sanchez - www.Netdeveloppeur.com  #
    #                                                                    #
    # Ce programme est un logiciel libre distribue sous licence GNU/GPL. #
    # Pour plus de details voir le fichier COPYING.txt                   #
    ######################################################################


    $url = parse_url($_SERVER['QUERY_STRING']);

    $param = $url['path'];
    $pos = 0;
    $indice = 255;

    if (isset($_POST['idmot'])) {       
                   
            // Récupération du nombre de jours
            // pour periodicité de la rechercher
            $nbjour = 0;
            if (isset($_POST['nbjour'])){
                    $nbjour = $_POST['nbjour'];
            }
           
            // Récupération du nombre de jours
            // pour periodicité de la rechercher
            $idonlyrub = 0;
            if (isset($_POST['onlyrub'])) {
                    if (isset($_POST['rubnum'])) {       
                            $idonlyrub = $_POST['rubnum'];
                    }
            }
           
            // 1 = Tous les mots doivent être associés aux articles trouvés
            $allword = 0;
            if (isset($_POST['allword'])) {
                    $allword = 1;
            }

            $nbmot = count($_POST['idmot']);
                                   
            $sql = "SELECT id_mot, titre FROM spip_mots WHERE id_mot IN (". implode(",", $_POST['idmot']) .") GROUP BY id_mot,titre";
           
            $result = mysql_query($sql);
           
            $tabmot = "";
            $nbcol = 0;
            $nbcolmax = 4;
           
            if ($result) {
                   
                    $compt = 0;
                    while ($row = mysql_fetch_assoc($result)) {
                            extract($row);
                            $titre = supprimer_numero($titre);
                            if ($nbcol == $nbcolmax) {
                                    $nbcol = 0;
                            }
                           
                            $tabmot .= "<a class=\"spanblock txtgris\" href=\"./spip.php?page=mot&mots[]=$id_mot\"><span class=\"cle\">$titre</span></a>";
                            $nbcol += 1;
                    }
                    mysql_free_result($result);
            }
                           
            $sql = "SELECT COUNT(*) AS num, spip_articles.id_article, spip_rubriques.id_rubrique, spip_rubriques.titre AS titrerub ";
            $sql .= "FROM spip_articles INNER JOIN spip_rubriques ON spip_rubriques.id_rubrique = spip_articles.id_rubrique ";
            $sql .= "INNER JOIN spip_mots_articles ON spip_mots_articles.id_article = spip_articles.id_article ";
            $sql .= " WHERE spip_mots_articles.id_mot IN (". implode(",", $_POST['idmot']) .") ";
           
            $datedeb = date("Y-m-d", mktime(0, 0, 0, date("m"), (date("d") - $nbjour), date("Y")));
           
            if ($nbjour != 0) {
                    $sql .= "AND spip_articles.date >= '$datedeb' ";
            }
           
            if ($idonlyrub != 0) {
                            $sql .= "AND spip_rubriques.id_rubrique = $idonlyrub ";
            }
                           
            $sql .= "AND spip_articles.statut LIKE 'publie' GROUP BY spip_articles.id_article";
            if ($order == 1) {
                    $sql .= " ORDER BY spip_rubriques.id_rubrique, NUM DESC, spip_mots_articles.id_mot, spip_articles.date DESC";
            }
            else {       
                    $sql .= " ORDER BY NUM DESC, spip_mots_articles.id_mot, spip_rubriques.id_rubrique, spip_articles.date DESC";
            }
           
            $result = mysql_query($sql);
           
            //$nbart = mysql_num_rows($result);
            $nbart = 0;
           
            $resultataffiche = "";
            if ($result) {
                    $titrerub = supprimer_numero($titrerub);
                    $idrub = 0;
                    $listidmot2 = "";
                    $listidmotprec = "";
                   
                    while ($row = mysql_fetch_assoc($result)) {
                            extract($row);
                            if (($num != $nbmot) && ($allword == 1)) {
                                    break;
                            }
                           
                            if ($idrub != $id_rubrique) {
                                   
                                    if (($pospoint = strrpos($titrerub, ". ")) === FALSE) {
                                            $titrerub2=$titrerub;
                                    }
                                    else {
                                            if (is_numeric(substr($titrerub, 0, $pospoint)) == false)
                                                    $titrerub2 = $titrerub;
                                            else
                                                    $titrerub2 = substr($titrerub, $pospoint + 2);
                                    }
                           
                                    if ($order == 1) {
                                            $resultataffiche.= "<p><a href=\"./spip.php?rubrique$id_rubrique\">$titrerub2 :</a></p>";
                                    }
                            }
                           
                            $sql2 = "SELECT spip_articles.id_article AS artid,spip_articles.id_secteur AS id_secteur, spip_articles.titre AS titreart, spip_articles.date, spip_mots.id_mot ";
                            $sql2 .= ", spip_mots.titre AS titremot FROM spip_articles INNER JOIN spip_mots_articles ON spip_mots_articles.id_article = spip_articles.id_article ";
                            $sql2 .= "INNER JOIN spip_mots ON spip_mots.id_mot = spip_mots_articles.id_mot ";
                            $sql2 .= "WHERE spip_articles.id_article = $id_article AND spip_mots_articles.id_mot IN (". implode(",", $_POST['idmot']) .") AND statut LIKE 'publie' ";
                            $sql2 .= "ORDER BY spip_mots.id_mot";
                           
                            $result2 = mysql_query($sql2);
                           
                            if ($result2) {
                                    $listmot = "<h4 class=\"titremots_mc\">";
                                    $titrearticle = "";
                                    $dataffich = "";
                                    $idart = 0;
                                    while ($row2 = mysql_fetch_assoc($result2)) {
                                            extract($row2);
                                            $listidmot2 .= "$id_mot,";
                                            if ($idart == 0) {
                                                    $titrearticle = supprimer_numero($titreart);
                                                    if (!(($pospoint = strpos($titrearticle, '.')) === FALSE))  {
                                                            if (is_numeric(substr($titrearticle, 0, $pospoint)) == true)
                                                                    $titrearticle = substr($titrearticle, $pospoint + 2);
                                                                                                                   
                                                    }
                                                    if (!(($pospoint = strpos($titremot, '.')) === FALSE)) {
                                                            if (is_numeric(substr($titremot, 0, $pospoint)) == true)
                                                                    $titremot = substr($titremot, $pospoint + 2);
                                                           
                                                    }
                                                    $dataffich = date("d/m/Y", strtotime($date));
                                           
                                                    if ($order == 1) {
                                                            $nbart += 1;
                                                            $resultataffiche .= "<li>
                                                            <a class=\"titrearticle_mc\"  href=\"./spip.php?article$artid\">$titrearticle</a>
                                                            <small>$dataffich </small>";
                                                            $resultataffiche .= "$titremot";       
                                                    }
                                                   
                                                    $listmot .= "<a class=\"spanblock\" href=\"./spip.php?page=mot&mots[]=$id_mot\"><span class=\"cle\">$titremot</span></a>";
                                                    $idart = 1;
                                            }
                                            else {
                                                    $listmot .= "<a class=\"spanblock\" href=\"./spip.php?page=mot&mots[]=$id_mot\"><span class=\"cle\">$titremot</span></a>";
                                                    if ($order == 1) {
                                                            $resultataffiche .= "<a class=\"spanblock\" href=\"./spip.php?page=mot&mots[]=$id_mot\"><span class=\"cle\">$titremot</span></a>";               
                                                    }
                                            }
                                    }               
                                    if ($order == 1) {
                                            $resultataffiche .= "</li>";
                                    }
                                   
                                    mysql_free_result($result2);
                                   
                                    if ($order == 0) {
                                           
                                            if ($listidmot2 != $listmodidprec) {
                                                    $resultataffiche .= " $listmot </h4>";
                                            }
                                            $nbart += 1;
                                           
                                                            if ($id_secteur == 1) {$variable = 63; $secteur = "Ma classe";}
                                                            if ($id_secteur == 3) {$variable = 66; $secteur = "Applications";}
                                                            if ($id_secteur == 4) {$variable = 65; $secteur = "Tutoriels";}
                                                            if ($id_secteur == 5) {$variable = 64; $secteur = "Liens";}
                                                            $resultataffiche .= "
                                                            <li class=\"br\">
                                                            <a class=\"titrearticle_mc\" href=\"./spip.php?article$id_article\">$titrearticle</a>
                                                            <small>publié le : <em>$dataffich</em> , dans la rubrique <em><a href=\"./spip.php?rubrique$id_secteur&mots[]=$variable\">$secteur</a></em></small></li>";
                                                           
                                                           
                                                           
                                                                   
                                                                   
                                                            $listmodidprec = $listidmot2;
                                                            $listidmot2 = "";
                                    }
                            }
                            $idrub = $id_rubrique;
                    }
                   
                   
                    mysql_free_result($result);
                   
                    if($nbart == 0 || $nbart == 1)
                            $nbart_txt = "<:rmc:article_trouve:>";
                    else
                            $nbart_txt = "<:rmc:articles_trouves:>";
                           
                    echo "<div class=\"contre-encart\">";
                   
                   
                   
                    echo "<p class=\"mots_mc\"><span class=\"spanblock \">Mots séléctionnés : </span><br />".substr($tabmot, 0)." </p>";
                    if($nbart == 0 )
                            $nbart_txt = "Aucun article ne correspond à votre recherche";
                    else
                    if($nbart == 1 )
                            $nbart_txt = " article correspond à votre recherche";
                    else
                            $nbart_txt = "articles correspondent à votre recherche";
                   
                    if($nbart == 0 )
                    echo "
                           
                            <p class=\"mots_mc\"> $nbart_txt
                            <br />                       
                            <a href=\"#SELF\">Nouvelle recherche</a></p>";
                    else       
                    echo "
                                    <p class=\"mots_mc\"> $nbart $nbart_txt
                                    <br />
                            <a href=\"#SELF\">Nouvelle recherche</a></p>";               
                           
                   
                   
                   
                   
                    echo "
                    <div class=\"liste-articles\">"
                    .$resultataffiche
                    ."        </div>
                    </div>";               
                    if($nbart != 0 )
                    echo "        <br class=\"dixpixels\" />
                                    <p class=\"mots_mc\"><a href=\"#SELF\">Nouvelle recherche</a></p>";       
                   
                   
            } else {
                    echo "<p class=\"mots_mc\">Aucun article ne correspond à votre recherche</p>";                       
            }       
    } else {
            echo "<div class=\"mots_mc\"><:rmc:selectionner_mot:></div>";
    # inutile si form recherche inclus       
    #        echo "<br /><a href=\"".$_SERVER['HTTP_REFERER']."\" onclick=\"javascript:history.back(); return false;\">Retour</a></p>";       
    }
    ?>
    </div>
    • Le 2 novembre 2012 à 01:09, par gilcot En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

      pfiouuuu
      On peut voir la page de recherche ?
      Et aussi une petite description de comment les résultats sont affichés ?

    • Le 2 novembre 2012 à 11:29, par Mike En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

      Je te mets un lien vers la version qui fonctionne sur SPIP 2.1

      http://www.librairie-interactive.com/?page=recherche&type_rech=multi

      Je pense savoir d’où vient le problème mais je ne suis pas assez compétent en SQL pour le résoudre.
      En effet, je viens de réaliser que dans la nouvelle structure de la base de SPIP 3, la table spip_mots_articles n’existe plus alors que dans mon fichier, il y est souvent fait appel en SQL. Du coup mon code se comporte comme si il n’y avait aucun mot clé dans le tableau idmot et me dit qu’il n’y a pas de résultats.

      Reste à comprendre les jointures de la nouvelle base pour modifier le SQL dans mon code.

    • Le 2 novembre 2012 à 14:56, par gilcot En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

      Bonjour Mike.

      Dites-moi si ra ré-écriture suivante marche avec la 2.1 :

      <div class="result_rm">
      <?php
      /*********************************************************************
      * RECHERCHE MULTI-CRITERES - MODELE AFFICHAGE DES RESULTATS
      *
      * @author
      * -2008-08: [Dominique (Dom) Lepaisant->www.tispip.etab.ac-caen.fr]
      * -2008-08: [Stéphanie De Nadaï->www.webdesigneuse.net]
      * - [Paul Sanchez->www.Netdeveloppeur.com] (contrib initiale)
      *
      * @copyright
      * Ce programme est un logiciel libre distribue sous licence GNU/GPL.
      *********************************************************************/


      $url = parse_url($_SERVER['QUERY_STRING']);

      $param = $url['path'];
      $pos = 0;
      $indice = 255;

      if (_request('idmot')) {

             // Récupération du nombre de jours
             // pour periodicité de la rechercher
             $nbjour = intval(_request('nbjour'));

             // Récupération du nombre de jours
             // pour periodicité de la rechercher
             if (_request('onlyrub')) {
                     $idonlyrub = intval(_request('rubnum'));
             } else
                     $idonlyrub = 0;

             // 1 = Tous les mots doivent être associés aux articles trouvés
             $allword = intval(_request('allword'));

             $sql_in_mot = implode(',', _request('idmot') );
             $nbmot = count(_request('idmot'));

             $result = sql_select('id_mot, titre', 'spip_mots', 'id_mot IN ('.$sql_in_mot.')', '', 'id_mot,titre"');

             $tabmot = "";
             $nbcol = 0;
             $nbcolmax = 4;

             if ($result) {
                     $compt = 0;
                     while ($row = sql_fetch($result)) {
                             extract($row);
                             $titre = supprimer_numero($titre);
                             if ($nbcol == $nbcolmax) {
                                     $nbcol = 0;
                             }

                             $tabmot .= "<a class=\"spanblock txtgris\" href=\"./spip.php?page=mot&mots[]=$id_mot\"><span class=\"cle\">$titre</span></a>";
                             $nbcol += 1;
                     }
                     sql_free($result);
             }

             $sql_where[] = "spip_mots_articles.id_mot IN (".$sql_in_mot.") ";

             if ($nbjour) {
                     $datedeb = date("Y-m-d", mktime(0, 0, 0, date("m"), (date("d") - $nbjour), date("Y")));
                     $sql_where[] = "spip_articles.date >= '$datedeb' ";
             }

             if ($idonlyrub) {
                     $sql_where[] = "spip_rubriques.id_rubrique = $idonlyrub ";
             }

             $sql_where[] = "spip_articles.statut = 'publie' GROUP BY spip_articles.id_article";
             if ($order) {
                     $sql_order = "spip_rubriques.id_rubrique, NUM DESC, spip_mots_articles.id_mot, spip_articles.date DESC";
             }
             else {
                     $sql_order = "NUM DESC, spip_mots_articles.id_mot, spip_rubriques.id_rubrique, spip_articles.date DESC";
             }

             $result = sql_select('COUNT(*) AS num, spip_articles.id_article, spip_rubriques.id_rubrique, spip_rubriques.titre AS titrerub', 'spip_articles INNER JOIN spip_rubriques ON spip_rubriques.id_rubrique = spip_articles.id_rubrique INNER JOIN spip_mots_articles ON spip_mots_articles.id_article = spip_articles.id_article', $sql_where, '', $sql_order);

             $nbart = 0;

             $resultataffiche = "";
             if ($result) {
                     $titrerub = supprimer_numero($titrerub);
                     $idrub = 0;
                     $listidmot2 = "";
                     $listidmotprec = "";

                     while ($row = sql_fetch($result)) {
                             extract($row);
                             if (($num != $nbmot) && ($allword)) {
                                     break;
                             }

                             if ($idrub != $id_rubrique) {

                                     if (($pospoint = strrpos($titrerub, ". ")) === FALSE) {
                                             $titrerub2=$titrerub;
                                     }
                                     else {
                                             if (is_numeric(substr($titrerub, 0, $pospoint)) == false)
                                                     $titrerub2 = $titrerub;
                                             else
                                                     $titrerub2 = substr($titrerub, $pospoint + 2);
                                     }

                                     if ($order) {
                                             $resultataffiche.= '<p><a href="'. generer_url_entite($id_rubrique, 'rubrique') ."\">$titrerub2 :</a></p>";
                                     }
                             }

                             $result2 = sql_select('spip_articles.id_article AS artid,spip_articles.id_secteur AS id_secteur, spip_articles.titre AS titreart, spip_articles.date, spip_mots.id_mot, spip_mots.titre AS titremot', 'spip_articles INNER JOIN spip_mots_articles ON spip_mots_articles.id_article = spip_articles.id_article INNER JOIN spip_mots ON spip_mots.id_mot = spip_mots_articles.id_mot ', "spip_articles.id_article = $id_article AND spip_mots_articles.id_mot IN (".$sql_in_mot.") AND statut = 'publie' ", '', 'spip_mots.id_mot');

                             if ($result2) {
                                     $listmot = "<h4 class=\"titremots_mc\">";
                                     $titrearticle = "";
                                     $dataffich = "";
                                     $idart = 0;
                                     while ($row2 = sql_fetch($result2)) {
                                             extract($row2);
                                             $listidmot2 .= "$id_mot,";
                                             if ($idart == 0) {
                                                     $titrearticle = supprimer_numero($titreart);
                                                     if (!(($pospoint = strpos($titrearticle, '.')) === FALSE))  {
                                                             if (is_numeric(substr($titrearticle, 0, $pospoint)) == true)
                                                                     $titrearticle = substr($titrearticle, $pospoint + 2);

                                                     }
                                                     if (!(($pospoint = strpos($titremot, '.')) === FALSE)) {
                                                             if (is_numeric(substr($titremot, 0, $pospoint)) == true)
                                                                     $titremot = substr($titremot, $pospoint + 2);

                                                     }
                                                     $dataffich = date("d/m/Y", strtotime($date));

                                                     if ($order) {
                                                             $nbart += 1;
                                                             $resultataffiche .= '<li><a class="titrearticle_mc"  href="'. generer_url_entite($artid, 'article') ."\">$titrearticle</a> <small>$dataffich </small>";
                                                             $resultataffiche .= "$titremot";
                                                     }

                                                     $listmot .= "<a class=\"spanblock\" href=\"./spip.php?page=mot&mots[]=$id_mot\"><span class=\"cle\">$titremot</span></a>";
                                                     $idart = 1;
                                             }
                                             else {
                                                     $listmot .= "<a class=\"spanblock\" href=\"./spip.php?page=mot&mots[]=$id_mot\"><span class=\"cle\">$titremot</span></a>";
                                                     if ($order) {
                                                             $resultataffiche .= "<a class=\"spanblock\" href=\"./spip.php?page=mot&mots[]=$id_mot\"><span class=\"cle\">$titremot</span></a>";
                                                     }
                                             }
                                     }
                                     if ($order) {
                                             $resultataffiche .= "</li>";
                                     }

                                     sql_free($result2);

                                     if (!$order) {

                                             if ($listidmot2 != $listmodidprec) {
                                                     $resultataffiche .= " $listmot </h4>";
                                             }
                                             $nbart += 1;
                                             switch ($id_secteur) {
                                                     case 1: $variable = 63; $secteur = "Ma classe"; break;
                                                     case 3: $variable = 66; $secteur = "Applications"; break;
                                                     case 4: $variable = 65; $secteur = "Tutoriels"; break;
                                                     case 5: $variable = 64; $secteur = "Liens"; break;
                                             }
                                                             $resultataffiche .= '<li class="br"><a class="titrearticle_mc" href="'. generer_url_entite($id_article, 'article'). "\">$titrearticle</a><small>publié le : <em>$dataffich</em> , dans la rubrique <em><a href=\"". generer_url_entite($id_secteur,'rubrique') ."&mots[]=$variable\">$secteur</a></em></small></li>";

                                                             $listmodidprec = $listidmot2;
                                                             $listidmot2 = "";
                                     }
                             }
                             $idrub = $id_rubrique;
                     }


                     sql_free($result);

                     if($nbart == 0 || $nbart == 1)
                             $nbart_txt = "<:rmc:article_trouve:>";
                     else
                             $nbart_txt = "<:rmc:articles_trouves:>";

                     echo "<div class=\"contre-encart\">";

                     echo "<p class=\"mots_mc\"><span class=\"spanblock \">Mots séléctionnés : </span><br />".substr($tabmot, 0)." </p>";
                     if($nbart == 0 )
                             $nbart_txt = "Aucun article ne correspond à votre recherche";
                     else
                     if($nbart == 1 )
                             $nbart_txt = " article correspond à votre recherche";
                     else
                             $nbart_txt = "articles correspondent à votre recherche";

                     if($nbart == 0 )
                             echo "<p class=\"mots_mc\"> $nbart_txt<br /><a href=\"#SELF\">Nouvelle recherche</a></p>";
                     else
                             echo "<p class=\"mots_mc\"> $nbart $nbart_txt<br /><a href=\"#SELF\">Nouvelle recherche</a></p>";

                     echo '<div class="liste-articles">'.$resultataffiche."</div></div>";
                     if($nbart)
                             echo "<br class=\"dixpixels\" /><p class=\"mots_mc\"><a href=\"#SELF\">Nouvelle recherche</a></p>";

             } else {
                     echo "<p class=\"mots_mc\">Aucun article ne correspond à votre recherche</p>";
             }
      } else {
             echo "<div class=\"mots_mc\"><:rmc:selectionner_mot:></div>";
      // inutile si form recherche inclus
      //        echo "<br /><a href=\"".$_SERVER['HTTP_REFERER']."\" onclick=\"javascript:history.back(); return false;\">Retour</a></p>";
      }
      ?>
      </div>

      Normalement c’est juste un portage qui utllise l’API SQL de SPIP : cela a pas mal d’avantages plus tard. Si ça marche, je peux adapter les requêtes (je soupçonne aussi les mots-clés)

      J’irai voir la page de recherche dans la soirée. Je pense que ça m’aidera à comprendre le code... Mais je pense aussi qu’il aurait été possible d’écrire cette page directement en langage de boucles SPIP avec ses bénéfices (lisibilité du HTML qui n’est pas mélangé à du PHP, portabilité et prise en main plus simples pour un non développeur, prise en charge automatique par le cache, etc.)

    • Le 2 novembre 2012 à 20:34, par Mike En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

      Bonsoir !

      Désolé je me suis trompé en postant tout à l’heure pour dire que c’était résolu et j’ai créé un autre post au lieu de répondre.

      C’était bien lié aux modifications de la base de données suite au passage en spip 3.

      La table spip_mot_articles est devenue spip_mots_liens et du coup spip_mots_articles.id_article devient spip_mots_liens.id_objet

      Merci d’avoir pris le temps de regarder ! :)

      Maintenant c’est vrai qu’il faudrait que je recode tout ça directement en SPIP mais j’avoue que je ne sais pas trop par quel bout commencer. J’avais déjà passé pas mal de temps à bidouiller ce code en php (dont je ne suis pas l’auteur) pour l’adapter à mes besoins. Je pense que c’est au delà de mes compétences pour le moment !

      En tous cas merci du temps que vous m’avez accordé, d’autant plus que le code est plutôt indigeste présenté comme ça !
      Mike

    • Le 3 novembre 2012 à 00:32, par gilcot En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

      C’était ma prochaine suggestion (mais avant, s’assurer que la ré-écriture avec l’API ne casse rien) Mais ne pouvant pas tester, je n’étais pas certain que cette seule modification aurait suffit (je pensais qu’il aurait fallu rajouter dans votre cas que « objet='article' » en plus du lien sur id_objet (car la nouvelle structure permet de lier n’importe quel objet aux mots clés, pas que les articles... donc quand vous aurez des articles et des rubriques de même ID rattaché au même mot-clé...)

      1. <div class="result_rm">
      2. <?php
      3. /*********************************************************************
      4.  * RECHERCHE MULTI-CRITERES - MODELE AFFICHAGE DES RESULTATS
      5.  *
      6.  * @author
      7.  * -2008-08: [Dominique (Dom) Lepaisant->www.tispip.etab.ac-caen.fr]
      8.  * -2008-08: [Stéphanie De Nadaï->www.webdesigneuse.net]
      9.  * - [Paul Sanchez->www.Netdeveloppeur.com] (contrib initiale)
      10.  *
      11.  * @copyright
      12.  * Ce programme est un logiciel libre distribue sous licence GNU/GPL.
      13.  *********************************************************************/
      14.  
      15.  
      16. $url = parse_url($_SERVER['QUERY_STRING']);
      17.  
      18. $param = $url['path'];
      19. $pos = 0;
      20. $indice = 255;
      21.  
      22. if (_request('idmot')) {
      23.  
      24. // Récupération du nombre de jours
      25. // pour periodicité de la rechercher
      26. $nbjour = intval(_request('nbjour'));
      27.  
      28. // Récupération du nombre de jours
      29. // pour periodicité de la rechercher
      30. if (_request('onlyrub')) {
      31. $idonlyrub = intval(_request('rubnum'));
      32. } else
      33. $idonlyrub = 0;
      34.  
      35. // 1 = Tous les mots doivent être associés aux articles trouvés
      36. $allword = intval(_request('allword'));
      37.  
      38. $sql_in_mot = implode(',', _request('idmot') );
      39. $nbmot = count(_request('idmot'));
      40.  
      41. $result = sql_select('id_mot, titre', 'spip_mots', 'id_mot IN ('.$sql_in_mot.')', '', 'id_mot,titre"');
      42.  
      43. $tabmot = "";
      44. $nbcol = 0;
      45. $nbcolmax = 4;
      46.  
      47. if ($result) {
      48. $compt = 0;
      49. while ($row = sql_fetch($result)) {
      50. extract($row);
      51. $titre = supprimer_numero($titre);
      52. if ($nbcol == $nbcolmax) {
      53. $nbcol = 0;
      54. }
      55.  
      56. $tabmot .= "<a class=\"spanblock txtgris\" href=\"./spip.php?page=mot&mots[]=$id_mot\"><span class=\"cle\">$titre</span></a>";
      57. $nbcol += 1;
      58. }
      59. sql_free($result);
      60. }
      61.  
      62. $sql_where[] = "spip_mots_liens.objet='article'"
      63. $sql_where[] = "spip_mots_liens.id_mot IN (".$sql_in_mot.") ";
      64.  
      65. if ($nbjour) {
      66. $datedeb = date("Y-m-d", mktime(0, 0, 0, date("m"), (date("d") - $nbjour), date("Y")));
      67. $sql_where[] = "spip_articles.date >= '$datedeb' ";
      68. }
      69.  
      70. if ($idonlyrub) {
      71. $sql_where[] = "spip_rubriques.id_rubrique = $idonlyrub ";
      72. }
      73.  
      74. $sql_where[] = "spip_articles.statut = 'publie' GROUP BY spip_articles.id_article";
      75. if ($order) {
      76. $sql_order = "spip_rubriques.id_rubrique, num DESC, spip_mots_liens.id_mot, spip_articles.date DESC";
      77. }
      78. else {
      79. $sql_order = "num DESC, spip_mots_liens.id_mot, spip_rubriques.id_rubrique, spip_articles.date DESC";
      80. }
      81.  
      82. $result = sql_select('COUNT(*) AS num, spip_articles.id_article, spip_rubriques.id_rubrique, spip_rubriques.titre AS titrerub', 'spip_articles INNER JOIN spip_rubriques ON spip_rubriques.id_rubrique = spip_articles.id_rubrique INNER JOIN spip_mots_liens ON spip_mots_liens.id_objet = spip_articles.id_article', $sql_where, '', $sql_order);
      83.  
      84. $nbart = 0;
      85.  
      86. $resultataffiche = "";
      87. if ($result) {
      88. $titrerub = supprimer_numero($titrerub);
      89. $idrub = 0;
      90. $listidmot2 = "";
      91. $listidmotprec = "";
      92.  
      93. while ($row = sql_fetch($result)) {
      94. extract($row);
      95. if (($num != $nbmot) && ($allword)) {
      96. break;
      97. }
      98.  
      99. if ($idrub != $id_rubrique) {
      100.  
      101. if (($pospoint = strrpos($titrerub, ". ")) === FALSE) {
      102. $titrerub2=$titrerub;
      103. }
      104. else {
      105. if (is_numeric(substr($titrerub, 0, $pospoint)) == false)
      106. $titrerub2 = $titrerub;
      107. else
      108. $titrerub2 = substr($titrerub, $pospoint + 2);
      109. }
      110.  
      111. if ($order) {
      112. $resultataffiche.= '<p><a href="'. generer_url_entite($id_rubrique, 'rubrique') ."\">$titrerub2 :</a></p>";
      113. }
      114. }
      115.  
      116. $result2 = sql_select('spip_articles.id_article AS artid,spip_articles.id_secteur AS id_secteur, spip_articles.titre AS titreart, spip_articles.date, spip_mots.id_mot, spip_mots.titre AS titremot', 'spip_articles INNER JOIN spip_mots_liens ON spip_mots_liens.id_objet = spip_articles.id_article INNER JOIN spip_mots ON spip_mots.id_mot = spip_mots_liens.id_mot ', "spip_articles.id_article = $id_article AND spip_mots_liens.id_mot IN (".$sql_in_mot.") AND statut = 'publie' AND spip_mots_liens.objet = 'article' ", '', 'spip_mots.id_mot');
      117.  
      118. if ($result2) {
      119. $listmot = "<h4 class=\"titremots_mc\">";
      120. $titrearticle = "";
      121. $dataffich = "";
      122. $idart = 0;
      123. while ($row2 = sql_fetch($result2)) {
      124. extract($row2);
      125. $listidmot2 .= "$id_mot,";
      126. if ($idart == 0) {
      127. $titrearticle = supprimer_numero($titreart);
      128. if (!(($pospoint = strpos($titrearticle, '.')) === FALSE)) {
      129. if (is_numeric(substr($titrearticle, 0, $pospoint)) == true)
      130. $titrearticle = substr($titrearticle, $pospoint + 2);
      131.  
      132. }
      133. if (!(($pospoint = strpos($titremot, '.')) === FALSE)) {
      134. if (is_numeric(substr($titremot, 0, $pospoint)) == true)
      135. $titremot = substr($titremot, $pospoint + 2);
      136.  
      137. }
      138. $dataffich = date("d/m/Y", strtotime($date));
      139.  
      140. if ($order) {
      141. $nbart += 1;
      142. $resultataffiche .= '<li><a class="titrearticle_mc" href="'. generer_url_entite($artid, 'article') ."\">$titrearticle</a> <small>$dataffich </small>";
      143. $resultataffiche .= "$titremot";
      144. }
      145.  
      146. $listmot .= "<a class=\"spanblock\" href=\"./spip.php?page=mot&mots[]=$id_mot\"><span class=\"cle\">$titremot</span></a>";
      147. $idart = 1;
      148. }
      149. else {
      150. $listmot .= "<a class=\"spanblock\" href=\"./spip.php?page=mot&mots[]=$id_mot\"><span class=\"cle\">$titremot</span></a>";
      151. if ($order) {
      152. $resultataffiche .= "<a class=\"spanblock\" href=\"./spip.php?page=mot&mots[]=$id_mot\"><span class=\"cle\">$titremot</span></a>";
      153. }
      154. }
      155. }
      156. if ($order) {
      157. $resultataffiche .= "</li>";
      158. }
      159.  
      160. sql_free($result2);
      161.  
      162. if (!$order) {
      163.  
      164. if ($listidmot2 != $listmodidprec) {
      165. $resultataffiche .= " $listmot </h4>";
      166. }
      167. $nbart += 1;
      168. switch ($id_secteur) {
      169. case 1: $variable = 63; $secteur = "Ma classe"; break;
      170. case 3: $variable = 66; $secteur = "Applications"; break;
      171. case 4: $variable = 65; $secteur = "Tutoriels"; break;
      172. case 5: $variable = 64; $secteur = "Liens"; break;
      173. }
      174. $resultataffiche .= '<li class="br"><a class="titrearticle_mc" href="'. generer_url_entite($id_article, 'article'). "\">$titrearticle</a><small>publié le : <em>$dataffich</em> , dans la rubrique <em><a href=\"". generer_url_entite($id_secteur,'rubrique') ."&mots[]=$variable\">$secteur</a></em></small></li>";
      175.  
      176. $listmodidprec = $listidmot2;
      177. $listidmot2 = "";
      178. }
      179. }
      180. $idrub = $id_rubrique;
      181. }
      182.  
      183.  
      184. sql_free($result);
      185.  
      186. if($nbart == 0 || $nbart == 1)
      187. $nbart_txt = "<:rmc:article_trouve:>";
      188. else
      189. $nbart_txt = "<:rmc:articles_trouves:>";
      190.  
      191. echo "<div class=\"contre-encart\">";
      192.  
      193. echo "<p class=\"mots_mc\"><span class=\"spanblock \">Mots séléctionnés : </span><br />".substr($tabmot, 0)." </p>";
      194. if($nbart == 0 )
      195. $nbart_txt = "Aucun article ne correspond à votre recherche";
      196. else
      197. if($nbart == 1 )
      198. $nbart_txt = " article correspond à votre recherche";
      199. else
      200. $nbart_txt = "articles correspondent à votre recherche";
      201.  
      202. if($nbart == 0 )
      203. echo "<p class=\"mots_mc\"> $nbart_txt<br /><a href=\"#SELF\">Nouvelle recherche</a></p>";
      204. else
      205. echo "<p class=\"mots_mc\"> $nbart $nbart_txt<br /><a href=\"#SELF\">Nouvelle recherche</a></p>";
      206.  
      207. echo '<div class="liste-articles">'.$resultataffiche."</div></div>";
      208. if($nbart)
      209. echo "<br class=\"dixpixels\" /><p class=\"mots_mc\"><a href=\"#SELF\">Nouvelle recherche</a></p>";
      210.  
      211. } else {
      212. echo "<p class=\"mots_mc\">Aucun article ne correspond à votre recherche</p>";
      213. }
      214. } else {
      215. echo "<div class=\"mots_mc\"><:rmc:selectionner_mot:></div>";
      216. // inutile si form recherche inclus
      217. // echo "<br /><a href=\"".$_SERVER['HTTP_REFERER']."\" onclick=\"javascript:history.back(); return false;\">Retour</a></p>";
      218. }
      219. ?>
      220. </div>

      Télécharger

    • Le 29 janvier 2013 à 18:48, par christophe noisette En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

      Bonjour
      j’ai le même souci d’utiliser la recherche multi-critère par mot clé sous spip3 du fait du changement de table de à . J’ai donc essayer de copier / coller ce que tu proposes, que j’ai mis dnas le fichier natif ’result_rec_mc.html’.
      La recherche se fait à partir de la page : http://www.infogm.org/spip.php?rubrique657.
      Quand je lance une recherche, j’ai droit au message d’erreur suivant : « Parse error : syntax error, unexpected T_VARIABLE in /homez.95/infogm/www/ecrire/public/evaluer_page.php(55) : eval()’d code on line 63 ».
      J’ai aussi essayer de simplement faire rechercher / remplacer sur mon premier fichier tous les spip_mots_articles par spip_mots_liens et les .id_article par des id.objet...Mais cette solution ne me donnait tout simplement aucun résultat... Jamais. Or j’ai bien des articles liés à des mots clés.
      Merci pour vos lumières

    Répondre à ce message

  • Le 24 mai 2012 à 01:08, par philooo En réponse à : Migration d’un squelette de SPIP2 vers SPIP 3.0

    le critere par num titre, id_document ne marche plus, car les numeros devant les titres sont maintenant ignore.

    c’est quoi le nouveau critere pour prendre en compte les numeros de titres ? la documentation n’est ps encore a jour :(

    Répondre à ce message

  • Le 2 novembre 2012 à 11:53, par Mike En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

    Problème résolu, je poste la réponse très simple qui pourra dépanner probablement d’autres personnes

    La table spip_mot_articles est devenue spip_mots_liens et du coup spip_mots_articles_.id_article devient spip_mots_liens.id_objet

    Merci d’avoir pris le temps de regarder ! Je suis conscient que comme ça le code php est un peu indigeste ! Je pourrais d’ailleurs faire ça plus simplement maintenant sous Spip 3 mais bon !

    Mike

    Répondre à ce message

  • Le 1er octobre 2012 à 11:03, par Abel En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

    Bonjour,
    Sauf erreur de ma part, le critère id_groupe semble ne plus fonctionner sur une boucle « breves » dans SPIP 3 (pour sélectionner les brèves liées à un groupe de mots-clés). http://www.spip.net/fr_article906.html

    La boucle suivante qui fonctionnait très bien sous SPIP 2, n’affiche plus rien après une migration sur SPIP3, et affiche une « erreur dans le squelette » de type « critère inconnu » :
    <BOUCLE_nom_de_boucle(BREVES){id_groupe="9"}{0,5}{id_rubrique="1"}{!par date}{doublons}>

    Je précise que la boucle se situe dans un « inclure ».

    Merci !

    • Le 7 octobre 2012 à 08:15, par gilcot En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

      Bonjour.

      Quelle est l’erreur exacte ?

      Est-ce que l’erreur persiste quand on enlève {id_groupe="9"} et qu’on recalcule la page ?

    • Le 12 octobre 2012 à 16:15, par Abel En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

      Bonjour,
      Voici l’erreur exacte :

      1 Erreur(s) dans le squelette
      Numéro message squelette boucle Ligne
      1 Critère inconnu = squelettes/inclure/coldroite.html _fromtheweb 63

      Et la boucle n’affiche rien.

      Si j’enlève le critère ça marche sans problème.
      Pour le moment j’ai trouvé un autre moyen d’afficher ce que je veux mais c’est tout de même étrange.

    • Le 13 octobre 2012 à 12:11, par gilcot En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

      Bonjour.

      Vous (Abel) écriviez :

      le critère id_groupe semble ne plus fonctionner sur une boucle « breves » dans SPIP 3 (pour sélectionner les brèves liées à un groupe de mots-clés)

      Et je (gilcot) ai répondu

      Est-ce que l’erreur persiste quand on enlève {id_groupe="9"} et qu’on recalcule la page ?

      Et vous (Abel) confirmez

      Si j’enlève le critère ça marche sans problème.
      ... mais c’est tout de même étrange.

      En fait, ce n’est pas si étrange que cela : le problème des mots-clés est un peu celui des forums, même si l’article ne le mentionne pas (mais c’est un poil plus complexe aussi) Mais l’essentiel (jointures automatiques) ayant été fait pour qu’on retombe sur ses pattes dans la plupart des cas (boucles simples de ce type), cette erreur n’aurait pas du se produire non ?
      A tout hasard (je ne peux pas tester là), remplacer {id_groupe="9"} par {mots.id_groupe="9"}{mots.objet='breve'} pour voir ce que ça donne

    • Le 13 octobre 2012 à 14:45, par Abel En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

      Bonjour,

      Alors si je mets {mots.id_groupe="9"}{mots.objet='breve'} ça ne fonctionne pas.
      Mais si je ne mets que {mots.id_groupe="9"} alors cela semble fonctionner.

      Abel

    • Le 13 octobre 2012 à 15:19, par gilcot En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

      Salut Abel

      Comme j’ai pas testé.. mais vous avez trouvé la version qui fonctionne. L’idée était de forcer la jointure sur la table des mots clés ;-)

      Problème résolu donc. Bonne continuation.

    • Le 13 octobre 2012 à 19:43, par Abel En réponse à : Migration d’un squelette de SPIP2 vers SPIP3

      Oui,
      Bravo et merci ! ^^

    Répondre à ce message

  • Le 5 mai 2012 à 21:54, par YannX En réponse à : Migration d’un squelette de SPIP2 vers SPIP 3.0

    Un chapitre majeur de modification de SPIP 3 reste a expliciter :
    la gestion des mots-clés est a refondre assez complètement si vous utilisez ce domaine...
    car les tables dsupport ont completement changé.

    Voir les articls descriptifs SPIP3 (actuellement seulement en interface privée, en attendant leur publication publique a la sortie officielle de SPIP3)

    Répondre à ce message

Répondre à cet article

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Un retour d’expérience d’utilisation de Formidable

    26 octobre – commentaires

    Il s’agissait de créer un formulaire d’inscription à un évènement modérer les inscriptions dans le privé publier les inscriptions dans le public Nous avons discuté de cette présentation lors de l’apéro SPIP du 15 février 2016 à la Cantine (...)

  • Métas +

    3 décembre – 14 commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)

  • Adaptive Images

    15 novembre 2013 – 69 commentaires

    Un plugin pour permettre aux sites responsive d’adapter automatiquement les images de la page à l’écran de consultation. Adaptive Images, que l’on pourrait traduire par Images adaptatives, désigne la pratique qui vise à adapter les taille, (...)

  • Social tags

    8 septembre 2008 – 428 commentaires

    Le plugin Social Tags permet d’ajouter des icônes de partage de liens vers les sites tels que Digg, Facebook, Delicious.... Une fois le plugin installé et activé (voir doc.), le choix des sites se fait via un menu de configuration. Insertion (...)

  • Module de Paiement Stripe

    17 octobre – commentaires

    Stripe est un prestataire de paiement externe https://stripe.com/fr qui propose une API moderne et une interface de paiement extrêmement conviviale et efficace. Ce module permet les paiements à l’acte et les paiement récurrents. Configuration (...)

Ça spipe par là