Pages uniques

Allez, avouez... il ne vous est jamais arrivé d’avoir besoin d’articles qui ne sont rattachés à aucun rubriquage particulier ? Des articles uniques, n’ayant ni de thème, ni de rapport avec aucun autre ? Ou encore des articles pour lesquels vous avez besoin de faire un squelette particulier mais dont le contenu doit rester modifiable classiquement dans l’interface privée ?

Des pages, en quelque sorte. Des pages uniques rattachées à rien.

On a tous utilisé des bidouilles devenues des habitudes, que ce soit en se basant sur des mots-clés « techniques » ou bien en créant une rubrique « fourre-tout » que l’on devait ensuite rendre invisible dans tous nos squelettes en mettant {id_rubrique!=1}, par exemple.

Ce plugin propose de faire tout cela de manière plus propre et plus pratique.
On peut alors l’utiliser pour créer des pages de notice légale, d’à-propos, ou encore de contact.

Créer des pages

Le plugin ajoute une entrée « Pages uniques » dans le menu « Édition ».

On arrive sur une liste des pages déjà créées. Avec un lien permettant d’en ajouter de nouvelles.

Le formulaire de création d’une page est le même que celui d’un article. Sauf qu’on n’a pas à choisir de rubrique. À la place, on désigne un identifiant de page.

Afficher les pages sur son site

Les pages sont des articles comme les autres, ils n’ont simplement pas de rubrique.

Vous pouvez donc :

  • Utiliser une boucle classique
    <BOUCLE_art(ARTICLES){id_article=38}>#URL_ARTICLE</BOUCLE_art>
  • Utiliser les raccourcis dans les textes [->art38]
  • Cela utilisera donc le squelette normal « article.html »

Mais les pages uniques ont aussi un champ « page » ! Qui peut être utilisé de plusieurs manières pour récupérer habilement ses pages.

Imaginons que l’on ait créé une page « Notice légale » avec le mot « legal » dans le champ « page ». On peut alors :

  • Faire une boucle <BOUCLE_legal(ARTICLES){page=legal}>#TEXTE</BOUCLE_legal>
  • Avoir un squelette « legal.html » dédié. Comme ce squelette sera appelé par ?page=legal, le critère {page=legal} peut se simplifier, dans ce squelette, et s’écrire simplement {page}. La boucle principale devient alors simplement : <BOUCLE_legal(ARTICLES){page}>
  • Depuis la version 1.5.1, il est possible d’avoir un squelette dédié « article=legal.html » qui sera utilisé automatiquement avec la vraie URL de l’article. Ainsi vous pouvez avoir des belles adresses propres tout en ayant un squelette dédié, et sans avoir à utiliser Compositions pour juste un article. Cela fonction aussi avec Z-core pour le squelette du bloc principal.

Lorsqu’on veut juste l’URL, il existe aussi la balise #URL_PAGE_UNIQUE{identifiant} qui permet de retourner l’#URL_ARTICLE mais depuis l’identifiant textuel donné à la page.

Remarques techniques : conséquence sur les boucles (ARTICLES)

