Menu | Contenu | Retour | Actualités | Progression | Rechercher | Pied de page | Accessibilité | Plan du site | Accueil
Imprimer | Plan du site |

Bernard-Paul Eminet - 06 73 42 90 23 - Drupal | SPIP | Claroline | Formateur - Développeur - français/anglais

Lire aussi
  • Lire avant de commencer
  • Origine et tonalité de ces contributions
  • Un site avec SPIP ça coûte combien ?
  • SPIP est un outil très performant. Mais combien peut se facturer un site de contenu réalisé avec (...)
  • SPIP or not SPIP
  • La question à 10 balles : dites les gars, j’ai démarré avec SPIP mais j’ai un doute. L’outil est-il (...)
  • Droits sur le design d’un logo
  • Quelques éléments concernant la protection d’une création
  • Collaboration graphiste-développeur
  • Voila, je vais travailler en collaboration avec un graphiste pour mettre en place des sites (...)
  • Un formulaire en format PDF qui ne s’enregistre pas
  • J’ai fait un formulaire avec Adobe Designer, quand je passe le fichier PDF à quelqu’un d’autre, (...)
  • Vous avez dit FOAD ? - FOAD et handicap
  • Réaction à diverses contributions concernant la Formation à distance
  • À bas la pensée unique
  • Contribution coup de gueule concernant le ton un peu condescendant de certains...
    Accueil du site « Articles et contributions « Contributions diverses « Rubrique virtuelle avec SPIP
    Diminuer la taille des caractères Augmenter la taille des caractères

    Rubrique virtuelle avec SPIP

    Avec SPIP, est-il possible de créer une rubrique virtuelle comme les articles ?

    Une rubrique virtuelle

    Source : contribution (+ compléments) sur le serveur de news de SPIP

    - Question

    Est-il possible de créer une rubrique virtuelle comme les articles ?

    - Réponse (extraits)

    Je crois qu’il faut préciser un peu - il s’agit de deux actions qui "s’imbriquent" l’une dans l’autre.

    - Action 1

    Lors de la navigation, si dans une rubrique, il n’y a qu’un seul article, au lieu d’afficher un "bête" lien vers cet article, on affiche directement l’article. Le code est à placer dans le squelette rubrique et on lui laisse "vivre sa vie"... et il fait son travail.

    • Il y a plusieurs articles dans la rubrique - Il affiche dans le squelette rubrique les liens vers les articles - comme normal.
    • Il n’y a qu’un seul article dans la rubrique, le lien vers la rubrique affiche directement l’article dans un squelette article.
    • Il y a une troisième situation : la rubrique ne contient aucun article. Elle ne contient que des sous-rubriques. Dans cette situation on fait comme normal

    - Action 2

    Cette action est plus de l’astuce et une utilisation habile des options de SPIP. Si l’article unique de la rubrique est virtuel - possédant donc un lien de redirection. Au lieu d’être affiché, il fait ce qu’on lui demande de faire, à savoir se rediriger vers une URL.

    En résumé une rubrique virtuelle est une rubrique qui contient un article UNIQUE virtuel (avec redirection). Le squelette rubrique contient le code qui va bien pour réaliser un test pour voir s’il n’y a qu’un seul article dans la rubrique, si oui il envoie l’article et donc la redirection.

    Cette contribution mélange les deux concepts mais peut être utilisée dans la situation suivante : Une rubrique ne contient qu’un seul article donc le lien vers la rubrique va directement vers l’article.

    Solution 1 : avec du PHP

    <!-- Affichage du titre de la rubrique -->
    <BOUCLE_rubrique1(RUBRIQUES) {id_rubrique}>
    [(#TITRE|supprimer_numero)]
    </BOUCLE_rubrique1>
           
    <!--  Affichage des sous-rubriques de la rubrique -->
    <!-- si dans une rubrique, il n'y a qu'un seul article -->
    <!-- on va directement à ce dernier en cliquant sur le titre de la rubrique -->               
    <BOUCLE_sous_rubriques1(RUBRIQUES) {id_parent} {par num titre}>
    <!-- on récupère dans deux variables php le titre et le descriptif de la rubrique -->       
    <?php $ledescriptif = '[(#DESCRIPTIF|texte_script)]';
    $letitre='[(#TITRE|texte_script|supprimer_numero)]';
    ?>       
    <!-- on teste s'il existe un deuxième article dans la rubrique -->
    <BOUCLE_articles_plusdun(ARTICLES) {id_rubrique} {1,1}>
    <!-- si oui on affiche le titre de la rubrique qui pointe vers la rubrique (comme normal) -->               
    <a href="[(#URL_RUBRIQUE)]" title="<? echo $ledescriptif; ?>"><? echo $letitre; ?></a>
    <ul><? echo $ledescriptif; ?> </ul>

    </BOUCLE_articles_plusdun>
    <!-- si non on teste s'il y a au moins un article -->       
    <BOUCLE_articles_unseul(ARTICLES) {id_rubrique} {0,1}>
    <!-- si oui on affiche le titre de la rubrique qui pointe vers l'unique article directement -->       
    <a href="[(#URL_ARTICLE)]" title="<? echo $ledescriptif; ?>"><? echo $letitre; ?></a>
    <ul><? echo $ledescriptif; ?> </ul>
                   
    </BOUCLE_articles_unseul>
    <!-- s'il n'y a aucun article on affiche le titre de la rubrique qui pointe vers la rubrique (comme normal) -->
    <a href="[(#URL_RUBRIQUE)]" title="<? echo $ledescriptif; ?>"><? echo $letitre; ?></a>
    <ul><? echo $ledescriptif; ?> </ul>
    <//B_articles_unseul>
    <//B_articles_plusdun>
    </BOUCLE_sous_rubriques1>       


    <!--  Affichage des article de la rubrique s'il y en a -->
    <BOUCLE_articles(ARTICLES) {id_rubrique} {par num titre}>
    <a href="#URL_ARTICLE" title="[(#DESCRIPTIF|textebrut|entites_html)]">
    [(#TITRE|supprimer_numero)]</a>
    <ul>[(#DESCRIPTIF)] </ul>
    </BOUCLE_articles>

    Solution 2 : sans PHP

    - Solution "générique" pour tester la méthode.

    <!-- **************************************************** -->
    <!-- si dans une rubrique, il n'y a qu'un seul article -->
    <!-- on va directement à ce dernier en cliquant sur le titre de la rubrique -->
    <!-- **************************************************** -->
    <!-- pour la rubrique de contexte -->
    <!-- **************************************************** -->
    <!-- on teste s'il existe un deuxième article dans la rubrique -->
        <B_articles_plusdun>
                   <BOUCLE_articles_plusdun(ARTICLES) {id_rubrique} {1,1}>
    <!-- si oui on fait comme normal -->
    Texte affiché (pour tester) : Il y a plusieurs articles dans la rubrique
                   </BOUCLE_articles_plusdun>
    <!-- **************************************************** -->
    <!-- si non on teste s'il y a au moins un article -->
            <B_articles_unseul>
                   <BOUCLE_articles_unseul(ARTICLES) {id_rubrique} {0,1}>
    <!-- si oui on envoie l'article -->
    Texte affiché (pour tester) : Il n'y a qu'un article dans la rubrique
                   </BOUCLE_articles_unseul>
                   </B_articles_unseul>
    <!-- il n'y a aucun article dans la rubrique ie il n'y a que des sous-rubrique -->
    <!-- on fait comme normal -->
    Texte affiché (pour tester) : Il y a des sous-rubriques dans la rubrique
            <//B_articles_unseul>
                <//B_articles_plusdun>
    <!-- ******************************************** -->

    - Solution complète

    Il faudra modifier les styles...
    Cette méthode utilise la notion de balise non ambiguë

    <!-- **************************************************** -->
    <!-- Affichage des sous-rubriques de la rubrique -->
    <!-- si dans une rubrique, il n'y a qu'un seul article -->
    <!-- on va directement à ce dernier en cliquant sur le titre de la rubrique -->
    <BOUCLE_sous_rubriques1(RUBRIQUES) {id_parent} {par num titre}>
    <!-- on teste s'il existe un deuxième article dans la rubrique -->
            <BOUCLE_articles_plusdun(ARTICLES) {id_rubrique} {1,1}>
    <!-- si oui on affiche le titre de la rubrique qui pointe vers la rubrique (comme normal) -->
                    [(#LOGO_RUBRIQUE|left|#URL_RUBRIQUE)]
                    <div class="descriptif">
                    <li><img src="images/pucefleche.gif">
    <!-- Utilisation de la notion de balise non ambiguë -->
                    <a href="[(#URL_RUBRIQUE)]" title="[(#_sous_rubriques1:DESCRIPTIF|textebrut|entites_html)]">[(#_sous_rubriques1:TITRE|supprimer_numero)]</a>
                    <br />
    <!-- On est dans le contexte de l'article -->
    <!-- Il faut remonter au contexte de la rubrique -->
                            <ul class="liensartrub">
                                    <BOUCLE_rubart(RUBRIQUES) {id_rubrique}>
                                                            <BOUCLE_artrub(ARTICLES){id_rubrique}>
                                                            <li><a href="#URL_ARTICLE" title="[(#DESCRIPTIF|textebrut|entites_html)]"> [(#TITRE|supprimer_numero)]</a> |</li>
                                                            </BOUCLE_artrub>
                                            <//B_motcledescr1>
                                    </BOUCLE_rubart>
                            </ul>
                    </li>
                    </div>
                    <div class="clearleft">&nbsp;</div>
            </BOUCLE_articles_plusdun>
    <!-- **************************************************** -->
    <!-- si non on teste s'il y a au moins un article -->
              <BOUCLE_articles_unseul(ARTICLES) {id_rubrique} {0,1}>
    <!-- si oui on affiche le titre de la rubrique qui pointe vers l'unique article directement -->
               [(#LOGO_ARTICLE|left|#URL_ARTICLE)]
                      <div class="descriptif">
                         <li><img src="images/pucefleche.gif">
    <!-- Utilisation de la notion de balise non ambiguë -->
                          <a href="[(#URL_ARTICLE)]" title="[(#_sous_rubriques1:DESCRIPTIF|textebrut|entites_html)]">[(#_sous_rubriques1:TITRE|supprimer_numero)]</a>
                                    <ul class="liensartrub">
                                    [<a href="#URL_ARTICLE">(#TITRE|supprimer_numero)</a>]
                                    [ <br /><a href="#URL_ARTICLE">(#INTRODUCTION|couper{200})&nbsp;</a>
                                    <a href="#URL_ARTICLE"><img src="images/bouton_suite.gif" border="0" align="top" alt="<:lire_la_suite:>" title="<:lire_la_suite:>"></a>]
                                    </ul>
                         </li>
               </div>
                    <div class="clearleft">&nbsp;</div>
            </BOUCLE_articles_unseul>

    <!-- il n'y a aucun article dans la rubrique ie il n'y a que des sous-rubriques -->
    <!-- on affiche le titre de la rubrique qui pointe vers la rubrique (comme normal) -->
                    [(#LOGO_RUBRIQUE|left|#URL_RUBRIQUE)]
                    <div class="descriptif">
                         <li><img src="images/pucefleche.gif">
    <!-- Utilisation de la notion de balise non ambiguë -->
                                    <a href="[(#URL_RUBRIQUE)]" title="[(#_sous_rubriques1:DESCRIPTIF|textebrut|entites_html)]">[(#_sous_rubriques1:TITRE|supprimer_numero)]</a>
    <!-- Il faut remonter au contexte de la rubrique -->
                            <ul class="liensartrub">
                                    <BOUCLE_rubart2(RUBRIQUES) {id_rubrique}>
    <!-- Affichage sous le titre de la rubrique -->
    <!-- On affiche les liens vers les titres de ses rubriques -->
                                                    <BOUCLE_artrub2(RUBRIQUES){id_parent}>
                                                    <li><a href="#URL_RUBRIQUE" title="[(#DESCRIPTIF|textebrut|entites_html)]"> [(#TITRE|supprimer_numero)]</a> |</li>
                                                    </BOUCLE_artrub2>
                                    </BOUCLE_rubart2>
                            </ul>
                        </li>
                    </div>
                    <div class="clearleft">&nbsp;</div>
       <//B_articles_unseul>
            <//B_articles_plusdun>
    </BOUCLE_sous_rubriques1>
    <!-- ******************************************** -->

    On va directement vers l’article... ???

    Voici un code sympa à intégrer dans la partie du code concernant la situation : la rubrique ne contient qu’un seul article.

    S’il n’y a qu’un article dans la rubrique alors :

    <INCLURE{fond=inc-static}{id_rubrique=#ID_RUBRIQUE}>

    Et dans le fichier inc-static.html

    <BOUCLE_article_principal(ARTICLES) {id_rubrique}>
    <?php header('Location: #URL_ARTICLE'); exit; ?>
    </BOUCLE_article_principal>

    C’est bien tout cela, mais il n’y aurait pas plus simple ?

    ... par hasard ? M’sieur...

    On parle ici de la situation : une rubrique ne contient qu’un seul article donc le lien sur la rubrique va directement vers l’article... Certe...

    Dans l’arborescence "générique" du site une telle situation devrait être temporaire. En théorie, si une rubrique ne contient qu’un article, ce dernier devrait être situé dans sa rubrique "grand-mère"... non ?

    Oui, mais la rubrique concernée est située à la racine du site...

    Dans cette situation, pourquoi ne pas "déporter" le texte de l’article dans le texte explicatif de la rubrique ?
    On ne pense jamais assez au texte explicatif d’une rubrique...

    Dans cette situation la rubrique ne contient... aucun article, tout simplement.

    Oui, mais dans cette situation, la rubrique (qui ne contient aucun article publié) ne devrait pas apparaître dans la partie publique du site.
    Certe... Cette règle semble "gravée dans le marbre" : Une rubrique qui ne contient pas d’article publié n’apparaît pas en ligne.
    Pour être plus complet : une rubrique qui ne contient pas d’article publié ou des sous-rubriques qui contiennent des articles publiés n’apparaît pas en ligne

    Cette règle - malheureusement - est généralement mal interprètée et surtout incorrecte.
    La règle exacte est la suivante : "Une rubrique qui ne contient pas de contenu n’apparaît pas en ligne".

    Donc si la rubrique contient un texte descriptif, c’est bon ?
    Non parce que le texte descriptif d’une rubrique n’est pas un contenu mais un attribut de la rubrique.

    Que serait un contenu pour la rubrique ?
    Tout simplement un document, une image ou un site syndiqué associé à la rubrique.

    Dans le cas d’une image ou d’un document, il faut que la configuration du site le permette.

    Donc si j’associe un document ou une image à la rubrique, elle apparaîtra en ligne ?
    Ben oui...

    L’image et le document ne sont évidemment pas intégré dans le texte explicatif de la rubrique.
    Si oui il suffit d’associer une image du genre rien.gif qui ne contient qu’un pixel transparent.

    Dans cette situation, la rubrique est "auto-applicable". Elle ne contient aucun article, son texte explicatif (et/ou son descriptif) est suffisant pour la décrire.

    Bonne idée :
    Faire un fichier PDF (doc_bidon.pdf) qui contient le texte suivant : "Ce document ne sert à rien, sinon à publier en ligne la rubrique associée".