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. Accolée à une boite 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 nom de page (qui peut être, par exemple, le nom d’un squelette).

Afficher les pages sur son site

C’est très simple, puisque les pages sont des articles comme les autres, ils n’ont juste pas de rubrique [1] .

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>
  • Et mieux encore, avoir un squelette « legal.html » dédié, dans lequel on n’a plus qu’à faire <BOUCLE_legal(ARTICLES){page}>

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.

Notes

[1Chaque page unique a un id_rubrique=-1 : on peut les filtrer/éliminer d’une boucle article par le critère {id_rubrique>0} ou plus simplement {page=''}

Discussion

86 discussions

  • 2
    stefdn

    Bonjour,

    Les contenus des pages uniques ne sont pas indexés par le plugin Fulltext :
    -  2 articles identiques, l’un en Page , l’autre « normal » dans une rubrique ;
    -  recherche Fulltext sur un bout de phrase entre guillemets ;
    -  seul l’article « normal » ressort.

    Comme je n’ai pas trouvé grand chose sur le sujet :o/ je me demande si c’est normal ? Y a-t-il un moyen de les indexer ?

    Merci pour vos lumières


    -  Apache/2.2.22 (Debian)
    -  MySQL : 5.5.47-0+deb7uw-log
    -  Extension PHP : mysqli
    -  PHP Version 5.4.45-0+deb7u2

    -  SPIP 3.1.1 [22913]
    -  Fulltext 1.1.11
    - - /.../.../pdftotext
    -  Pages 1.3.0

    • Fulltext n’indexe rien du tout, enfin pas comme tu le penses là, c’est une recherche direct dans les tables demandées.

      Ya pas de « boucle Fulltext » quoi , ce sont des boucles (ARTICLES) ou autres habituelles.

      Par contre par défaut les boucles d’articles ne sortent PAS les pages uniques, tant que tu n’as pas de critère {tout}, {page} ou {id_rubrique}. Mais pour « page » par exemple, tu peux mettre le «  ? » pour que ce ne soit pas appliqué par défaut, ça fera quand même faire apparaitre les pages à priori.

    • stefdn

      Merci !

      Sur une boucle ARTICLES

      {recherche}

      , sortie de la dist, le critère

      {page?}

      ne retourne rien

      Par contre,

      {tout}

      passe :o)

    Répondre à ce message

  • 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

  • 4

    Bonjour,

    En squellette sommaire.html, j’ai une boucle qui liste les articles d’un mot-clé « carreau »,
    mais je ne comprend pas pourquoi il ne liste pas les pages uniques portant ce même mot-clé « carreau ».

    voici ma boucle :

    <BOUCLE_carreaux(ARTICLES) {titre_mot=carreau}> 
     
    #TITRE<br>
    [(#LOGO_ARTICLE{#URL_ARTICLE})]
     
    </BOUCLE_carreaux>

    Une idée ?

    Merci d’avance.

    • parce que le principe des pages uniques est d’etre exclus des boucles articles, sauf si on demande explicitement un id_article précis ou une page précise.

      Actuellement je ne vois pas de solution « propre » pour obtenir ton comportement. Il y a bien {id_article?} mais c’est risqué, car si tu a un id_article passé en environnement, ca pète.

      Donc il faudrait améliorer le plugin. Rastapopoulos, que pense tu d’un critère {page_peu_importe} ?

    • Euh, il suffit juste d’utiliser le critère {tout}.

    • a oui, j’ai loupé cela en relisant le code. donc j’ai rien dit ;-) donc Fennec72 tu a ta réponse.

    • c’était bien cela :

      <BOUCLE_carreaux(ARTICLES) {tout}{titre_mot=carreau}> 
       
      #TITRE<br>
      [(#LOGO_ARTICLE{#URL_ARTICLE})]
       
      </BOUCLE_carreaux>

      Merci

    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

Ajouter un commentaire

Qui êtes-vous ?

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

Ajoutez votre commentaire ici

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

Dernière modification de cette page le 17 mai 2018