Les pages uniques sont automatiquement exclues des boucles (ARTICLES) sauf si l’un des critères suivant est présents :

  • {tout} ;
  • {page} avec éventuellement des opérateurs ({page=toto}, sauf {page=''} ;
  • {id_rubrique=-1} ou {id_rubrique<0}
  • {id_rubrique} ou {id_rubrique? avec une rubrique égale à -1 dans l’environnement ;
  • {id_article} avec éventuellement des opérateurs :
  • {traduction} et {origine_traduction} avec éventuellement des opérateurs.

Discussion

104 discussions

  • Pour info : deux notices sous SPIP 3.1.1 lorsque l’on est en edition d’article dans le B.O.

    Notice : Undefined index : champ_page in plugins/auto/pages/v1.3.0/pages_pipelines.php on line 187

    Notice : Undefined index : champ_page in plugins/auto/pages/v1.3.0/pages_pipelines.php on line 192

    Répondre à ce message

  • À la place (de rubrique), on désigne un nom de page (qui peut être, par exemple, le nom d’un squelette).

    Je ne comprends pas très bien ce qu’il faut mettre… je peux mettre le nom d’une rubrique quelconque ?

    Répondre à ce message

  • 4

    Merci pour ce plugin qui fait partie des « incontournables »

    Sur un site 3.0.17 + plugin pages à jour (svn) sur lequel je viens d’installer ce plugin, je constate un dysfonctionnement : lorsque je veux créer une page, après avoir saisi l’article + cliqué sur Entegistrer, j’ai le message d’erreur ci-dessous

    Accès interdit

    Vous n’avez pas le droit d’accéder à la page article_edit.

    Et l’article ne se créé pas

    C’est grave, docteur ? Où dois-je chercher ? Un bug quelque part ?

    • Résolu : L’erreur observée semblait liée à l’absence de l’écran de sécurité (machine locale). En le mettant en place, c’est OK.
      Pour comprendre ce qu’il se passe, quelle est l’interaction entre l’écran de sécurité et cette création de pages uniques ?

    • Euh aucune idée, je ne vois pas le rapport. :)

    • En fait, c’est une recherche google sur "accès interdit vous n’avez pas accès etc…) qui m’a fait aboutir à
      https://www.mail-archive.com/spip-zone@rezo.net/msg34888.html

      Dans le fil, le 3è message parle de cette histoire d’écran de sécurité.

      Du coup, pas plus persuadé que ça que ça puisse avoir un rapport, juste pour voir, j’ai mis en place l’écran. Et là, paf !, plus de message d’erreur et la page est bien créée….

      Il semble donc qu’il y ait tout de même une interférence.

    • Après essai et observation, le message s’affiche quand aucune rubrique n’existe dans la base.
      Après avoir installé un spip 3.0.20 tout neuf, installé le plugin « Pages », si on se rend dans le menu « Edition » puis « Pages uniques » on trouve le message

      Il n’y a aucune page pour l’instant

      Un clic sur « Créer une nouvelle page » et là on a le message :

      Vous n’avez pas le droit d’accéder à la page article_edit.

      .
      Il faut après les installation, créer réellement une rubrique pour pouvoir créer une page unique, voir même aller jusque dans la table spip_rubriques pour lui affecté l’ID -1.

    Répondre à ce message

  • 1

    Bonjour,

    Voici une petite astuce (mais il y en a certainement d’autres...) pour appliquer automatiquement une composition à tous vos articles uniques.

    Déterminer une composition d’article « article_unique » héritée d’une composition de rubrique, n’est pas possible puisque par définition les articles uniques n’ont pas de rubrique. La composition « article_unique » doit donc être appliquée individuellement à tous les articles uniques, ou alors être appliquée globalement à tous les articles qui n’ont pas de rubrique si on modifie légèrement la boucle article Z d’origine...

    La boucle article Z d’origine ...

    <BOUCLE_principale_article(ARTICLES){id_article}>
    <INCLURE{fond=structure,env,id_rubrique=#ENV{id_rubrique,#ID_RUBRIQUE},id_secteur=#ID_SECTEUR,type-page=article,composition=#COMPOSITION} ></INCLURE>
    </BOUCLE_principale_article>

    ...produit pour un article unique le code html suivant :

    <html class="page_article ltr fr no-js" xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">

    La boucle article modifiée incluant un test sur l’id_rubrique...

    <BOUCLE_principale_article(ARTICLES){id_article}>[(#ID_RUBRIQUE|>{0}|?{#SET{composition,#COMPOSITION},#SET{composition,page_unique}})]
    <INCLURE{fond=structure,env,id_rubrique=#ENV{id_rubrique,#ID_RUBRIQUE},id_secteur=#ID_SECTEUR,type-page=article,composition=#GET{composition}} ></INCLURE>
    </BOUCLE_principale_article>

    ...produit le code html suivant avec les class qui vont bien :

    <html class="page_article article_page_unique composition_page_unique ltr fr no-js" xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">

    Bonne utilisation ;-)
    Cyril

    • Merci, je cherchais à résoudre ce problème de composition avec sarkaspipr, et c’est la bonne et unique solution
      ++

    Répondre à ce message

  • 7

    Mais les pages uniques ont aussi un champ « page » ! Qui peut être utilisé de plusieurs manières pour récupérer habilement ses pages.

    Imaginons que l’on ait créé une page « Notice légale » avec le mot « legal » dans le champ « page ». On peut alors :

    • Faire une boucle <BOUCLE_legal(ARTICLES){page=legal}>#TEXTE</BOUCLE_legal>
    • Et mieux encore, avoir un squelette « legal.html » dédié, dans lequel on n’a plus qu’à faire <BOUCLE_legal(ARTICLES){page}>

    Simplement bluffant ! Je me demandais s’il n’y avait pas une erreur dans le dernier code et par quelle magie... Bah oui, c’est bien rusé d’avoir choisi « page » pour ce champ car le squelette est appelé par l’adresse spip.php?page=legal et du coup on a #ENV{page} qui vaut justement « legal » et la seconde boucle dans ce contexte vaut la première ;-)

    • Ouais, sauf que cette partie va sûrement changer dans une prochaine version, car le nom de ce champ est justement trop problématique. Le nom « page » est utilisé dans plein d’endroits comme variable d’environnement de SPIP et du coup ça fait des conflits dans plusieurs contextes, notamment pour des formulaires.

      On changera sûrement pour « identifiant », ce qui uniformisera avec Menus, Formidable, etc. Et dans le même temps j’ajouterais le choix automatique du squelette du même nom que l’identifiant s’il existe. Du coup pas besoin d’utiliser des URLs super-moches « page=truc » mais la belles URL propre de l’article, et ça sélectionnera legal.html s’il existe, sinon article.html comme d’hab.

    • puisqu’il s’agit justement d’appel automatique du squelette du même nom, pourquoi ne pas l’appeler justement « squelette » au lieu de « identifiant » ? :) ça me semble aussi transparent que « page » ...(en espérant qu’il ne pose pas de souci lui)

    • Non non il n’y a aucun appel automatique, même si plus tard il pourrait y en avoir, et cet identifiant peut servir à bien d’autres choses.

    • ah d’accord. j’ai rêvé à plus tard :)

    • On changera sûrement pour « identifiant », ce qui uniformisera avec Menus, Formidable, etc. Et dans le même temps j’ajouterais le choix automatique du squelette du même nom que l’identifiant s’il existe.

      J’ai testé et l’appel d’une page avec identifiant téléscope celui du plugin menu quand c’est sur la même page et passé via #ENV , du coup j’ai du opté pour ’page-uid’…

      mais ptet j’my prends a l’envers ....

    • Pas tout compris. Si t’appelles un menu t’es censé lui passer son identifiant voulu pendant l’appel, donc je vois pas comment ça pourrait se télescoper.

    • Pendant mes essais en passant par l’url le le param &identifiant=_ma_page, la variable récupéré avec #ENVidentifiant était : _ma_page

      L’inclusion de ma noisette qui affiche les menus est ainsi :
      [(#INCLURE{fond=inclure/menu,identifiant=#ENV{identifiant,navprimary},env})]

      d’ou le problème, mais c’est plus de mon fait, si je passe le meme paramètre a mes inclusions c’est normal que ça agisse ainsi.

    Répondre à ce message

  • 7

    Salut,

    merci pour ce plugin que j’utilise sur la quasi totalité de mes sites. Très pratique !

    Une petite question : existe-t’il un moyen pour cacher le lien « Convertir en page » aux admins ?

    L’idée, c’est que je me sers des pages pour tout ce qui est « pages utiles » qui n’ont pas vocation à être dans le menu. Mais du coup, le lien porte confusion pour certains utilisateurs qui convertissent par inadvertance les articles en pages (la notion de page n’est pas évidente pour eux).

    Le top (pour moi en tout cas) serait en fait que les fonctions de création et conversion de Pages uniques soient paramétrable pour être inaccessible pour les non webmaster... Mais bon, peut-être que personne n’est dans ce cas.

    Bonne journée,

    jean marie

    • Moi aussi je les utilise pour ça (c’est le cas d’utilisation principal), mais justement, les admins complets, ce sont celleux qui ont les droits de gestion éditoriaux complets pour le site, y compris les menus du plugin Menus, etc. Donc que ce soit caché aux rédacs et admins restreints, je comprends, mais admins complets pas vraiment. Après ça pourrait être une autorisation spécifique (actuellement c’est article_modifier), ce qui permettrait de la surcharger…

    • Salut,

      merci pour ta réponse.

      Dans mon cas précis, une fois que j’ai mis en place les pages, les utilisateurs du site (rédacteurs ou admin), n’ont pas besoin d’en créer d’autres. Du coup, ça crée une confusion...
      D’ailleurs, j’installe également le plugin Autorité pour ne pas qu’ils puissent modifier la config du site et des plugins.

      Est-ce qu’il ne pourrait pas y avoir une option un peu comme ce qui existe dans Compostions ? Par ex, « Seul le webmaster peut créer et convertir des pages »... Si on la coche, le lien disparait.

      Jean Marie

    • Hop, j’ai aussi un problème équivalent sur un site où les admins restreints cliquent par erreur sur ce bouton « Convertir en page », du coup je le masque à l’arrache en passant par le pipeline boite_infos comme ceci :

      	if ($flux['args']['type'] == 'article' AND !autoriser('configurer')) {
      		$cherche = "/<span[^>]*class=('|\")icone s24 horizontale page-24.*?<\/span>/is";
      		if (preg_match($cherche,$flux['data']))
      			$flux['data'] = preg_replace($cherche,'', $flux['data']);
      	}

      Et zou :) En attendant mieux, ça fonctionne.

    • Salut b_b,

      merci pour cette « bidouille »...
      Par contre, je n’arrive pas à la faire fonctionner. En fait, je crois bien que je n’arrive pas avec les pipeline :/

      J’ai parcouru la doc ( http://programmer.spip.net/-Les-pipelines- ) et ainsi que http://aternatik.org/articles-et-ressources/bac-a-sable/article/exemple-d-utilisation-d-un et http://www.weblog.eliaz.fr/article105.html (site très intéressant d’ailleurs, tu devrais y jeter un œil ;) ) mais il me manque qqch visiblement...

      jean marie

    • Bonjour Jean-Marie,

      Même chose, confronté au problème, impossible à faire comprendre...
      Je me suis donc résolu à une solution des plus gores : changement d’icône ! voir ex en pièce jointe...
      En attendant mieux ;-)

    • En reprenant le code que je vous ai donné et en appliquant ce qui est écrit dans la documentation, on obtient ceci :

      Déclaration depuis plugins/dede/dede_pipelines.php pour un plugin avec le préfixe dede :

      // afficher le lien "Convertir en page" du plugin énponyme uniquement pour les admins complets
      function dede_ccas_boite_infos($flux){
      	if ($flux['args']['type'] == 'article' AND !autoriser('configurer')) {
      		$cherche = "/<span[^>]*class=('|\")icone s24 horizontale page-24.*?<\/span>/is";
      		if (preg_match($cherche,$flux['data']))
      			$flux['data'] = preg_replace($cherche,'', $flux['data']);
      	}
      	return $flux;
      }

      et la déclaration suivante dans plugins/dede/paquet.xml :

      <pipeline nom="boite_infos" inclure="skel_ccas_pipelines.php" ></pipeline>

      Déclaration sans plugin depuis config/mes_options.php :

      // afficher le lien "Convertir en page" du plugin énponyme uniquement pour les admins complets
      $GLOBALS['spip_pipeline']['boite_infos'] .= "|perso_boite_infos";
      
      function perso_boite_infos($flux){
      	if ($flux['args']['type'] == 'article' AND !autoriser('configurer')) {
      		$cherche = "/<span[^>]*class=('|\")icone s24 horizontale page-24.*?<\/span>/is";
      		if (preg_match($cherche,$flux['data']))
      			$flux['data'] = preg_replace($cherche,'', $flux['data']);
      	}
      	return $flux;
      }

      Voilà, j’espère que ça vous va, vous n’avez plus qu’à copier/coller maintenant :)

    • Ah, ben voilà pourquoi ça ne fonctionnait pas : un return $flux; s’est glissé en fin de code . C’est son absence dans les codes précédents qui nous faisait bêtement tourner en bourrique.

      Merci beaucoup d’avoir pris le temps de nous concocter une réponse aussi complète.

    Répondre à ce message

  • 5

    Bonjour,
    je rencontre un soucis pour créer un article unique sur un spip 3.0.10 ou 3.0.11 vide, fraîchement installé.

    Une fois le plugin installé en auto et activé, si je vais dans « Edition > Pages uniques » j’arrive sur une page titrée « Toutes les pages » suivi du texte « Il n’y a aucune page pour l’instant. » et dans la colonne de gauche « Raccourcis » suivi d’un lien « Créer une nouvelle page ».

    Si je valide ce lien, j’arrive bien sur un formulaire « article » en mode édition, je saisie mes infos et quand j’enregistre, la page reste en mode édition et rien n’est enregistré dans la base.

    Est-ce un comportement normal,
    1) faut-il commencer par créer une rubrique, puis un article ?
    2) modifier l’article en page unique puis supprimer la rubrique ?

    Merci d’avance pour vos retours.
    Cordialement

    • Oui les pages sont des articles classiques, et SPIP interdit la création d’un article s’il n’y aucun rubrique dans le site. Donc il manque encore soit un message expliquant ça (et sans les boutons de création), soit beaucoup mieux, modifier le comportement pour pouvoir créer des pages uniques même sans rubrique.

    • Autre soucis constaté assez gênant.
      Lorsque un article est converti en page, toute modification ne peut être enregistrée.
      Je suppose que SPIP interdit aussi la modification d’un article qui n’est pas dans une rubrique.

    • Désolé, je n’ai pas encore eu le temps de tenter de reproduire la même chose chez moi. Mais avant, as-tu fais tes tests en désactivé tous les plugins non nécessaires ?

    • Bonjour,
      j’ai fais un test en ne conservant que les plugins indispensables : menus 1.4.5 ; nospam 1.5.4 ; page 1.0.2 ; saisies pour formulaires 1.31.4 ; spip proprio 1.70.0 ; z-dist v1- 1.7.21.

      En revanche, pour un site n’ayant qu’une seule rubrique, si je converti tous les articles de cette rubrique en page unique et *sans supprimer* la rubrique, alors les articles sont modifiable à souhait. C’est ma solution de dépannage.
      cordialement

    • Bonjour

      Suite au besoin d’avoir des articles sans aucune rubrique, je viens de pousser un correctif qui va dans ce sens. Il est testé sous spip 3.0.15.
      Avec ce correctif, on peut s’affranchir de la présence de toute rubrique pour créer et/ou modifier des pages.

    Répondre à ce message

  • 4

    Bonjour,

    Je n’arrive plus à mettre à jour des pages uniques, alors que tout fonctionnait deux mois auparavant. J’ai par exemple une page unique ayant pour champ titre « Réalisations » (en EN « References »), pour champ Page « Références » (à la fois FR et EN). Si je modifie cette page, simplement en ajoutant un espace dans le corps du texte et que j’enregistre les modifications, j’ai le message d’erreur « Charactères alphanumériques en minuscules ou « _ » uniquement » apparaissant dans le champ Page.
    J’utilise SPIP 3.0.10 [20600] et la version 1.0.5 SVN [79192] du plugin Pages.
    Merci pour votre aide,

    Cordialement,
    Jean

    Répondre à ce message

  • 4

    Bonjour,

    je crois que le fonctionnement a changé depuis la mise à jour, ce qui ne me paraît normal…

    j’ai pour habitude de saisir dans le champ « page » une valeur générique, par exemple « entete » pour tous les liens d’en-tête, « piedpage » pour tous les liens de bas de page etc. Chaque page dans sa série étant classée par le préfixe numéroté, exemple : « 1. Contact », « 2. À propos », …

    Or, avec la dernière version que j’ai téléchargée une erreur fait que je ne peux attribuer à plus d’une page la même valeur pour champ « page ».

    Le plugin fonctionne ainsi depuis des années, pourquoi avoir subitement modifié son fonctionnement ?

    • C’était un manque de test d’unicité qu’il y avait avant, et il a été rajouté par Tcharlss. Je sais bien effectivement que lorsqu’un chose est possible, au moins une personne l’utilise. :)

      Mais cette possibilité de regrouper des pages ensemble en utilisant l’identifiant de page n’est pas censé être gardé. En effet, ce plugin ne devrait pas avoir pour but de « ranger autrement » des pages ensembles, puisqu’à l’inverse son but est avant tout de pouvoir créer des pages rangées nulle part.
      Il faudrait donc peut-être changer le numéro de version majeure, pour signifier qu’il y a une perte de compatibilité non négligeable.

      Pour ranger ensemble, il y a des rubriques (ou des mots), mais aussi surtout il y a le plugin Menus qui correspond à ce que tu décris : générer des menus avec des pages diverses et variées.

    • Bonjour,

      Je complète le message de Rastapopoulos : c’est bien moi qui ai mis la pagaille en faisant quelques ajouts au plugin qui ont occasionné des problèmes de rétro-compatibilité dans certains cas. Concrètement j’ai rajouté des vérifications sur la saisie de l’identifiant d’une page pour empêcher les utilisations non « voulues » : l’idée est que l’identifiant doit être unique, sans caractère accentué ni espace.

      Il y a une discussion sur la liste pour savoir si c’était une bonne idée ou pas, en attendant je te conseille d’utiliser la version précédente, téléchargeable ici : http://zone.spip.org/trac/spip-zone/changeset/77174/_plugins_/pages/trunk?old_path=/&format=zip

    • merci pour le lien

    • merci pour le lien, j’étais déjà passé en version antérieure, je comprends le principe.

    Répondre à ce message

  • 1

    Bonjour,
    Impossible de télécharger le plug in Page pour la version 3.0 de Spip. Le lien est rompu

    • Oui pour une raison inconnu ça n’a pas été mis à jour automatiquement suite aux modifications de ZIP qu’il y a eu il y a quelques semaines. Du coup je l’ai fait à la main là. Mais c’est bizarre.

    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