Découper un texte en pages et/ou en onglets

Un nouveau raccourci typographique qui découpe le texte de vos rubriques ou de vos articles en plusieurs pages, ou crée pour vous des onglets... Rubis sur ongle !

Introduction

Les articles de votre site sont parfois un peu longs et vous vous êtes probablement déjà posé la question de savoir comment alléger vos belles tirades...

Que faire, donc, avec un couteau suisse ? Eh bien une découpe !

Voici notre solution : dans vos textes, il vous suffit d’utiliser quatre signes plus consécutifs (« ++++ ») à l’endroit où doit se trouver la coupure. Ce raccourci n’est pas sans rappeler les quatre signes moins consécutifs (« ---- ») qui indiquent à SPIP l’emplacement d’une ligne horizontale.

L’outil va ensuite ajouter automatiquement une petite zone de navigation en haut et en bas de votre texte, qui peut ressembler à ceci :

Si un extrait du texte est :

met jamais en quatre !
 
++++
 
Le chant à un : c'est le chant du palais

Alors, en passant la souris sur le chiffre « 2 », vous obtiendrez :

En passant la souris sur les liens de navigation, vous apercevez ci-dessus qu’un titre apparaît : il s’agit en fait du début de la première phrase de la page ciblée. Il pourrait également s’agir du premier titre... A vous de composer !

Lorsque votre article comporte plus de quatre pages, alors la navigation prend une forme plus complexe :

Un petit conseil : à l’intérieur de votre texte, il vaut mieux isoler ce raccourci en sautant une ligne de part et d’autre, SPIP saura alors mieux formater vos paragraphes. Vérifiez également qu’aucune balise HTML ou raccourci SPIP ne traverse les quatre plus (« ++++ ») : vous risquez d’endommager l’aspect de votre site, car chaque page ainsi découpée est considérée comme indépendante. Évitez par exemple :

{{Voici une fin de page en gras
 
++++
 
Voici un début de page en gras}}

La bonne syntaxe est :

{{Voici une fin de page en gras}}
 
++++
 
{{Voici un début de page en gras}}

Installation

Cet outil est une fonctionnalité du plugin « Le Couteau Suisse » que vous pouvez trouver ici : Le Couteau Suisse.

Pour avoir accès à la découpe de vos textes en plusieurs pages, il vous faut donc avoir installé ce plugin en suivant la procédure normale d’installation des plugins SPIP.

Ensuite, veuillez activer l’outil « Découpe un texte en pages » en vous rendant sur la page d’administration du plugin en espace privé (Bouton Configuration, et onglet "Le Couteau Suisse").

Petite astuce : afin d’éviter que le raccourci « ++++ » se retrouve automatiquement dans les résumés produits par la balise #INTRODUCTION, activez aussi l’outil « Balise #INTRODUCTION ».

Notes techniques

-  Techniquement parlant, cet outil agit sur toutes les balises #TEXTE trouvées dans vos squelettes et insère une coupure là où il trouve quatre signes plus (« ++++ »). Vous pouvez donc insérer des découpages dans vos articles, vos textes de rubrique, etc.

-  Une condition est cependant nécessaire : la découpe en page ne fonctionnera pas si votre squelette utilise la balise #TEXTE étoilée #TEXTE* »). En effet, cette syntaxe permet de s’affranchir de tous les filtres automatiques et SPIP renvoie donc le texte brut sans aucune transformation. Si vous tenez absolument à mettre une étoile, alors il faut ajouter à votre balise le filtre cs_decoupe, comme ceci : [(#TEXTE*|propre|cs_decoupe)]

-  Le plugin fonctionne tel quel avec la dist de SPIP. Cependant, si votre squelette est construit avec des inclusions, alors il est indispensable de transmettre à la noisette l’indicateur de page {artpage}, ainsi que les options éventuelles {cs} du Couteau Suisse. Par exemple :

<div id="page">
    <div id="contenu">
    <INCLURE {fond=inc-article-corps}{id_article}{id_rubrique}{artpage}{cs}>
    </div>
</div>

Notez que l’argument {env} vous permet de transmettre tout l’environnement au squelette inclus :

<div id="page">
    <div id="contenu">
    <INCLURE {fond=inc-article-corps}{env}>
    </div>
</div>

-  Le développement décrit dans le présent article est inspiré d’un ancien filtre que vous pouvez encore trouver ici : Découper un article en plusieurs pages. Afin d’assurer la compatibilité avec le séparateur « ----- », ajoutez le code suivant à votre fichier config/mes_options.php :

// Compatibilite ascendante avec l'ancien filtre 'decoupe'
@define('_decoupe_COMPATIBILITE', '-----');

Cette constante peut également servir à créer un nouveau raccourci de découpe.

Balise #CS_DECOUPE

Par défaut, le Couteau Suisse insère la pagination en tête et en pied d’article automatiquement. Mais vous avez la possibilité de placer cette pagination ailleurs dans votre squelette qu’en tête de votre article grâce à une balise #CS_DECOUPE. L’utilisation de cette balise doit être activée dans la page de configuration et annule ainsi l’insertion automatique des paginations dans votre article.

Cette balise renvoie la pagination seule quand elle existe (quand l’article est découpé), et se comporte un peu comme la balise #TEXTE : elle doit être placée à l’intérieur d’une boucle ARTICLES. Depuis la version 1.8.36.01 du Couteau Suisse, la balise #CS_DECOUPE accepte un paramètre numérique permettant d’accéder directement à un article par son id_article, évitant ainsi une boucle dédiée.

Exemples : #CS_DECOUPE{2}, #CS_DECOUPE{#GET{toto}} ou #CS_DECOUPE{#ENV{id_article}}.

Attention, ce raccourci ne doit pas être utilisé à l’intérieur d’une boucle du même article, sous peine d’un appel SQL inutile. Exemple évident à éviter : <BOUCLE01(ARTICLES)>#CS_DECOUPE{#ID_ARTICLE}</BOUCLE01>

Les Surcharges

Les images

Si vous désirez changer les images utilisées pour la navigation (par défaut, ce sont de petits triangles noirs), il est préférable de recopier le dossier couteau_suisse/img/decoupe/ directement dans votre squelette. En effet, SPIP va d’abord chercher le dossier en question dans votre squelette avant d’aller explorer les répertoires du plugin : c’est le mécanisme des surcharges. Du coup, vous pouvez créer un dossier monsquelette/img/decoupe/ afin de remplacer celui du Couteau Suisse et y mettre vos propres images. Ainsi, la mise à jour de votre plugin à tendance helvétique préféré pourra se faire sans crainte de perdre votre personnalisation.

Les images doivent obligatoirement se nommer ainsi : debut.gif, debut_off.gif, precedent.gif, precedent_off.gif, suivant.gif, suivant_off.gif, fin.gif, fin_off.gif. Si debut.gif ou fin.gif n’est pas trouvé, alors les images precedent.gif ou suivant.gif seront doublées (cf l’exemple ci-dessus).

Les fonds

Si les fonds proposés par défaut pour la pagination ne vous satisfont pas, alors il suffit pour vous de les surcharger dans votre propre squelette (y copier les originaux avant de les modifier). Les fichiers en question sont : fonds/decoupe_item.html (calcul des numéros) et fonds/decoupe.html (inclusion du fond précédent et ajout des flèches de navigation). Toutes les possibilités CSS vous seront alors ouvertes !

Attention : toute modification d’un fichier ou d’un dossier surchargé nécessite une recompilation des outils du Couteau suisse, obtenue en se rendant simplement sur la page de configuration du plugin ou en ré-affichant celle-ci.

La découpe en AJAX

AJAX est une petite merveille qui permet d’isoler un fragment HTML au sein d’une page et réagissant aux localement clics. En gros, plus besoin de charger la page entière pour en modifier seulement qu’une partie... Ici, la découpe de vos articles se marie très bien avec cette idée, puisqu’il n’est pas nécessaire de tout reconstruire la page (les menus, les entêtes, etc.) alors qu’on ne fait que changer de fragment d’article découpé, comme si on feuilletait les pages d’un livre.

Si vous êtes sous SPIP 2.0 minimum, on continue, sinon, sautez à l’intertitre suivant en attendant de mettre à jour votre CMS préféré.

Pour mettre en place un fragment AJAX, il faut isoler ce qui concerne l’article proprement dit dans un fichier à part que l’on nommera inc-article-corps.html, et y mettre par exemple la boucle suivante (mettez-y, bien sûr, le contenu que vous voulez, le plus important, c’est d’y avoir la balise #TEXTE) :

<div class="inc_article">
<BOUCLE_inc_article(ARTICLES){id_article}>
	<div class="#EDIT{titre} titrearticle">#TITRE</div>
	[<div class="#EDIT{chapo} chapo">(#CHAPO)</div>]
	<div class="#EDIT{texte} texte">#TEXTE</div>
</BOUCLE_inc_article>
</div>

Ensuite, dans votre fichier article.html, censé afficher la page complète, mettez simplement quelque chose comme :

<BOUCLE_article_page(ARTICLES){id_article}>
<!DOCTYPE bla bla bla>
<head>bla bla bla, notamment un #TITRE</head>
<body>
Divers trucs de présentation, avant...
... Et surtout :
	<INCLURE{fond=inc-article-corps}{ajax}{id_article}{artpage}{cs}>
Divers trucs de présentation, après...
</body>
</html>
</BOUCLE_article_page>
</B_article_page>
<INCLUDE{fond=404}>
<//B_article_page>

Avec ce mécanisme, la pagination ne fonctionnera qu’à l’intérieur du <div class="inc_article"> et un clic de souris ne rechargera pas la page entière, mais bien le seul fragment concernant les contenus SPIP de votre article (dans l’exemple ci-dessus : le titre, le chapo éventuel et le texte).

Notez le critère magique {ajax} disponible à partir de SPIP 2.0, l’id de l’article {id_article} nécessaire à la boucle BOUCLE_inc_article, l’indispensable indicateur de page {artpage} à transmettre au fragment, et les options éventuelles {cs} du Couteau Suisse.

Les filtres

Un paramètre artpage ajouté à l’URL de votre article permet au plugin de connaître le numéro de la page à afficher. Il est composé de deux nombres séparés par un tiret : artpage=PC-NB, où PC est le numéro de la page en cours et NB est le nombre total de pages.

Il existe trois filtres pour tirer partie de ce paramètre :

-  artpage($artpage=false, $index=0) : renvoie l’un ou l’autre des deux nombres.
Par défaut (si $index=0), la fonction renvoie la page en cours.
Si $index=1, la fonction renvoie le nombre de pages. Attention : si ce nombre est absent du paramètre artpage ou si ce paramètre est introuvable, alors la fonction renvoie 0.

-  artpage_fin($artpage=false) : renvoie vrai si la page en cours est la dernière. Si le nombre de pages est absent du paramètre artpage ou si ce paramètre est introuvable, alors la fonction renvoie faux.

-  artpage_debut($artpage=false) : renvoie vrai si la page en cours est la première.

Dans vos squelettes, il vous uffit donc d’utiliser :

-  #ENV{artpage}|artpage pour la page en cours
-  #ENV{artpage}|artpage{1} pour le nb de pages, s’il est présent

Deux exemples équivalents :

-  [(#ENV{artpage}|artpage|=={1}|oui) Youpi, ceci est la première page !]
-  [(#ENV{artpage}|artpage_debut|oui) Youpi, ceci est la première page !]

Notez que le filtre oui est introduit par SPIP 2.0. Il permet de rendre vraie une expression au sens SPIP et doit notamment être appliqué sur un filtre de type boolean (vrai/faux). Pour les versions antérieures de SPIP, les exemples précédents sont également valides : le Couteau Suisse contient les filtres oui et non dans ses fonctions et vous permet de les utiliser sans crainte dans vos squelettes.

Astuces

-  En manipulant les styles css, Il vous est possible de désactiver une des deux lignes de navigation (ou les deux si vous le souhaitez, mais le bon sens n’y vois aucun intérêt !). Dans le head de votre squelette ou dans un fichier css, il vous suffit d’insérer « div.decoupe_haut{display:none !important;} » pour supprimer la navigation placée en haut du texte, et « div.decoupe_bas{display:none !important;} » pour supprimer celle d’en bas.

-  Dans les fichiers de votre squelette, vous avez peut-être une balise #TEXTE destinée à l’impression du texte complet, non découpé en pages. Le Couteau Suisse met à votre disposition un filtre « cs_imprimer » qui produira le texte dans son ensemble, où les pages sont simplement séparées par un mince filet pointillé. La syntaxe pourrait être celle-ci : [(#TEXTE*|cs_imprimer|propre)]. Mais ceci est un peu lourd, lisez le point suivant.

-  Dans votre navigateur, ajouter à l’adresse d’une page le paramêtre « cs=print » permet d’obtenir le même effet décrit ci-dessus et force le Couteau Suisse à afficher l’article entier. Par exemple : www.monsite.ici/spip?article999&cs=print
Aussi, ce paramétrage est automatique dans les squelettes suivants : « print.html », « imprimer.html », « imprimir_articulo.html », « imprimir_breve.html » ou « article_pdf.html » (donc ici : « page=print », « page=imprimer », etc.). Lisez ici le paragraphe « Particularités » pour en savoir davantage.

-  Le découpage d’un article peut permettre très facilement de se composer rapidement un diaporama que vous pouvez éventuellement commenter (astuce de Ch. Guigueno). Il suffit de placer une photo par page et le tour est joué ! Voici un exemple (emb1 et emb2 doivent être des images) :

{{{Mon titre 1}}}
Voici ma photo 1 : <emb1|center>
<center>{Remarquez ces couleurs !}</center>
++++
{{{Mon titre 2}}}
Voici ma photo 2 : <emb2|center>
<center>{Remarquez ces textures !}</center>
++++
etc. !

-  Cet outil « Découpe un texte en pages » se marie très bien avec l’utilisation d’un outil voisin, le Sommaire Automatique : « Un sommaire pour vos articles ». Si ce dernier est activé, le sommaire détecte en effet les découpages et ajoute le numéro de la page où les différents intertitres SPIP ont été trouvés.

Les onglets dans vos articles

Vous pouvez trouver de très nombreux exemples d’utilisation des onglets dans les articles : par ici ou par ici...

Depuis la version 1.7.8.07 du plugin, l’outil « Découpe un texte en pages » offre (pour peu de code supplémentaire !) la possibilité de construire des onglets dans vos articles (ou même dans vos squelettes). La syntaxe est basée sur le même séparateur (« ++++ ») que l’on place très simplement à l’intérieur des balises <onglets> et </onglets>. Par exemple :

<onglets>
Titre 1
 
Mon 1er Texte après deux sauts de ligne
++++
Titre 2
 
Mon 2ème Texte après deux sauts de ligne
</onglets>

Voici en image ce que donne un usage par défaut :

Dont voici le code :

<onglets>Introduction
  
blah blah
++++Développement
 
blah blah blah
++++Conclusion
 
blah blah blah blah
</onglets>

Cette fonctionnalité utilise les librairies JQuery, simplifiant grandement la tâche des programmeurs et utilisées par SPIP lui-même.

Afin d’afficher correctement les onglets demandés par le rédacteur, le plugin fournit le code HTML suivant :

<div class="onglets_bloc_initial">
   <div class="onglets_contenu">
        <h2 class="cs_onglet"><a href="#">Introduction</a></h2>
        blah blah
   </div>
   <div class="onglets_contenu">
        <h2 class="cs_onglet"><a href="#">Développement</a></h2>
        blah blah blah
   </div>
   <div class="onglets_contenu">
        <h2 class="cs_onglet"><a href="#">Conclusion</a></h2>
        blah blah blah blah
   </div>
</div>

jQuery va ensuite construire à la volée le système d’onglets et mettre en rapport les onglets cliquables et les contenus. Les ancres sont introduites dans certaines balises <div> sous forme : id="mon_ancre".

Cela donne donc au final le code HTML suivant :

<div class="onglets_bloc" id="ongl_0">
  <div class="onglets_liste">
      <h2 class="onglets_titre" id="onglets_titre_0">
         <a href="#">Introduction</a>
      </h2>
      <h2 class="onglets_titre selected" id="onglets_titre_1">
         <a href="#">Développement</a>
      </h2>
      <h2 class="onglets_titre" id="onglets_titre_2">
         <a href="#">Conclusion</a>
      </h2>
  </div>
  <div class="onglets_contenu" id="onglets_contenu_0">
      blah blah
  </div>
  <div class="onglets_contenu selected" id="onglets_contenu_1">
      blah blah blah
  </div>
  <div class="onglets_contenu" id="onglets_contenu_2">
      blah blah blah blah
  </div>
</div>

Aspect visuel

Dans le code ci-dessus, il est facile de repérer les différents blocs <div> ou <h2>, affublés de classes qui vous permettrons de changer l’aspect des onglets à votre guise, comme ceci par exemple, les onglets créés par Douglas Bowman :

dont j’ai reconstitué pour vous le fichier CSS adapté au Couteau Suisse qui devra être interprété APRES les styles définis par défaut :

Voici d’autres onglets créés par Douglas Bowman :

Je mentionne également une contribution similaire de Pi r, ayant adapté pour SPIP les scripts d’Erik Arvidsson, programmés en Javascript pur. Mais aujourd’hui, autant utiliser directement les librairies jQuery de SPIP et alléger le temps de chargement des pages. Les versions 1.7.9.12 et suivantes du Couteau Suisse comprennent la syntaxe de ce plugin, assurant ainsi une compatibilité pour d’anciens articles basés sur ces travaux.

Ancres et paramètres

Chaque bloc d’onglets est affublé d’une ancre : #ongl_0, #ongl_1, etc. Ajoutée à l’url de votre page, l’ancre placera automatiquement le navigateur en tête de bloc.

Pour activer un onglet particulier sur une page lors du chargement de cette dernière, il vous suffit d’ajouter un paramètre dans votre url. Par exemple : « onglet=2 » (ou "http://www.spip-contrib.net/Decouper-un-texte-en-pages-et-ou?onglet=2").

Notez que le premier onglet est noté zéro ; l’exemple précédent activera donc le troisième onglet de la page entière.

Les onglets dans vos squelettes

Depuis la version 1.7.9.12 du plugin, de nouvelles balises (#ONGLETS_DEBUT, #ONGLETS_TITRE et #ONGLETS_FIN) ont été introduites afin de vous permettre de construire des onglets directement dans votre squelette (fichiers *.html). Voici un exemple de syntaxe :

[(#ONGLETS_DEBUT{Introduction})]
	blah blah
[(#ONGLETS_TITRE{Développement})]
	blah blah blah 
[(#ONGLETS_TITRE{Conclusion})]
	blah blah blah blah
#ONGLETS_FIN

Au sein d’une boucle SPIP et sur un bloc d’onglets principal (non imbriqué dans un autre bloc d’onglets), vous pouvez omettre #ONGLETS_DEBUT, le Couteau Suisse construira quand même le bloc correctement (version 1.8.06.01 minimum du plugin). Si votre bloc d’onglet est imbriqué, alors il faut jouer avec la balise #COMPTEUR_BOUCLE et vérifier que le premier appel de balise est bien #ONGLETS_DEBUT. L’intérêt ici est de pouvoir placer un champ de cette boucle dans le titre des onglets.

Par exemple, le code :

<B_sites>
<BOUCLE_sites(SITES){syndication=oui}>
	[(#COMPTEUR_BOUCLE|=={1}|?{' '})#ONGLETS_DEBUT{#NOM_SITE}]
	[(#COMPTEUR_BOUCLE|>{1}|?{' '})#ONGLETS_TITRE{#NOM_SITE}]
	<BOUCLE_articles(SYNDIC_ARTICLES){id_syndic}{par date}{inverse}>
	&bull; #TITRE<br/>
	</BOUCLE_articles>
</BOUCLE_sites>
#ONGLETS_FIN
</B_sites> 

s’il n’est pas contenu dans un autre bloc d’onglets, peut être simplifié en :

<B_sites>
<BOUCLE_sites(SITES){syndication=oui}>
	#ONGLETS_TITRE{#NOM_SITE}
	<BOUCLE_articles(SYNDIC_ARTICLES){id_syndic}{par date}{inverse}>
	&bull; #TITRE<br/>
	</BOUCLE_articles>
</BOUCLE_sites>
#ONGLETS_FIN
</B_sites> 

Dépendances

-  La librairie jQuery est requise pour le fonctionnement des Onglets, dans la construction et la manipulation des jeux d’onglets présents sur la page finale. Ces fonctions Javascript très utile a été intégré au core dès la version 1.9.2 de SPIP. Pour les versions inférieures, il vous faut installer et activer le plugin Jquery que vous pouvez télécharger ici : http://zone.spip.org/files/spip-zon....

-  Les styles CSS et les fonctions Javascript du plugin sont insérés grâce à la balise #INSERT_HEAD qui doit absolument être présente (en un seul exemplaire) dans le head de vos squelettes (entre les balises <head> et </head> des fichiers HTML). Si vous ne trouvez pas cette balise dans vos codes et que les liens n’ont pas l’apparence voulue, alors activer l’outil "Balise #INSERT_HEAD" permet au Couteau Suisse d’insérer automatiquement cette balise sans manipulation de votre part.

-  Bug ! Manu_TJ nous a écrit : « sur mon site, l’utilisation des onglets ne fonctionne pas sur de très longs articles : la page affichée est blanche, le texte est bien en base mais ne s’affiche pas à l’écran (espace public comme privé). Dès que j’enlève les balises "onglets", l’article réapparaît. Et sur les articles avec moins de texte, pas de soucis non plus ». Il s’avère que son site est interprété par PHP v5.2.9 et il semble que sous cette version du célèbre langage, la fonction preg_replace_callback() en mode "ungreedy" perd le texte en cours de route s’il est trop long : l’expression ',<onglets([0-9]*)>(.*?)</onglets\1>,ms' ne fonctionne plus alors que ',<onglets([0-9]*)>(.*)</onglets\1>,ms' fonctionne toujours... En regardant le début du fichier outils/decoupe_fonctions.php on voit l’expression régulière qui nous intéresse en define(). Il suffit donc de la surcharger dans le fichier /config/mes_options.php en ajoutant la ligne suivante :

define('_onglets_REGEXPR', ',<onglets([0-9]*)>(.*)</onglets\1>,ms');

Cela annulera l’effet ungreedy de l’expression mais interdira du coup les multiples systèmes d’onglets dans un article. Cependant, cette expression contourne le bug de PHP 5.2.9 ...

Voir aussi

-  Le plugin autonome (non dépendant du couteau suisse) : En onglets dans le texte de SPIP, ou ailleurs...

Discussion

103 discussions

  • Petite précision :
    S’il est possible d’appeler la page en spécifiant l’onglet initial avec ?onglet=4 par exemple, on notera qu’il est également possible de donner le numéro initial à travers une variable javascript var onglet_actif=’4’ ; ce qui est très pratique lorsque l’onglet est calculable (numéro du mois courant) - la variable doit être une chaîne de caractères et non un nombre -.

    Répondre à ce message

  • 1

    Bonjour,
    Je viens d’insérer des onglets dans un de mes squelettes et après un test rapide d’accessibilité., j’ai l’impression que ce composant ne respecte pas les normes. Voici le design pattern recommandé par le W3C : https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-1/tabs.html

    • Absolument, merci pour cette remarque.
      La version 1.11.05 du plugin corrige cette lacune.

    Répondre à ce message

  • 1

    Bonjour,
    Lorsque je crée un lien vers un paragraphe contenu dans un onglet en mettant [#mot_clé<-] dans le corps de l’article destination puis [texte->art68#mot_clé] dans l’article source, le lien ne s’ouvre pas dans l’onglet correspondant et s’ouvre toujours dans le premier onglet. Existe-t-il une solution ?

    • Au temps pour moi, je n’avais pas vu que l’ancrage était mentionné dans cet article. Cependant j’ai un nouveau problème : le lien suivant redirige bien dans le bon onglet mais descend tout en bas de la page alors que mon ancre est vers le haut : texte->art68?onglet=1#mot_clé]
      Est-ce normal et y a-t-il une solution ?

    Répondre à ce message

  • Bonjour,
    un petit problème dans un site bilingue.

    <:prefix:cle :> ne fonctionne pas dans le titre de’onglet.
    Par contre pas de problème dans l’article.

    Ce serait pourtant plus pratique que qui fonctionne correctement ;)

    Avez-vous une idée pour rendre le plugin compatible avec les fichier langues dans le titre.
    Merci
    Cordialement

    Répondre à ce message

  • 1

    Semble incompatible 3.2

    • Bonjour, pourrais-tu en dire plus ? La compatibilité avec 3.2 est normalement assurée. Cordialement.

    Répondre à ce message

  • 1

    J’ai un petit souci de compréhension de novice.
    J’ai la dernière version de SPIP, le plug-in couteau suisse, mais quand, dans un texte, j’indique les ++++, la page affiche ces quatre signes et n’effectue pas la division en pages.
    Dois-je faire autre chose ?
    Merci d’avance pour la réponse.

    • Je me réponds à moi-même. Je viens de me rendre compte que je devais activer individuellement chaque fonction du couteau suisse.
      Cela fonctionne impeccablement.
      Merci.

    Répondre à ce message

  • 1

    Je suis en train de rédiger un manuel de rédaction SPIP
    Sur une longue page, j’utilise des blocs dépliables + ancre douce. Parfait, ça fonctionne aux petits oignons. Parce que la page me paraissait bien longue et que je voulais mieux l’organiser, j’ai mis à contribution la lame « découpe en onglets ». Pas de souci, ça fonctionne très bien
    sauf que...
    sur le premier onglet, les ancres (internes à l’onglet) fonctionnent « bizarrement » : certaines « glissent » encore, d’autres fonctionnent mais « brutalement » (ie : pas de glissement)
    sur les autres onglets, les ancres (internes à chaqque onglet) ne fonctionnent plus.
    On peut facilement imaginer que la découpe en onglets perturbe le navigateur qui a du mal à retrouver les ancres. Y aurait-il toutefois un patch à imaginer ?
    (je peux te donner en privé une url à consulter)

    PS : Pour être sûr de bien se comprendre : le dysfonctionnement observé concerne les ancres permettant de naviguer à l’intérieur de chacun des onglets, pas d’un lien présent dans un onglet vers une ancre située dans un autre onglet

    Répondre à ce message

  • 4

    Bonjour,

    J’utilise Spip 3.0.20, et le couteau suisse en 1.9.8.
    Avec la fonction de pagination des articles, toutes les notes de bas de page présentes dans le corps de l’article (typiquement [1]) sont ré affichées sur toutes les pages de l’article.

    Y a-t-il un moyen de n’afficher en bas de chaque page que les notes de bas de page dont l’appel est bien présent dans la page courante ?

    (j’ajoute que je n’utilise pas l’affichage des notes sous forme de bulles locales dans le corps du texte).

    Merci à vous pour vos infos.

    Répondre à ce message

  • 1
    Jean-Jacques

    Bonjour,
    Je rencontre un « problème » avec ce système d’onglets.
    Le code généré utilise un h2 pour le titre de l’onglet.
    C’est judicieux si le titre de l’onglet contient une information importante.
    Si, par contre, c’est une découpe systématique du contenu comme par exemple
    Description, Public visé, Explications détaillées, Tarification, le h2 n’a plus d’intérêt.

    Est ce que l’on peut changer cela sans intervenir sur le code du plugin ?
    Merci !
    Cordialement

    • Bonjour,
      Le h2 est codé en dur dans le plugin... Si on veut changer cette balise, alors il faut toucher au code ;-)
      Est-ce un besoin « vital » ? Quel genre de « problème » rencontres-tu ?

    Répondre à ce message

  • 7

    Bonjour,

    Je viens de mettre à jour spip 2.1.20 vers Spip 3.0.8. Couteau à jour de la dernière version. Cache vider et TMP supprimer.

    Les onglets de l’article apparaissent en partir privée mais pas en publique.

    Une solution ?

    Un grand merci à vous.

    Robert

    • Tu as aussi mis à jour tes plugins ?

    • Il y a une erreur sans doute javascript à débusquer... Cette erreur bloque le comportement normal des blocs en partie publique. Ou alors #INSERT_HEAD manque à l’appel ?

    • Bonjour,

      J’ai le même problème que rcaron mais avec le séparateur de pages ou d’onglets…

      Quelqu’un aurait-il une solution ?

    • Bonjour,
      Tu as un lien public à montrer ? Quel est le squelette ? Les plugins actifs ?
      A vérifier aussi l’utilisation de la balise #TEXTE dans le plugin.
      A bientôt !

    • Bonjour,
      Ben non, je suis encore en local :-(
      Mon squelette est Sarka-SPIP 3.4.5 et j’ai désactivé tous mes plugins sauf ceux qui vont avec le squelette : Z-core 2.4.3 et Zen-Garden 2.6.2
      Je ne suis qu’un débutant et ne sais pas où trouver cette balise #TEXTE et surtout comment la vérifier et/ou la modifier…

      Par contre, les onglets fonctionnent :-)

    • Bonjour,

      Toujours en local, je suis passé à Sarka-SPIP Reloaded 4.4.16 qui oblige à utilser :
      Bootstrap 2.1.4, 
Comments 3.3.2, Compositions 3.3.12, LESS CSS 1.0.5
, 
SPIP Bonux 3.1.0, 
Z-core 2.4.3

      J’ai retenté « Le Couteau Suisse 1.9.7 » avec : « Intertitres en image », « Sommaire automatique », et « Découpe en pages et onglets » et je retrouve les mêmes problèmes ! Par contre un tiret bas (_) vient se placer devant chaque intertitre. Il est cliquable vers #outil_sommaire de cette page

      Je vide le cache régulièrement ainsi que celui du navigateur (les onglets fonctionnent).

      Que faire ?

    • Dans la partie privé, ça fonctionne mais dans la partie publique,
      seul le &var_mode=calcul permet d’amener la bonne page…

      Mes réglages :
      Activer la balise #CS_DECOUPE : OUI
      Votre choix :
       Edition des contenus
       Messages de Forum

    Répondre à ce message

  • 1

    Bonjour,
    J’utilise les onglets et dans le 3e onglet j’affiche une carte gis, mais la carte ne s’affiche pas à cause d’un problème de javascript est ce quelqu’un sait comment résoudre ce probleme ???

    PS : Si je mets la carte sur le 1er onglet j’ai pas ce problème

    Merci de votre aide

    voici l’url http://play.imedia.sn/spip.php?article1

    • Hey,

      tu pourrais dire comment tu as résolu ton pb ?

      merci

    Répondre à ce message

  • 4

    bonsoir,
    j’ai fait cette boucle, et je ne comprends pas pourquoi la liste d’article de la rubrique suivante de s’affiche pas en onglets. je ne retrouve plus la solution. vous pouvez m’aider ?

    <B_sous_rubriques>
     <div class="boutique">
       <ul class="boutique_cadre">
    		
       <BOUCLE_sous_rubriques(RUBRIQUES) 
       {id_parent} {par num titre}{!par id_rubrique}>
        <li class="album"> 
        [(#LOGO_RUBRIQUE
                |image_reduire{330,*}
                |inserer_attribut{class,album_logos})]
    		  
        <B_articles>
          <div class="album_list">
           <h2>#TITRE</h2>
    	 <B_articles>
              <BOUCLE_articles(ARTICLES) 
               {id_rubrique} {par num titre}{par id_article}>
               #ONGLETS_TITRE{#TITRE}
    	   #TEXTE
               </BOUCLE_articles>
    	   #ONGLETS_FIN
    	</B_articles>
           </div>
          </B_articles>
    			
        </li>
        </BOUCLE_sous_rubriques>
    		  
       </ul>
      </div>
    </B_sous_rubriques>

    à ce jour, en ligne ça donne ça : http ://dev.twxdesign.com/koto_2/spip.php ?rubrique6

    • je précise que j’ai essayé la boucle avec #COMPTEUR_BOUCLE, mais ça n’ai rien donné de bon

    • pardon, la boucle prcédente est erronée. voici la boucle utilisée :

          <B_sous_rubriques>
            <div class="boutique">
              <ul class="boutique_cadre">
      		
                <BOUCLE_sous_rubriques(RUBRIQUES) 
                        {id_parent} {par num titre}{!par id_rubrique}>
                <li class="album">
                  [(#LOGO_RUBRIQUE
                     |image_reduire{330,*}
                     |inserer_attribut{class,album_logos})]
      		  
                  <B_articles>
                    <div class="album_list">
                      <h2>#TITRE</h2>
                            <BOUCLE_articles(ARTICLES) 
                             {id_rubrique} {par num titre}{par id_article}>
                             #ONGLETS_TITRE{#TITRE}
      					   #TEXTE
                            </BOUCLE_articles>
      					  #ONGLETS_FIN
                      </div>
                  </B_articles>
      			
                </li>
                </BOUCLE_sous_rubriques>
      		  
              </ul>
            </div>
          </B_sous_rubriques>
    • bon c pas gentil de me laisser comme ça..

      le truc que c’est que quand j’utilise le html dans la boucle, les onglets s’affichent dans les sous-subriques mais les titres s’affichent en « undefined ». y’a qu’avec les balises que ça fonctionne mais ça me rajoute des </div> dans la 2de rubrique affichée de cette manière :

      <div class="list">
         <h2>titre ssrub2</h2>
       
             </div><div class="onglets_contenu">
                  <h2 class="cs_onglet"><a href="#">titre art1 ssrub2</a></h2>
                  contenu texte
       
             </div><div class="onglets_contenu">
                   <h2 class="cs_onglet"><a href="#">titre art2 ssrub2</a></h2>
                    contenu texte
       
      	     </div></div>
      </div>

      je sais qu’il y a une astuce, on m’en avait parlé ya très longtemps, mais je sais plus laquelle, genre un truc à ajouter à #ONGLETS_TITRE(truc pour ID_RUBRIQUE) et #ONGLETS_FIN(truc pour ID_RUBRIQUE)

    • et bien merci de votre réponse, j’ai fini par trouver une soluce, pas catholique mais ça marche

      pour ceux que ça intéresse : ma boucle

    Répondre à ce message

  • 1

    Je ne comprends pas...

    Les onglets ne fonctionnent plus en public (mais fonctionnent en privé) depuis mise à jour SPIP 3.0.16 [21266].

    J’ai vidé les caches, Couteau-suisse à jour et activé. Rien n’y fait !

    Je n’ai pourtant rien bricolé sur le squelette.

    Un exemple : http://malle-arts.org/spip.php?article230

    Un grand merci à vous. Très ennuyé

    Robert

    • Bonjour, sur Firefox tout fonctionne très bien... Si les onglets ne fonctionnent pas, c’est qu’une erreur JS (squelette ? autre plugin ? cache ?) les bloque...

    Répondre à ce message

  • Pour faire suite à la discussion lancée sur cette page, je voulais précisé que j’utilisais déjà Ajax pour les paginations. Et malheureusement quand le texte est long, la fenêtre ne remonte pas au début du texte lors du passage à la page suivante. Au contraire de la pagination de SPIP.

    Répondre à ce message

  • 1

    Bonjour,
    j’utilise l’option découpage dans le texte de mes articles avec 2 onglets tout simplement, mais dans chaque onglet il ya un moteur de recherche ajaxé, alors pour le 1er onglet il n’ya pas de problème la recherche se fait sans soucis mais pour le 2em onglet rien ne se passe. Je me dis que c’est du fait que c’est ajaxé, mais j’aimerai gardé mes onglets et mon moteur de recherche, alors exist il un moyen de contourner ce problème ? Merci de votre aide

    • Bonjour,

      Il est possible que les onglets cachés ne permettent plus les programmations JS, et bloquent donc l’ajaxisation.

      Pour tester, est-ce que par hasard tout est bon lorsque le paramètre « &cs=print » est ajouté dans l’URL ?

      Est-ce que le code JS des recherches est bien placé avant celui du Couteau Suisse qui se charge de mettre en forme les blocs de découpe ?

    Répondre à ce message

  • 1

    Quelle solution élégante lorsqu’il y a beaucoup d’onglets ?
    Quand il y a beaucoup d’onglets, les onglets s’empilent un peu n’importe comment et ça n’est pas très chouette....
    Patrice, as-tu des expériences là-dessus ? Un système de pagination d’onglets, c’est possible ? Faire un slider jquery d’onglets, ça marcherait ? Une autre piste ?
    Merci d’avance de tes conseils et/ou d’exemples...et merci au passage pour ce bel outil qu’est le CS !

    • Et oui c’est vrai qu’en cas d’onglets trop nombreux, la mise en place n’est pas top...
      Un slide jquery serait l’idéal en effet, si toi tu as des pistes, on est preneurs ;-)

    Répondre à ce message

  • Bonjour,

    J’utilise la lame « Découpe en page ». J’ai un css spécifique qui prend en charge les numéros de page. Mais la lame me laisse les flèches précédent et suivant... Comment les retirer ?

    Merci

    Robert

    Répondre à ce message

  • 1

    Bonjour,

    J’ai activé la fonction découper en pages ou en onglets du couteau suisse et cela donne une erreur chez moi :

    Strict Standards : Only variables should be passed by reference in ecrire\public\composer.php(76) : eval()’d code on line 243

    Ce message d’erreur s’affiche dans l’entête des pages article, autant dans la partie publique que dans la partie privée

    Spip 3.0.7.

    • Bonjour. Merci du retour, pas facile de deviner cette erreur sans le texte passé en eval()... Souvent il s’agit d’erreur sur les squelettes et leurs filtres. As-tu d’autres plugins activés ? D’autres outils actifs du Couteau Suisse ?

    Répondre à ce message

  • Notes bas de page...

    Bonjour,

    Comment faire en sorte que les « notes de bas de page » d’un texte inclus dans un onglet restent en bas de la page de cet onglet (et non en bas de page de l’article) ?

    Merci

    Robert

    Répondre à ce message

  • 3

    Bonjour,

    Merci pour ce plugin, y a t’il moyen de l’utiliser dans le #PS plutôt que dans le #TEXTE ?

    • Et pourquoi une telle restriction d’ailleurs ?
      C’est dommage !

    • Bonjour,

      Parler de restriction est un peu fort ;-) Un PS est souvent composé d’une seule ligne, je n’aurais jamais pensé qu’il eût été utile de le découper.

      Pour ce faire, il faut une petite fonction de surcharge de l’outil à placer dans config/mes_options.php  :

      function decoupe_surcharger_outil($tab) {
      	// pour les balises #PS: $table_des_traitements[PS] = 'cs_decoupe(propre(%s))';
      	$tab['traitement:PS:post_propre'] = 'cs_decoupe';
      	// pour les balises #PS: $table_des_traitements[PS] = 'propre(cs_onglets(%s))';
      	$tab['traitement:PS:pre_propre'] = 'cs_onglets';
      	return $tab; 
      }

      Attention : code non testé, à tester donc.
      Doc succinte : [dev] Le Couteau Suisse : développer un outil

    • Testé, ça marche nickel !

      Merci Patrice ! :)

    Répondre à ce message

  • Christian

    Bonjour,

    Merci pour ce plugin.

    Je n’ai pas trouvé ce point abordé dans les coms (ou alors j’ai pas compris) : comment faire pour que lors d’un retour arrière avec le navigateur l’onglet d’où l’on vient reste affiché ?

    Exemple : si je clique sur un lien dans l’onglet 2 vers un article, lorsque je veux ensuite revenir depuis l’article vers la page contenant le jeu d’onglets, je retombe toujours sur l’onglet par défaut.

    Merci d’avance.

    Répondre à ce message

  • Bonjour,

    Ma question est affreusement basique, mais je me demande – suite à votre paragraphe « Aspect visuel » – qui me permettrait d’utiliser des images pour personnaliser les onglets :

    [...] les onglets créés par Douglas Bowman [...] dont j’ai reconstitué pour vous le fichier CSS adapté au Couteau Suisse qui devra être interprété APRES les styles définis par défaut.

    je me demande où rajouter les lignes de codes de ce css (je n’arrive pas à interpréter ce « APRÈS »...).

    S’agit-il d’un emplacement du decoupe.css ou d’un emplacement du decoupe.html. Et s’il s’agit de les « surcharger », il conviendrait de les mettre dans un dossiersquelette/... ?

    Merci d’avance de cette mise à niveau !

    Répondre à ce message

  • 1

    Oui sans problème.

    Par exemple :
    [mon texte->#ongl_1]
    ne marche pas.

    (je travaille sur la page : http://www.unsa-st.com/spip.php?article795)

    • Ah oui c’est normal, une ancre n’est pas fait pour ouvrir un onglet... Pour ce faire il faudrait un petit traitement JQuery sur les liens d’ancre qui agiraient sur les onglets

      De plus, les ancres #ongl_1 pointent des contenus qui sont désactivés dans le cas des onglets fermés : le navigateur ne donne donc aucune réponse...

    Répondre à ce message

  • 1

    Les ancres ne marchent pas.
    Obligé de passer par onglet=X, ce qui oblige à recharger la page !

    Répondre à ce message

  • 1
    Christian

    Bonjour,

    Ce plugin est formidable.

    Est-il possible de mettre des images comme titre des onglets ? Je n’y arrive pas.

    Merci !

    • Salut, des images comment ? Communes à tous les onglets ou différentes à chaque fois ?

      Il me semble que la solution CSS est préférable...

    Répondre à ce message

  • 4

    Salut a toutes et tous
    tt d’abord, bravo pour le travail effectué !

    voila, j’ai un petit soucis : lors d’un recalcul d’une page cette lame du CS « saute » (onglets et bloc)
    l’un de vous a-t-il deja rencontrer ce probleme ?

    le rechargement du CS corrige le probleme (si la compression javascript et css désactivé dans la config de spip)
    suis sous spip 2.1 à jour

    merci d’avance pour votre aide

    www.fsl-nancy.fr

    • Comment ça « saute » ? Il y a peut-être trop d’ajax lancés au même moment ?

    • en ce moement par exemple, ca a sauté : comme si la lame etait desactivée...
      pour voir : www.fsl-nancy.fr
      colonne de gauche le menu des rubriques est un bloc depliable (sauf que la ca ne fonctionne pas)

      pour le nombre d’ajax lancés : sur une page ou il y en a peu (2) c’est la meme...

    • en image :
      -  quand ca a « sauté » => capture à 02.38.30 (si vous avez un autre mot pour décrire : c’est pas vraiment « désactivé »)

      -  quand ca fonctionne => capture à 02.48.30

    • oups. désolé...

      -  quand ca a « sauté » => capture à 02.38.30 (si vous avez un autre mot pour décrire : c’est pas vraiment « désactivé »)

    Répondre à ce message

  • Bonjour,
    Une autre question concernant ce bel outil.
    J’ai utilisé la fonction de découpe de texte en pages et remplacé les numéros générés automatiquement par de nouvelles images gif.
    Un de mes articles possède un texte assez long :
    http://www.fondation-gelbert.ch/v2/spip.php?article10
    Tout fonctionne très bien sur 3 pages découpées (c’est le cas sur le site en ligne). Dès que je crée un 4e découpage (ce qui serait visuellement quand même plus agréable), cela ne fonctionne plus. Les images page suivante > et < page précédente s’empilent, c’est à dire qu’on les voit plusieurs fois sur chacune des pages découpées (exemple en pièce-jointe, site en local).
    Y a-t-il une solution ou est-ce une limitation de l’outil ?
    Merci infiniment,
    Stéphane

    Répondre à ce message

  • 2
    Stéphane

    Bonjour,
    Question de novice j’en suis sûr, mais où et comment faut-il que j’intervienne afin d’éviter que les images (d’origines ou modifiées comme dans l’exemple joint) ne soient entourées par une fort disgracieuse bordure blanche ?
    J’utilise cette fonctionnalité pour découper un article en plusieurs « sous-pages », soit la balise #CS_DECOUPE
    Merci pour vos lumières.
    Stéphane

    ps : je vous joints un print-screen, le site étant en local pour l’instant

    • Bonjour,

      On ne voit pas bien ton image, mais il semble que ton problème soit lié à un simple style CSS à ajouter à ton squelette. Avec le couple Firefox/Firebug, tu pourras facilement trouver le sélecteur à utiliser.

    • Stéphane

      Bonjour,
      Merci pour votre réponse.
      En fait, après avoir cherché de tous les côtés, je me suis aperçu que la balise #INSERT_HEAD ne figurait pas dans la page. Son ajout a réglé le problème...
      Que de temps perdu pour une bêtise ...
       :-)

    Répondre à ce message

  • Bonjour

    Bravo pour le travail effectué. Pour ma part la pagination est l’élément essentiel qui m’intéresse.

    Cependant, je fournis par ailleurs les articles dans leur intégralité dans le flux RSS de mon site, voilà pourquoi j’aimerais savoir s’il est possible de désactiver la pagination (sans perdre la mise en forme normale du texte) dans les boucles du squelette servant au rss.

    Merci d’avance si quelqu’un a une piste ! :)

    Répondre à ce message

  • Bonjour,

    J’ai un petit problème sous IE6 lorsque j’active la lame « Découpe en pages et onglets ».
    Lorsque je consulte un article avec des onglets j’ai un beau plantage « l’instruction à xxxx emploi l’adresse memoire xxxx la memoire ne peut pas etre read ».

    Auriez-vous une idée ???

    d’avance merci

    Répondre à ce message

  • 6

    Bonjour,

    je viens de mettre en place ton super CS pour découper une page en plusieurs via le génial ajax sous SPIP 2.18 et CS uptodate.

    J’utilise #CS_DECOUPE et j’’ai un problème car il y a 2 paginations à s’afficher sur la ligne. Je ne veux pas de la pagination de droite 2>. J’ai essayé de trifouiller le fichier decoupe_item.html sans succès. Je ne veux que les pavés rouges de droite.

    • Hmm... Je ne vois pas d’où peut venir cette double pagination... Le fond d’origine du plugin présente-t-il aussi cette erreur ?

      Tu as un lien public peut-être ?

    • C’est ici : http://www.jp.guihard.net/spip.php?article130.

      Je n’ai modifié aucun des tes fichiers mis à part la css decoupe.css.

      J’ai un autre petit problème, si tu as le temps. J’ai des des title qui ne s’affichent pas toujours correctement sur les flèches gauche ou droite.

    • J’ai trouvé où se trouvait la merdouille. Cela venait d’une class de css que j’utilisais déjà et que j’appelle aussi .pagination. Cela faisait tout se mélanger.

      Cela dit, si tu as le temps et le courage, j’aimerai bien un procédé de personnalisation de ce que l’on veut afficher. Pour ma part , je ne vois pas l’intérêt d’afficher une flèche quand elle ne pointe vers rien. J’ai contourné la chose en remplaçant tes precedent_off en une image vide. En outre, pouvoir mettre un message avant les icônes, du genre Lire la suite de l’article truc truc, message qui varierait si nous sommes en cours d’article ou à la fin. Truc à mettre dans ton fichier decoupe_item par exemple.

      En tous les cas, merci pour cette lame et pour le CS en général.

    • La réponse est dans tes propres messages. Pour personnaliser cette pagination, il suffit de surcharger dans ton squelette les deux fichiers suivants :
      -  decoupe_item.html, qui s’occupe des numéros
      -  decoupe.html, qui s’occupe des flèches et intège le précédent

      N’hésite pas à nous faire part de tes travaux, cela pourra intéresser d’autres utilisateurs ! Auncun besoin d’image vide, donc ;-)

      Rappel : la surcharge dans un squelette perso est indispensable afin de profiter des mises à jour régulières du Couteau Suisse. Surtout ne pas modifier les fichiers originaux du plugin.

    • Je suis en train de vouloir ajouter un texte du genre lire les pages suivantes de l’article XX et lire les pages précédentes de l’article XX si on est à la fin. Sais tu comment passer l’id de l’article dans le fichier decoupe.html. J’ai essayé de rajouter ce paramètre [(#CS_DECOUPE{id_article})] sans succès. En récupérant #ENV dans le fichier decoupe.html, je n’ai pas l’id de l’article.

    • Oui c’est normal, comme tu peux le voir dans le contenu de decoupe.html, il n’y a pas l’id. Cette pagination est prévue pour le découpage d’un seul article, pas le découpage d’un texte en plusieurs articles...

      Je vais modifier la balise #CS_DECOUPE : voir l’article ci-dessus pour son utilisation.

    Répondre à ce message

  • 2

    Bonjour

    J’utilise la balise #CS_DECOUPE et souhaiterai que s’affiche avant la flèche de gauche un texte de mon choix (par exemple page).

    Mais si je fait un truc du genre [page (#CS_DECOUPE)] j’obtiens bien le texte page mais pas au bon endroit. En jouant avec des CSS j’arrive à le centrer au dessus.

    Mais est il possible de modifiez la balise #CS_DECOUPE et comment ?

    merci d’avance.

    F.M BILLARD

    • En CSS, cela doit pouvoir se régler. Essayez encore en modifiant les styles à la volée grâce à Firefox/Firebug.

      Sinon, la pagination est contruite grâce au fond couteau_suisse/fonds/decoupe.html que vous pouvez copier puis modifier dans votre propre squelette : mon_squelette/fonds/decoupe.html.

    • Bonjour

      oui avec les CSS j’ai bidouillé un système qui fonctionne.

      Je vais jeter un coup d’oeil au fichier decoupe.html

      merci

      F.M BILLARD

    Répondre à ce message

  • 1

    Les onglets sont stylés par la feuille de style header.css insérée dans le head de la page, assez pénible à surcharger : comment peut-on empêcher l’insertion de cette feuille de style ?

    • La feuille header.css est issue de la compilation finale de tous les outils activés. Pour surcharger les styles, il faut surcharger chacune des feuilles utilisées par les outils. En l’occurence, les onglets utilisent le fichier outils/decoupe.css qu’il est facile de recopier dans son squelette puis de modifier à volonté.

      Attention toutefois à certaines propriétés indispensables au bon fonctionnement des onglets : z-index, position, display, float et Cie j’imagine...

      Je n’insisterai jamais assez, que pour un fonctionnement optimum du plugin, chaque surcharge nécessite une recompilation complète du plugin :
      -  soit réafficher sa page d’admin,
      -  soit valider la config d’un outil,
      -  soit ajouter le paramètre « cs=calcul » dans l’URL

    Répondre à ce message

  • 3

    Bonjour,

    Merci pour ce plugin que j’ai plusieurs fois utilisé par le passé.

    Aujourd’hui, je me trouve confronté à une situation inédite.
    J’utilise ce plugin pour découper des articles auxquels sont joints plusieurs dizaines d’images.
    A partir de ces images, je génère une galerie.

    Mon objectif : arriver à relier certaines images à certaines pages (découpées avec ce plugin), afin que ma galerie n’affiche que les images liées à la page en cours.

    Ma première idée : utiliser une numérotation au début du titre de chaque image (ex : 1. titre pour toutes les images de la page 1, etc)

    Je numérote donc mes images, et je teste le code suivant basé sur un test du titre par expression régulière :

    <B_GALERIE>
    
    <h1><:galerie:></h1>
    
    <ul>
    
    <BOUCLE_GALERIE(documents) {mode==image} {id_article} {doublons} {par num titre} {titre==^[3]}>
    
    <li><a href="#URL_DOCUMENT" title="#DESCRIPTIF">[(#FICHIER|image_reduire{0,100}|inserer_attribut{'alt',#TITRE})]</a></li>
    </BOUCLE_GALERIE>
    
    </ul>
    
    </B_GALERIE>

    Ca marche, dans ce cas, ma galerie ne contient plus que les images dont le titre commence par « 3 », c’est à dire celle que j’associerai à la page « 3 » de mon découpage.

    Il est temps de remplacer mon 3 par un code qui me donnera le numéro de la page en cours dynamiquement.

    Je sais que [(#ENV{artpage}|artpage)] me donne le numéro de la page en cours.
    Et celui me renvoit bien toujours « 1 » pour les articles non découpés, et toujours le numéro de la page en cours pour articles découpés. Cela parait exploitable pour mon problème

    Hélas, je ne pourrai pas l’utiliser tel quel dans un critère de boucle (on ne peut pas utiliser de balises filtrées dans un critère).

    J’essaie donc un truc à base de PHP :

    <B_GALERIE>
    
    <h1><:galerie:></h1>
    
    <ul>
    
    <BOUCLE_GALERIE(documents) {mode==image} {id_article} {doublons} {par num titre} {titre==^[<?php echo "[(#ENV{artpage}|artpage)]"; ?>]}>
    
    <li><a href="#URL_DOCUMENT" title="#DESCRIPTIF">[(#FICHIER|image_reduire{0,100}|inserer_attribut{'alt',#TITRE})]</a></li>
    </BOUCLE_GALERIE>
    
    </ul>
    
    </B_GALERIE>

    Cela ne fonctionne pas.
    Probablement dû à l’ordre dans lequel SPIP interprète les pages ?

    Si vous avez une piste pour résoudre mon problème, je suis preneur...

    Merci de m’avoir lu.

    • Le php n’est pas du tout autorisé. Il faut peut-être utiliser #SET et #GET (non testé) :

      #SET{page,[(#ENV{artpage}|artpage)]}

      Puis utiliser #GET{page} dans le critère de la boucle...

    • Bonjour,

      Merci pour réponse, elle m’a mis sur la bonne piste.

      J’avais déjà exploré cette piste (SET, GET) hier sans succès.
      En ré-essayant aujourd’hui, je me suis rendu compte d’un pb de syntaxe lors de la définition du #SET.

      J’ai maintenant un code qui fonctionne et qui ressemble à cela :

       #SET{numero_page,#ENV{artpage}|artpage}
      <B_GALERIE>
      <h1><:galerie:></h1>
      <ul>
      <BOUCLE_GALERIE(documents) {mode==image} {id_article} {doublons} {par num titre} {titre==^[#GET{numero_page}]}>
      
      <li><a href="#URL_DOCUMENT" rel="prettyPhoto[gal01]" title="#DESCRIPTIF">	
      [(#FICHIER|image_reduire{0,100}|inserer_attribut{'alt',#TITRE})]</a></li>
      
      </BOUCLE_GALERIE>
      </ul>
      </B_GALERIE>

      On remarquera la syntaxe particulière du filtre dans la définition de SET (sans parenthèses, ni crochets).
      C’est cette page qui m’a mis sur la bonne voie quant à la syntaxe : http://www.mail-archive.com/spip@rezo.net/msg11944.html

      Reste maintenant à résoudre le cas des articles non découpés avec images non numérotées (non numérotées en 1), en effet, il est apparemment impossible de distinguer (par son environnement, ENV) une article non découpé, de la première page d’un article découpée.
      J’ai vérifié, et hélas sur la page 1 d’une série de 5 pages par exemple, le code #ENV{artpage}|artpage{1} renvoie 0 au lieu de renvoyer 5.

      Au pire, je demanderai à l’utilisateur de signaler le découpage d’un article par le biais d’un mot clé associé par exemple qui lui permettra de choisir entre une galerie découpée ou une galerie unifiée pour l’article en question.

      Dans tous les cas, merci pour votre aide qui m’a permis d’aboutir rapidement...

    • A moins de créer un nouveau filtre, tu peux déjà déceler le découpage de l’article en cherchant le séparateur dans le #TEXTE**, par exemple (non testé) :

      	#SET{sep, #EVAL{preg_quote(_decoupe_SEPARATEUR)}}
      	[(#TEXTE**|match{#GET{sep}}|oui) découpage OK !]

      Doc : http://www.spip.net/fr_article4299.html

      Sinon, je reconnais que le filtre |artpage{1} se limite à décoder le parametre d’url... Du coup, si on se trouve sur une première page d’article, sans paramètre, ce filtre renvoie zéro alors que l’article est quand même découpé... Pour remédier à cela, il faudrait créer une balise du genre #NB_ARTPAGES (utilisable seulement à l’intérieur d’une boucle ARTICLE) qui irait examiner le texte brut stocké en base et rendrait alors le nombre réel de pages....

    Répondre à ce message

  • Bonjour,

    Actuellement, je voudrais utiliser le plugin couteau suisse et tout specialement les onglets, mais ceux-ci s’affichentcorrectement dans l’espace privé, mais ne sachant pas quoi et oû modifier dans le squelette pour les faire apparaitre dans mon espace public.
    J’utilise le plugin Giseh et spip 2.1.2

    Répondre à ce message

  • 1

    Bonjour,
    Débutant sous Spip, je découvre peu à peu toutes les possibilités...
    Actuellement, j’aurai bien aimé faire apparaitre des onglets dans l’un de mes articles, mais ceux-ci s’affichent les uns en dessous des autres...
    L’affichage est correct dans l’interface privé de Spip (2.0.10)
    En désactivant le squelette (Multiflex), l’affichage est correct dans le site par contre.
    Pouvez m’indiquer où je dois regarder/corriger afin que cela fonctionne ?
    Merci par avance )

    • Tu as un lien public ? C’est sûrement un problème de CSS inline/block, le couple Firefox/Firebug te permettra facilement de mettre au point tout ça.

    Répondre à ce message

  • 2

    Bonjour,
    Je découvre un grave pb dans l’utilisation épatante des onglets :

    Sur la page : http://education.cyberindre.org/cddp36/escapages/?-Les-activites-

    Avec Firefox : les 6 onglets apparaissent bien

    Avec Internet Explorer : seuls 4 onglets apparaissent

    Queklqu’un a-t-il une modif ou solution à proposer ou dois-je repenser mes articles ?
    merci

    Détail : spip2.1 + zpip + couteau suisse
    Syntaxe utilisée :
    Titre 1
    Placez votre texte ici
    ++++Titre 2
    Placez votre texte ici

    • Salut.

      Es-tu sûr qu’il n’y a pas d’erreur de syntaxe dans ton code source ? Il se peut que Firefox fasse une correction qu’IE ne sait pas faire... Pourrais-tu simplifier le contenu des onglets afin d’en avoir le coeur net ?

      Si une erreur de balise non fermée est présente dans l’un des blocs, il est possible que cela mette en péril l’affichage des onglets sous IE.

    • Merci et bravo, j’avais une balise de couleur [vert]qui n’était pas fermée. le problème est donc réglé.

    Répondre à ce message

  • 2

    Bonjour !

    1) Ceci marche aussi avec SPIP 2.1 — ajouter le mot-clé ?

    2) Pour surcharger le fichier .CSS que proposes-tu ? Devrions-nous mettre les styles que nous souhaitons changer dans un autre fichier ? Si nous changeons decoupe.css alors nos changements seront perdus à la mise à jour du couteau n’est-ce pas ?

    • Mon problème avec (2) est que même si je mets #INSERT_HEAD_CSS dans le squelette avant l’appel à mon propre fichier de styles, decoupe.css est inséré quand même après. Je ne peux pas le surcharger donc.

    • Salut,

      La solution basique est effectivement de surcharger outils/decoupe.css en le recopiant/modifiant dans ton squelette : tu ne risques pas beaucoup en te privant des éventuelles futures mises à jour puisque ces styles seront parfaitement adaptés à ton squelette.

      Sinon, le nouveau pipeline #INSERT_HEAD_CSS n’est pas (encore ?) pris en compte par le Couteau Suisse.

    Répondre à ce message

  • 1

    bonjour,
    j’ai un petit souci avec cette fonction.

    je compose mon texte + illustrations. j’ajoute les « ++++ » pour faire la decoupe en onglet.
    la découpe se fait mais le problème c’est que quand je clique sur les différents onglet la page revient toujours sur l’onglet 1 et ne continue pas sur les autres onglets.
    solution ?
    merci

    Répondre à ce message

  • 4

    Surcharge des CSS
    Je cherche à surcharger decoupe.css et pour éviter de perdre mes modifs à la prochaine mise-à-jour, je souhaite créer un fichier decoupe.css dans mes squelettes. J’ai placé un tel fichier dans squelettes puis dans outils/squelettes, mais il n’est pas pris en compte dans l’un ou l’autre de ces deux cas...
    Ce ne doit pas être le bon endroit pour placer ce fichier personnalisé... Où faut-il le mettre ?
    PS : Merci encore pour ce super outil et tout le travail réalisé !

    • bonjour,

      Pour surcharger il te faut créer un fichier surcharge-decoupe.css pour surcharger decoupe.css

    • Pffioouuuu, super rapide comme réponse ! Cela dit, ça ne fonctionne pas chez moi : la feuille de style n’est pas prise en compte (SPIP 2.1 - CS : 1-8-18)....

    • Bonjour,

      Il ne faut pas modifier le nom des fichiers surchargés. Il suffit de les placer dans le même dossier que l’original. Ici : monsquelette/outils/decoupe.css

      Ensuite, il faut recompiler le Couteau suisse en affichant sa page d’admin et vider les caches de SPIP. Attention également à la compression JS et CSS et le cache client qui peuvent parfois masquer la modification d’un paramètre ou d’un fichier du site...

    • Yessss ! C’était bien ça.... je n’avais pas en tête qu’il fallait repasser par la case « recompilation » pour que ce soit opérationnel... J’ai donc remis sagement le fichier dans/squelettes/outils et ça roule ! Merci beaucoup !

    Répondre à ce message

  • 1

    Bonjour,
    Débutant sous Spip, je découvre peu à peu toutes les possibilités...
    Actuellement, j’aurai bien aimé faire apparaitre des onglets dans l’un de mes articles, mais ceux-ci s’affichent les uns en dessous des autres...
    L’affichage est correct dans l’interface privé de Spip (2.0.10)
    En désactivant le squelette (Multiflex), l’affichage est correct dans le site par contre.
    Pouvez m’indiquer où je dois regarder/corriger afin que cela fonctionne ?
    Merci par avance )

    • Bonjour. As-tu un exemple public ? Le Duo Firefox/Firebug te permettra de jouer avec les CSS et voir pourquoi ces onglets ne restent pas horizontaux...

    Répondre à ce message

  • 1

    je poste mon message ici puisqu’il concerne le découpage en onglets

    j’aime tellement la fonction que je ne peux pas m’en passer merci !
    mais j’ai un pb avec le forum et j’ai le message suivant si la lame du couteau est activé :

    Fatal error : Call to undefined function cs_decoupe() in /home/www/html/ecole/efn-dumas.naples/squelettes-dist/formulaires/forum.php(275) : eval()’d code on line 1

    merci

    Répondre à ce message

  • antonin

    Bonjour,

    J’ai lu avec intérêt le bug signalé avec php v5.2.9. même si je n’ai pas compris grand chose... Je suis hébergé avec un php v5.2.11. qui interprète un site en spip 2.0.10 (squelette Sarkaspip3.0.2.). Je rencontre le même soucis pour un article long avec surtout un grand nombre d’onglets. J’arrive maintenant au 13e onglets et environ 14000 caractères en tout et lorsque je rajoute encore quelque chose j’ai l’encart texte vide alors qu’en éditant l’article le texte est là.

    Une idée ? une limite de nombre d’onglets ? un soucis de version de php ?

    Merci pour votre aide afin que je puisse continuer à utiliser votre super outil !

    Cordialement,
    Antonin

    Répondre à ce message

  • 3

    Pour commencer un grand merci pour cet indispensable outil !

    Ensuite, une question idiote...

    J’ai configuré il y a longtemps ce plugin sur un site.
    Je n’arrive pas à me rappeler comment je peux faire pour afficher un texte juste à côté des flèches (genre « page suivante » ou page précédente s’il y en a une).

    Quelqu’un peut me dépanner ?

    • Tu peux surcharger le fichier fonds/decoupe.html. Il est assez complexe, mais en tatonnant tu peux sans doute arriver à qqchose...

      Autre solution plus simple mais monolingue, c’est d’ajouter dans ton squelette des images personnalisées :
      -  img/decoupe/suivant.gif
      -  img/decoupe/suivant_off.gif
      -  img/decoupe/precedent.gif
      -  img/decoupe/precedent_off.gif

    • Merci d’avoir pris le temps de me répondre !
      Je songeais à modifier les images pour y mettre le texte dedans, mais j’étais persuadé qu’il y avait un endroit ou je pouvais le configurer. Comme quoi, les certitudes ... :-)

    • antonin

      Bonjour,

      J’ai lu avec intérêt le bug signalé avec php v5.2.9. même si je n’ai pas compris grand chose... Je suis hébergé avec un php v5.2.11. qui interprète un site en spip 2.0.10 (squelette Sarkaspip3.0.2.). Je rencontre le même soucis pour un article long avec surtout un grand nombre d’onglets. J’arrive maintenant au 13e onglets et environ 14000 caractères en tout et lorsque je rajoute encore quelque chose j’ai l’encart texte vide alors qu’en éditant l’article le texte est là.

      Une idée ? une limite de nombre d’onglets ? un soucis de version de php ?

      Merci pour votre aide afin que je puisse continuer à utiliser votre super outil !

      Cordialement,
      Antonin

    Répondre à ce message

  • Bonjour Patrice

    je pense avoir respecté les consignes d’utilisation de cette lame et pourtant j’observe un comportement étrange (voir ici).

    En effet, dans les pages qui commencent par une liste, le premier élément s’écrit en tout petit.
    En regardant avec firebug, je constate que le premier item n’est pas entouré de <p>...</p> alors que les suivants le sont.

    Sais-tu ce qui se passe ?

    Répondre à ce message

  • 1

    Bonsoir à tous,

    J’utilise SARKA 3.0.2, et je voudrais paginer certains articles trop longs. J’ai donc installé le couteau suisse et intégrer dans mon article la balise de césure « ++++ » à chaque fois que je veux une nouvelle page.

    Mais je suis obligé de désactiver le cache dans le couteau suisse pour que la nouvelle page s’affiche quand je clique sur les n° de pages en haut de mon article (sinon elle ne change pas). Cela ne me semble pas propre, et surtout peut être amené à terme à ralentir mon site.

    Quelqu’un a-t-il une idée ???

    • Relis l’article ci-dessus, au paragraphe « Notes techniques »...

      Je ne connais pas sarkaspip...
      Mais en regardant article.html, tu pourras voir que la balise #TEXTE sur laquelle est appliquée la découpe en pages, est encapsulée dans une noisette et que le paramètre artpage n’est pas passé, il faut donc l’ajouter :

         <INCLURE{fond=noisettes/article/inc_article_description}{artpage}

      Si tu ne le passes pas, le cache de cette noisette sera unique, quel que soit la valeur de artpage.

      N’hésite pas à parler aux auteurs de ce squelette de cette incompatibilité...

      P.-S. : quand tu ajoutes &var_mode=inclure à ton URL, t’as les noisettes affichées...

    Répondre à ce message

  • Salut Patrice,
    J’avais promis (en janvier !) que je te tiendrai au courant sur les liens que je voulais faire vers un article sur un onglet précis, maintenant ton code marche tip top, merci merci merci ...
    Pelep

    Répondre à ce message

  • 4

    Bonjour,

    Dans un onglet, j’ai un texte avec des notes bas de page. Comment faire pour que ces notes apparaissent dans l’onglet lui-même et non dans la page générale de l’article ?

    Merci

    • Un petit traitement jQuery sur les notes en onglets devrait suffire...

      Mais ne serait-ce pas mieux que les notes restent groupées ? Par contre, le clic sur une note en bas d’article devrait ouvrir l’onglet concerné, je vais voir ça...

    • Déjà, voici une correction sur les notes. Ne serait-ce pas suffisant ?

      http://zone.spip.org/trac/spip-zone/changeset/36235

    • Merci pour cette rapidité...

      1) Les onglets n’apparaissent plus.

      2) L’article est paginé avec le titre en haut de chaque page.

      3) Les notes apparaîssent bien dans la page de l’article

      2) Le clic sur une note renvoie à la page sommaire

    • Dur dur de comprendre tout... Tu as un lien public ? C’est peut-être mieux qu’un long discours....

    Répondre à ce message

  • 2

    Merci pour cette belle doc claire et bien structurée.

    J’ai trouvé presque toutes les réponses à mes interrogations, mais j’aimerais avoir confirmation :

    Peut-on aussi écrire directement des +++++++ dans un squelette,
    et l’inclure avec [(#INCLURE{fond=corps}|cs_decoupe)] ?

    • Salut. Ton code devrait en effet fonctionner, mais tout dépend de ce qu’il y a dans corps.html... Les balises #INCLURE acceptent sans pb les filtres. As-tu essayé ?

      Pour avoir également les onglets, peut-être faudrait-il : [(#INCLURE{fond=corps}|cs_onglets|cs_decoupe)]

    • ok merci pour les onglets, je te dirai quand j’y serai.

    Répondre à ce message

  • Merci pour l’astuce :)

    Nous l’avons testée : effectivement, du coup il arrête de mettre des < p > < /p > partout. L’inconvénient, est que du coup le contenu des onglets (tout ce qui se trouve entre < onglets > à < /onglets > ) disparait du ckeditor, du coup il faut repasser en éditeur spip si on veut le modifier ou en modifier l’apparence.

    On dirait qu’on est sur la bonne voie en tout cas.

    Stef

    Répondre à ce message

  • 1

    J’ai mis des exceptions dans le CKeditor pour les balises , mais il ne semble pas les prendre en compte.
    Je pense au final que le problème vient du CKeditor. J’utilise la version 3.0.1, et après de longues recherches google je suis tombée sur des forums de l’éditeur où les gens se plaignent qu’il leur rajoute des balises

    alors qu’ils ne sautent pas de ligne, pour le moment pas vraiment de solutions à ce problème hélas.
    Je vais essayer de poser mes questions sur la page du plugin CKeditor, puisque c’est lui qui serait en cause et non le couteau suisse ^^

    Merci de votre aide

    stef

    Répondre à ce message

  • 1

    Merci Patrice :)

    J’ai testé le porte plume, très pratique pour les raccourcis typo effectivement, mais ckeditor continue à m’ajouter des < p > < /p > autour de mes balises < onglets >

    J’ai également testé de mettre fckeditor à la place de ckeditor, lui ne met pas les < p > , mais enlève les sauts de ligne qui servent à définir les onglets.

    Du coup dans les 2 cas, il faut repasser en éditeur spip pour corriger le code pour remettre les onglets correctement. Le problème est que le site est destiné à des personnes qui ne s’y connaissent pas forcement, donc un éditeur WYSIWYG est parfait pour la mise à jour du site.

    stef

    • Ce pb a l’air complexe. Si tu y vois un départ de solution, pkoi pas... Perso, je n’utilise aucun WYSIWYG, je te laisse donc y réfléchir.

      Il me semblait qu’il existait autrefois une commande en config pour que l’éditeur ne touche pas à l’intérieur de certaines balises... C’est indispensable pour SPIP, non ? Exemple : <html>, <code>, <poesie>, etc. Sans parler de <onglets>, bien sûr !

    Répondre à ce message

  • 1

    Bonjour à tous,

    j’utilise ce plugin pour créer des onglets à l’intérieur des pages avec la technique
    < onglets >
    ++++
    < /onglets >

    Je rencontre actuellement un problème : je fais la mise en page de mon texte avec ckeditor (images, gras, titres etc), je passe ensuite en mode editeur spip pour mettre les onglets, et dès que je repasse en ckeditor, ce dernier m’ajoute des p, me déplace ma balise onglets etc.
    Du coup, une fois les onglets créés, il est impossible de modifier le code en mode ckeditor sans devoir refaire toute la manipulation des onglets. Ce n’est pas gênant pour moi qui touche au code, mais le site sera rendu à un « client » qui risque d’avoir moins de facilités que moi à modifier en éditeur spip.
    J’ai l’impression que spip ne supporte pas les ++++ongletsuivant, et se sent obligé de rajouter des p. Le code sans p ou div autour à l’air de lui poser un soucis.
    Quelqu’un a- t- il le même problème, et une solution peut être ?

    Merci d’avance

    stef

    • Oui, c’est fatal ce comportement... Pourquoi ne pas utiliser le Porte Plume à la place de ckEditor ?

      Du coup les balises <html> et Cie ne fonctionnent pas non plus...

      Il faut voir si ce plugin permet d’écrire des zones de textes où le code n’est pas transformé, comme entre <onglets> et </onglets> justement...

    Répondre à ce message

  • 2

    Bonjour,

    Le titre de mon bloc dépliable s’affiche mal quand il contient des onglets. Voici une partie du code :

    ...
    ||PER-5069-3|54,00 $ |
    ||Devoir de reprise|14,00 $ |
    </bloc#3>
    
    <bloc#4>
    {{FRANÇAIS}}
    <onglets>
    {{FRANÇAIS}}
    
    |{{MATIÈRES}}|{{DESCRIPTION}}|{{MONTANT}}|
    |Français (Programme régulier)|Test de classement|4,00 $ |
    ||FRA-1031-3|28,00 $ |
    ||Devoir de reprise|5,00 $ |
    ||FRA-1032-2|34,00 $ |
    ||Devoir de reprise|5,00 $ |
    ||FRA-1033-1|31,00 $ |
    
    ++++
    
    {{FRANÇAIS - MISE À NIVEAU}}
    
    |{{SIGLES - Classement au secondaire}}|{{SIGLES - À faire en mise à niveau}}|{{À FAIRE - Cahiers d'exercices en mise à niveau}}|
    |FRA 1031-3|Présecondaire||
    |FRA 2031-3|FRA 1023-3|MAN 1 - 28,00 $|
    </onglets>
    </bloc#4>
    
    <bloc#5>
    {{HISTOIRE}}
    ...

    Chaque bloc contient un tableau mais en Français, comme il y a deux catégories, je voulais faire des onglets contenant chacun un tableau. Mais voilà, le titres pour la matière de français affiche :

    FRANÇAIS FRANÇAIS MATIÈRESDESCR.

    Que faire ?

    Merci

    • Ton code n’est pas conforme. Il faut sauter deux lignes après le titre du bloc, tout comme après le titre de l’onglet. De plus, ces titres doivent être composés d’un texte simple, sans balise :

      <bloc#4>FRANÇAIS
      
      <onglets>FRANÇAIS
      
      |{{MATIÈRES}}|{{DESCRIPTION}}|{{MONTANT}}|
      |Français (Programme régulier)|Test de classement|4,00 $ |
      ||FRA-1031-3|28,00 $ |
      ||Devoir de reprise|5,00 $ |
      ||FRA-1032-2|34,00 $ |
      ||Devoir de reprise|5,00 $ |
      ||FRA-1033-1|31,00 $ |
      
      ++++FRANÇAIS - MISE À NIVEAU
      
      |{{SIGLES - Classement au secondaire}}|{{SIGLES - À faire en mise à niveau}}|{{À FAIRE - Cahiers d'exercices en mise à niveau}}|
      |FRA 1031-3|Présecondaire||
      |FRA 2031-3|FRA 1023-3|MAN 1 - 28,00 $|
      
      </onglets>
      
      </bloc#4>
    • Super ! Ça fonctionne !

      Merci beaucoup Patrice !

    Répondre à ce message

  • 6

    Bonjour,
    Très pratique ce découpage, mais peut-on faire fonctionner CS_DECOUPE à la manière des onglets c-a-d en pré-chargeant tout l’article de façon a avoir une navigation instantanée entre les différentes parties de l’article ?.
    Petite question complémentaire, j’aimerais afficher mes intertitres comme lien plutôt que des numéros de découpe. Faut-il préférer activer « SOMMAIRE AUTO » ou bien surcharger « DECOUPE » ? (toujours dans l’optique de profiter pleinement d’ajax pour éviter le rachargement - même partiel - de la page).

    Merci

    • peut-on faire fonctionner CS_DECOUPE à la manière des onglets c-a-d en pré-chargeant tout l’article

      Euh, ça nécessiterait une refonte du code : ajouter des div complets et invisibles qui seraient cliquables... T’es sûr que ce serait un gain qqpart ?

      Si tu te lances dans l’aventure, n’hésite pas à communiquer ;-)

      j’aimerais afficher mes intertitres comme lien plutôt que des numéros de découpe.

      Là aussi, grosse retouche du code... en particulier fonds/decoupe_item.html

    • Humm, je suis pas sur de me lancer dans l’aventure. En revanche il y sans doute moyen de modifier la feuille de style de la version en onglets pour afficher un menu plus classique...

      J’ai tout de même utiliser découpe pour mon application. Dans decoupe.html j’ai supprimé toutes lignes concernant la gestion des fleches (toutes les lignes au-dessous de la liste de #SET) et je n’ai gardé que

      <ul>
      [(#ENV*{items})]
      </ul>

      J’ai également changé (# ENV*{page}) en (# ENV*{title_page}) dans decoupe_item.html. J’ai aussi supprimé -{$num_pages} dans la fonction decoupe_url du fichier decoupe_fonction.php. Plus pour l’esthétique d’avoir une url moins chargée (je ne vois pas bien à quoi ce paramètre est utile ?). Je crois que ce sont les seules surcharges que j’ai faites dans mon dossier squelette. J’utilise la balise #CS_DECOUPE pour l’affichage du menu, avec quelques adaptations CSS.

      Je n’ai pas trouvé où intervenir pour n’utiliser que les intertitres comme lien et non le début du texte en cas d’absence d’intertitre.

      Très pratique ce découpage !

    • J’ai aussi supprimé -$num_pages dans la fonction decoupe_url du fichier decoupe_fonction.php. Plus pour l’esthétique d’avoir une url moins chargée (je ne vois pas bien à quoi ce paramètre est utile ?).

      Ce paramètre sert par exemple à savoir que l’on est à la fin du découpage...

      Je crois que ce sont les seules surcharges que j’ai faites dans mon dossier squelette.

      Tu as donc surchargé le fichier decoupe_fonctions.php en entier, n’est-ce pas ! Avec autant de modifications, pourquoi n’avoir pas recréé ta propre lame perso finalement ? Il te suffit d’avoir au moins deux fichiers dans ton squelette : outis/madecoupe_fonctions.php (tiré de decoupe_fonctions.php) et outils/madecoupe_config.php (pour l’initialisation de ta lame). A toi de voir si tu ajoutes aussi outis/madecoupe.css pour styliser tout ça.

      Je n’ai pas trouvé où intervenir pour n’utiliser que les intertitres comme lien et non le début du texte en cas d’absence d’intertitre.

      C’est fait dans la fonction decouper_en_pages_rempl(), ligne 115.

    • Bonjour,

      Tu as donc surchargé le fichier decoupe_fonctions.php en entier, n’est-ce pas ! Avec autant de modifications, pourquoi n’avoir pas recréé ta propre lame perso finalement ? Il te suffit d’avoir au moins deux fichiers dans ton squelette : outis/madecoupe_fonctions.php (tiré de decoupe_fonctions.php) et outils/madecoupe_config.php (pour l’initialisation de ta lame).

      Je n’y avais pas songé ; J’ai essayé mais erreur sur le fichier outils/madecoupe_config.php. D’où vient-il ce fichier ? (pas trouvé de decoupe_config.php)

      C’est fait dans la fonction decouper_en_pages_rempl(), ligne 115.

      1. Mes connaissances en PHP étant très limitées je n’ai pas trouvé le moyen d’empêcher le script de générer un lien lorsqu’il n’y a pas d’intertitre (début d’article).
      2. J’ai été confronté au problème de la recherche et je n’ai pas trouvé d’autre moyen que d’envoyer cs=print dans l’url pour provoquer l’affichage sans découpe. Le problème est que maintenant j’aimerais pouvoir imprimer tout l’article et j’ajouterais bien cs=recherche pour mon premier besoin et je récupèrerais cs=print pour mon second (avec lancement de la boite d’impression du navigateur en prime). mais comment et où intervenir pour cette modification ?
    • J’ai essayé mais erreur sur le fichier outils/madecoupe_config.php. D’où vient-il ce fichier ? (pas trouvé de decoupe_config.php)

      Effectivement, l’outil de découpe est initialisé de façon classique dans le fichier /config_outils.php du Couteau Suisse.

      Tu devrais lire le paragraphe « Ajouter une lame personnalisée » de cet article : [dev] Le Couteau Suisse à piloter.

    • Merci pour ces indications, je regarderai ça quand j’aurai résolu mes autres problèmes. En l’occurrence ceux énoncés plus bas dans mon post précédent. 1. la mise en lien des intertitres seulement et 2. la possibilité d’imprimer. Merci pour ta précieuse aide.

    Répondre à ce message

  • 1

    Salut Pat,

    Pfff... Y’en a qui bossent dur pour la communauté. J’ai honte de t’exploiter comme ça !
    Ben non, vraiment désolée...
    La nouvelle version du plugin, c’est celle qui s’appelle la 1.91 ?
    Je l’ai chargée, mais ça n’y fait rien.

    Le lien sur [église->art15&onglet=4] renvoie sur la 404, et celui sur [forteresse de Chapteuil->art15#onglet1] renvoie bien sur l’article 15, mais pas sur le bon onglet ...

    Si tu veux aller jeter un oeil sur une des pages critiques :
    (je découpe mon url pour qu’elle passe ...)
    http://
    www.
    auvergne-paysdumeygal.
    com/
    spip/
    spip.php ?article14

    Bouhouhououh !

    • Le lien sur [église->art15&onglet=4] renvoie sur la 404

      Normal... Cette syntaxe n’est pas reconnue par SPIP.

      et celui sur [forteresse de Chapteuil->art15#onglet1] renvoie bien sur l’article 15, mais pas sur le bon onglet ...

      Normal... Ton Couteau Suisse (v1.8.08.02) n’est pas à jour. La dernière version est : 1.8.12.03. Tu sais mettre à jour un plugin ? Une fois à jour, l’onglet correspondant devrait s’ouvrir.

      (je découpe mon url pour qu’elle passe ...)

      Je crois que tu as droit à 1 ou 2 URLs...

    Répondre à ce message

  • 2

    Bonjour Patrice,

    Pourquoi n’est-elle pas passée ??? Peut-être parce que j’ai copié-collé mes liens (qui ne revoyaient vers rien sur spip-contrib ...)

    Bon, je te remerciais d’abord de ta réponse super-rapide.
    Je disais ensuite que j’ai tout essayé :

    forteresse->art15onglet=2
    forteresse->art15#onglet=2
    forteresse->art15ongl_2
    j’ai même essayé :
    forteresse->art15++++Un château-fort ... (le titre de mon onglet)

    Alors je me dis que c’est une erreur de syntaxe.
    Certains de ces liens me renvoyent vers mon article 15, premier onglet,, d’autres, à ma page 404.

    Des idées ?
    Snif !

    • Bonjour,

      A priori, ce n’est pas possible d’ajouter un parametre d’URL à un raccourci SPIP... Il faut utiliser les formes : [Par ici->?article123&onglet=2] ou [Par là->Mon_Titre_Propre.html?onglet=2]

      (N’hésite pas à utiliser les balises <code></code> pour donner des exemples SPIP)

    • Bonjour pelep,

      Avec une mise à jour du plugin modifié ce matin, tu peux désormais utiliser le raccourci SPIP suivant : [Par ici->123#onglet2]. Ce lien devrait ouvrir le 3e onglet de la page. Les ancres sont maintenant interprétées pour déployer l’onglet désiré.

      Tu me diras si c’est OK.

      Pat

    Répondre à ce message

  • 2

    D’avance, pardonnez une newbie dans spip !
    Le Couteau Suisse est génial, sauf l’option « jolis coins » qui désactive la couleur de fond de sarka ... j’ai mis un moment à trouver >< !
    La découpe en onglets est tout juste ce qu’il me faut, MAIS :
    Quelle est la syntaxe exacte pour renvoyer un mot d’un article vers un onglet précis ? Je m’explique : je gère la com de 7 communes, toutes veulent avoir leur onglet, avec leur joli clocher ... comment faire pour que le mot « forteresse » de ma page « Découvrez les communes » renvoie au deuxième onglet « Un château-fort... » et pas au premier « Un village de grottes ... » (village d’à côté).
    Merci de vos réponses, avant une guerre des villages !

    • A priori et comme indiqué dans l’article ci-dessus, il suffit d’ajouter le paramètre onglet=NN à l’URL de ton lien. Cela devrait déclencher l’ouverture du NNème onglet de la page... Un truc à savoir : la numérotation des onglets commence à zéro.

    • Ta réponse n’est pas passée. Attention à ce que tu écris... Tu disais ?

    Répondre à ce message

  • Ouaouh, ça, c’est de la réponse rapide !

    MAIS :

    les ruines de la forteresse féodale de Chapteuil
    ne marche pas ... (ça me renvoie à ma page erreur 404)
    ni
    les ruines de la forteresse féodale de Chapteuil
    ni
    les ruines de la forteresse féodale de Chapteuil
    ni ...
    j’ai tout essayé ! (y compris les ruines de la forteresse féodale de Chapteuil
    <avatargnn.jpg|center>
    Ou bien alors, c’est dans mon article 15 qu’il faut que je mette des ancres ?
    Bon, merci d’une info technique, et excusez-moi si je décroche ce soir : c’est pas pasqu’on est fonctionnaire qu’on ne mange pas le soir ... Bonne appétit et bonne nuit à tous.

    Répondre à ce message

  • 1
    Caméléon77

    Merci pour le conseil d’utiliser AJAX. C’est super, ça marche et le résultat est exactement ce que je souhaitais. Sauf que j’ai dû changer le inc-article-corps.php de l’exemple en inc-article-corps.html et ajouter dans ce fichier une balise #CS_DECOUPE. Je vais passer un joyeux Noël. Merci à vous et bon réveillon.

    • Ah bah oui tu as raison, c’était une fôte de frappe, je viens de la corriger. Il fallait bien sûr lire « inc-article-corps.html » et non « inc-article-corps.php ».

      Joyeux Noël !

    Répondre à ce message

  • 1
    Caméléon77

    Bonjour. Le couteau suisse permet des effets très beaux et très utiles. Par exemple, je voudrais utiliser la découpe de TEXTE pour faire un diaporama avec photo et légende. J’y suis parvenu mais à chaque saut de « page », le programme se replace en haut de la page et je voudrais positionner une ancre ou quelque chose juste en haut de ma partie « TEXTE » (par exemple, au niveau de la navigation en haut de la découpe) pour éviter l’abus d’ascenseur. Je viens de découvrir SPIP et j’ai besoin de votre aide ! Merci.

    Répondre à ce message

  • 5

    Salut

    quand je fais un article avec 2 tableaux SPIP l’un après l’autre, aucun problème. Si j’ajoute les ++++ pour faire 2 pages, ça marche toujours.

    Par contre, quand je transforme cette page avec des onglets, le premier tableau SPIP est créé correctement alors que le second est livré « en vrac », comme si SPIP ne faisait plus son travail de transformation.

    J’ai testé cela chez 2 hébergeur différents.

    Est-ce que d’autres ont déjà noté ce phénomène ?

    • Salut, tu es sûr de ta syntaxe et d’avoir la dernière version du Couteau Suisse ?

      Je viens de faire un test rapide et ça semble pourtant fonctionner... Quel est ton texte problématique ? Voici un exemple correct :

      <onglets>Onglet 1
      
      |{{titre 1}}|<|
      |toto|tata|
      ++++Onglet 2
      
      |{{titre 2}}|<|
      |titi|tutu|
      </onglets>
    • Salut

      oui j’ai bien la dernière version du couteau Suisse, la dernière version de SPIP, pas d’autres plugins activés. Je respecte bien la syntaxe indiquée et ... pas de tableau dans le second onglet :(

    • Héhé, merci pour l’accès à ton site.

      La balise <br> n’est pas autorisée, il s’agit même d’une faute de syntaxe HTML : seule l’écriture <br/> est valide. Ta balise est considérée comme ouvrante, et puisque l’équivalent fermant n’est pas trouvé, SPIP panique...

      De plus, sous SPIP, il ne faut donc pas écire :

      |[Déchetterie intercommunale->xxx]<br>
      rue Condorcet| 03.20.xx.xx.xx|

      mais :

      |[Déchetterie intercommunale->xxx]
      _ rue Condorcet| 03.20.xx.xx.xx|

      pour avoir :

      Déchetterie intercommunale

      rue Condorcet

      03.20.xx.xx.xx

       

      Donc... Une bière !?

    • Ben ouais, une caisse même : jamais je n’aurais pensé à ça ! Mais en fait, c’est pas SPIP qui « panique » puisque les tableaux s’affichent correctement... C’est seulement à la création des onglets que ça plante... Mais je note l’astuce. Encore merci !

    • Oui, tu as raison. Mais la syntaxe HTML est dans certains cas importante. Si tu ajoutes par exemple une ligne de texte après ton tableau, alors ton <br> sera automatiquement corrigé. Tiens, je ne sais pas si safehtml n’y est pas pour quelque chose ici...

      Les bières du Nord, je suis toujours partant !! lol

    Répondre à ce message

  • Trés bonne idée. je vais essayer cela de suite sur mon site.

    Merci pour l’article

    Répondre à ce message

  • 3

    ah oui ! je suis passée à côté on dirait !

    merci beaucoup, ça marche nickel

    Flo

    • Bonjour à tous, je suis hebergé chez 1and1 et j’utilise le site spip avec un SSL mutualisé de 1and1 ce qui me donne une chemin de la forme : https://ssl.1and1.fr/monsite.fr/dossier-spip/ évidemment je peux y acceder aussi sans utiliser le ssl par le chemin : http://www.monsite.fr/dossier-spip/ mais j’ai besoin de ce ssl
      le site fonctionne sans problème depuis que j’y accède avec le SSL de 1and1, sauf dans deux cas :
      la decoupe d’un article en plusieurs pages via le plugin couteau suisse, la première page s’affiche bien mais dès que l’on veut arriver aux autres pages, cela me met une adresse du type
      https://ssl.1and1.fr /dossier-spip/spip.php ?article26&id_rubrique=14&artpage=2-4
      evidemment cela crèe un problème puisque dans cette adresse il manque /monsite.fr/
      le meme bug arrive lors de la connexion à l’espace d’administration via le ssl, lors des liens cela les renvoie sans /monsite.fr/ dans l’adresse
      Je précise que l’url du site est bien configuré dans l’onglet configuration....
      D’ou cela peut -il venir et comment le résoudre ? Si quelqu’un a une idée parce que je suis complètement perdu... d’avance, merci !!!

    • salut, en principe ce type d’adresses est généré par SPIP lui-même... As-tu bien la dernière version 2.0.10 de SPIP ? As-tu bien renseigné l’URL de ton site en configuration ?

    • oui j’ai bien la dernière version de spip, et j’ai bien renseigné l’url dans l’onglet configuration...
      la j’avoue que je suis un peu paumé...

    Répondre à ce message

  • 1

    Bonjour,

    Dans mon ancienne version de spip, j’utilisais « découper un article et ajouter un sommaire ». Cette version n’étant pas compatible avec spip 2.0.1, j’ai installé le couteau suisse pour pouvoir découper mes articles.

    Mais le problème, c’est que j’ai pas mal d’articles découpés avec les signes -----. Comment faire pour les remplacer par ++++ sans modifier les articles un à un ??

    Merci d’avance

    Floriane

    • Tout est expliqué ci-dessus, au paragraphe « Notes techniques » ;-)

    Répondre à ce message

  • 2

    J’ai un drôle de soucis avec les onglets...

    Spip 2.0.9, squelette The Morning after, dernière version de couteau suisse.

    Dans l’espace privé tout va bien. Mais dans l’espace public les titres des onglets se placent les uns en dessous des autres. Ils fonctionnent mais sont mal positionnés.

    Une idée ?

    Merci

    Répondre à ce message

  • Tout d’abord merci pour ce plugin que j’utilise entre autre pour mettre des onglets dans un squelette.

    Je rencontre juste un problème sur la feuille CSS adaptée de l’article de Bowman, elle ne fonctionne pas sous IE 6.0 ou les onglets sont placés les uns sur les autres.
    La feuille de style de Bowman fonctionne bien, mais je n’arrive pas à comprendre la différence.

    Répondre à ce message

  • 4

    Bonjour

    sur mon site, l’utilisation des onglets ne fonctionne pas sur de très longs articles : la page affichée est blanche, le texte est bien en base mais ne s’affiche pas à l’écran (espace public comme privé)
    Dès que j’enlève les balises « onglets », l’article réapparaît. Et sur les articles avec moins de texte, pas de soucis non plus.
    Y-a-t-il une limite au nombre de caractères pour pouvoir utiliser cette fonctionnalité ?

    • En principe il n’y a aucune limitation, à part la mémoire disponible pour effectuer cette opération. Le même texte, mais séparé en deux articles distincts provoque-t-il la même page blanche ? En privé, je veux bien recevoir cet article pour tester de mon côté...

    • Dans ta version de PHP (5.2.9), il semble que la fonction preg_replace_callback() en mode « ungreedy » perd le texte en cours de route s’il est trop long : l’expression ',<onglets([0-9]*)>(.*?)</onglets\1>,ms' ne fonctionne plus alors que ',<onglets([0-9]*)>(.*)</onglets\1>,ms' fonctionne toujours...

      Je vois 4 pistes :
      -  modifier ton texte pour que les onglets soient moins gros (si tu coupes ton sytème d’onglets en deux, ça marche)
      -  changer de version de PHP : en tester pour trouver la fautive ? Je viens d’essayer sur une 4.4.2, c’est nickel...
      -  utiliser la 2e expression (par define dans mes_options), mais en étant sûr que les articles ne possèdent qu’un seul système d’onglets du coup...
      -  changer l’expression régulière, mais là comme ça, je n’ai pas trop d’idée... Un spécialiste dans la salle ?

    • Je souhaite mettre en place la solution n°3 : je dois donc créer le fichier mes_options.php dans mon dossier squelettes.
      Mais, pardonne moi d’abuser, je dois y mettre quoi ?

      En regardant le fichier outils/decoupe_fonctions.php il y a l’expression régulière qui nous intéresse en define. Il te suffit donc de la surcharger dans /config/mes_options.php en mettant :

      define('_onglets_REGEXPR', ',<onglets([0-9]*)>(.*)</onglets\1>,ms');

      Cela annule l’effet ungreedy de l’expression et interdit du coup les multiples systèmes d’onglets dans un article. Cependant, cette expression évite le bug de PHP 5.2.9 ...

    • Un grand merci !
      Aussitôt mis en place, et ça marche ;)

    Répondre à ce message

  • 7

    Bonjour,
    J’ai un problème avec la fonction Découpe en pages et en onglets ; depuis que je suis passé sous Spip 2.0.9, une erreur dans l’accès au fichier forum.php de Spip/squelettes-dist/formulaires/ m’est signalée lorsque je veux réagir à un article de mon site. La désactivation de cette fonction du Couteau suisse résout le problème.
    Je signale que j’ai mis à jour le plugin.

    • bonjour,

      ce problème a bien été identifié : il vous faut également mettre à jour spip.

      cordialement.

    • Merci de votre réponse. J’ai également mis à jour Spip (révision 14441) mais le problème persiste ; j’utilise le squelette Beespip (version 2.0[551]) ; le problème pourrait-il venir de là ? Merci de votre réponse.

    • Je ne connais pas ce squelette.. A voir s’il est bien compatible avec les formulares CVT de SPIP 2.0... La dist de SPIP (version du site sans squelette) fonctionne-t-elle bien ?

    • Merci pour vos réponses rapides.
      J’ai désactivé le squelette Beespip, mais lorsque j’active la lame Découpe en pages et onglets j’obtiens toujours le même message lorsque je veux poster une réaction à un article, à savoir :

      Fatal error : Call to undefined function : cs_decoupe() in /homez.44/sundep/www/squelettes-dist/formulaires/forum.php(275) : eval()’d code on line 1

    • Là, j’insiste !! Il faut mettre SPIP à jour avec la toute dernière release. La ligne 275 du fichier squelettes-dist/formulaires/forum.php ne contient plus aujourd’hui de fonction eval() ...

      Suite aux corrections apportées par les devs de SPIP, cette fonction est à présent déplacée ligne 278 : http://trac.rezo.net/trac/spip/brow....

      Merci de nous tenir au courant.

    • En installant le fichier qui est à l’adresse que vous m’indiquez, l’erreur est réparée ; mais j’avoue que je ne comprends pas pourquoi lorsque je télécharge la dernière version stable de spip, le fichier squelettes-dist/formulaires/forum.php contient la fonction eval() à la ligne 275 et non 278.
      Vérifiez, vous verrez.
      Merci pour le dépannage.

    • Ah oui, c’est tout à fait vrai ! Je pensais que le ZIP de SPIP avait automatiquement pris en compte la correction, au temps pour moi...

      J’ai donc prévenu les devs de SPIP, j’espère que ce fichier sera rapidement reconstruit afin de prendre en compte les derniers changements dans la version 2.0.9.

    Répondre à ce message

  • 1

    lorque je découpe un texte
    (<<++++>>) tout se passe bien à un détail près mes images de flèches ne sont pas en border=« 0 » j’ai donc de vilains carrés (marque le lien) autour des flèches....pourquoi ? est ce que je dois ajouter border=« 0 » quelque part dans un fichier interne ? ou est ce qu’il s’agit d’un paramètre « général » pour tous le site ...dans ce cas je je trouve pas la case à cocher merci.

    • Patrice Vanneufville

      Bonjour, ton pb est-il résolu ? As-tu un lien public à montrer ? La version du plugin est-elle bien la dernière ? Une ligne CSS doit entrer en conflit avec les styles d’origine.

      En principe les images de pagination du plugin sont automatiquement affublés du style suivant :

      div.pagination img {
        border:0 none;
        margin:0;
        padding:0;
      }

    Répondre à ce message

  • 1

    Hello, j’ai un probleme sous IE 7 et 8 avec les onglets en utilisant Magusine pour les themes.
    En effet au chargement de la page, on voit les onglets puis ils disparaissent subitement comme si la css etait virée d’un coup.

    En désactivant magusine les onglets fonctionnent sans problème..

    J’ai bien essayé d’insérer le code css de decoupe.css dans le defaut-spip.css mais ça ne change rien au problème.
    Voici la page ou on peut voir le soucis

    • Patrice Vanneufville

      Bonjour, ton problème est-il résolu ?
      Je ne sais pas comment tu as configuré ton site, mais je ne reconnais pas les onglets du plugin « Le Couteau Suisse ».

    Répondre à ce message

  • 1
    Jean-Luc Trussart

    Tout d’abord merci pour ce merveilleux plug-in.

    Serait-il possible de spécifier le format la page lors d’un saut de page (++++) ?

    J’aurais besoin de 4 formats de page à l’intérieur de mon article.

    Légal-Portrait
    Légal-Paysage
    Lettre-Portrait
    Lettre-Paysage

    Merci,

    • Ceci est probablement gérable directement avec ton squelette, en CSS, en fonction d’une rubrique, d’un mot-clé ou autre, non ?

      Ton message n’est pas très précis. Hors contexte, difficile de cerner ton pb.

    Répondre à ce message

  • 4

    Pourquoi es-ce que l’on implémenterait pas aussi les onglets javascript, si tu te bases sur le jquery.ui ?

    • Précise ta pensée ? le code jQuery des onglets est très léger...

    • ici http://ui.jquery.com/demos/tabs tu vas trouver les onglets sans ajax et avec ajax.

      Il semble qu’un code « jquery officiel » (UI.jquery) se développe et remplace plusieurs plugins disparates. Je n’ai pas regardé quel code jquery d’onglets tu as utilisé, mais celui-là marche bien, et surtout est bien supporté.

      En plus, ca donne d’autres idées à supporter dans CS, comme
      -  jquery Accordion (si c’est pas fait)
      -  jquery dialog (assez génial comme effet)

      Ce sont des balises pas très compliquées, du même genre que ce que l’on a fait dans les « blocs dépliables ». J’aurais plus le temps de me plonger dedans en Février.

      Tout le reste plus hard, pourrait être ajouté ensuite.
      http://ui.jquery.com/demos/

      Resizable me plait assez (surtout si ca marche pour les textarea des dialogues)

      Selectable est sympa aussi pour certaines applications

      le DatePicker serait cool pour crayons, mais je n’arrive pas à comprendre clairement comment on fait des Controleurs/vues. :-)

      enfin il y a aussi un effet de themes, mais là je t’avoue ne pas avoir très bien suivi...

      Je cherche toujours un code « propre et supporté » de jquery pour un menu horizontal.

    • « ici http://ui.jquery.com/demos/tabs tu vas trouver les onglets sans ajax et avec ajax. »
      -  oui, les onglets du CS ne sont pas ajax pour l’instant. Mais qq lignes je pense pourraient faire l’affaire, à l’instar des blocs dépliables, bien sûr.

      « Il semble qu’un code "jquery officiel" (UI.jquery) se développe et remplace plusieurs plugins disparates. Je n’ai pas regardé quel code jquery d’onglets tu as utilisé, mais celui-là marche bien, et surtout est bien supporté. »
      -  hmm.. C’est un peu lourd tout ça non ? Le code des onglets (outils/decoupe.js) est très léger, si par hasard SPIP intègre js UI, on pourra s’engouffrer ;-)

      « En plus, ca donne d’autres idées à supporter dans CS, comme jquery Accordion (si c’est pas fait) jquery dialog (assez génial comme effet) »
      -  Je ne connais ni l’un ni lautre en fait ;) à voir comment "mouliner" ça facile pour l’utilisateur...

      « le DatePicker serait cool pour crayons, mais je n’arrive pas à comprendre clairement comment on fait des Controleurs/vues. :-) »
      -  me suis amusé à faire ça pour éditer des jeux dans le plugin "jeux", si tu vx jeter un oeil... c’est pas très compliqué en fait, mais peut-être les dates posent-elles des pbs ! Tiens, Cédric n’a-t-il pas mis un dateur dans bonux ?

    • Oui, on peut tous réécrire, mais l’intérêt est un peu le même que celui de spip : travailler en groupe et profiter des inventions des zautres......

      je n’ai pas controlé pour la lourdeur, mais étant donné la façon de développer des jquery-men, on doit pas pouvoir faire plus léger ;-)

    Répondre à ce message

  • 2

    J’utilise la version 1.8.05.04 du plugin couteau suisse sur une version 2.0.2 de SPIP.
    J’ai activé la lame « Découper un texte en pages et/ou en onglets » et je veux utiliser dans mon squelettes les balises [(#ONGLETS_DEBUT)], [(#ONGLETS_TITRE)] et [(#ONGLETS_FIN)].

    J’obtiens un message d’erreur :
    Parse error: syntax error, unexpected '.' in /.../tmp/couteau-suisse/mes_fonctions.php(286) : eval()'d code on line 1

    En éditant le fichier en question, j’extrais le code suivant

    // Balises pour des onglets en squelette
    function balise_ONGLETS_DEBUT($p) {
    	$arg = interprete_argument_balise(1,$p);
    	eval("\$arg=_onglets_DEBUT._onglets_CONTENU.$arg.'</a></h2>';");
    	$p->code = "'$arg'";
    	return $p;
    }

    C’est la ligne qui commence par eval qui pose problème.
    Et là je suis largué, pas assez compétent pour aller plus loin.

    Qui peux m’aider ?

    • Histoire de reproduire l’erreur, quel est le code simplifié de ton squelette qui crée le pb ?

    • Fausse alerte, désolé : je pensais que ces balises servaient à positionner les blocs onglets, je les ai donc mis dans mon squelette sans paramètres.

    Répondre à ce message

  • Version spip : 1.9.2e
    Je n’installe pas la 1.9.2f tant qu’il n’y a pas de release note (!), et passer en 2.0 demande une analyse approfondie avant de migrer le site d’exploitation...

    Version CS récente mais pas la dernière (y’en a deux millions par jour !) : 1.7.20.03 révision 24011
    Si le souci a été corrigé dans une version plus récente, alors tant mieux, je le verrai quand je patcherai.

    Répondre à ce message

  • 1

    Bon plugin que j’utilise pas mal.
    Un petit bug très gênant toutefois :
    si on active la balise CS_DECOUPE, les notes de bas de page de l’article s’affichent une deuxième fois (avec leur numérotation qui continue à augmenter comme si c’étaient de nouvelles notes)
    Pas de souci si on ne met pas la balise par contre.

    Répondre à ce message

  • J’ai installé la version 1.9.1 de Spip. J’ai installé également le Couteau Suisse uniquement pour le découpage des des articles trop longs. Pour ça, il a donc fallu que j’installe également JQuery, et c’est OK. Maintenant, le pb est qu’au 1er « ++++ » qui correspond à la 1re découpe de l’article, l’article est effectivement coupé, il n’y a pas de navigation numérotée, et il n’y a pas les autres découpes de l’article. J’ai activé pourtant l’Insert Head, et là je suis un peu perdu... Quelqu’un pourrait-il m’aider ???

    Répondre à ce message

  • 5
    Archiloque

    Bonjour

    pour un site j’ai besoin de découper des textes en morceaux comme le permet ce plugin, mais je voudrais des liens de navigation différents de ceux générés par défaut par le plugin (des liens avant et après sous forme d’images et qui soient en dehors du bloc de texte).

    Existe-t-il des hooks qui permette de spécifier des fonctions php et js maison que le plugin appellerait pour générer ces liens de navigation ? Si non que pensez-vous de cette fonctionalité ?

    • En premier lieu, je rappelle que les images du Couteau Suisse peuvent être surchargées dans les squelettes. Pour les découpes, tu peux donc créer un répertoire monsqulette/img/decoupe/ à l’image de plugins/couteau_suisse/img/decoupe/ et y placer les images à surcharger.

      Ensuite, je pense qu’il est possible de déplacer les liens de navigation avec des styles CSS sur : #decoupe_haut et #decoupe_bas.

      Au pire, on pourrait créer une nouvelle balise (#NAVIGATION_DECOUPE par exemple) à l’image du « Sommaire automatique » qui peut se déporter grâce à #CS_SOMMAIRE.

    • Je viens d’ajouter un paragraphe ci-dessus sur les surcharges d’images, si ça peut déjà t’intéresser...

    • cet outil est intéressant, une balise pour personnaliser la navigation ou la placer ailleurs qu’à l’endroit prévu initialement est-il vraiment envisagé ? J’ai regardé les fichiers de configuration, mais c’est un chouïa trop compliqué à faire pour moi.

    • Ca pourrait oui, comme le fait déjà le sommaire...

    • Voila, je viens de l’intégrer dans la dernière version du Couteau Suisse. Les retours de test sont les bienvenus...

      A propos de l’ancre, ca devient délicat car la pagination peut être absente.

    Répondre à ce message

  • 1

    Bonjour, l’outil onglet, chez moi, ne fonctionne pas sous IE j’obtiens l’erreur « onglets_init est indéfini » et les onglets apparaissent dépliés dans le texte.

    En faisant des essais je me suis rendu compte que si je copie le fichier decoupe.js et que je le met dans le répertoire de mon squelette et que je l’appel dans mes pages via la balise #CHEMIN je n’ai plus le message d’erreur et si je fais la même chose avec la feuille de style ça marche.

    Est-ce que qq1 aurait une idée, moi je sèche ?

    Arnaud

    • Surtout pas, l’appel de outils/decoupe.js est automatiquement ajouté au header, à condition de bien avoir la balise #INSERT_HEAD en dur ou ajoutée par le couteau suisse...

    Répondre à ce message

  • Hello Patrice :)

    Comme d’hab encore une fonctionalité du tonnerre pour un plugin qui ne l’est pas moins (du tonnerre, faut suivre :P )

    seulement voila, titilleux comme je suis, il a encore fallu que je pousse le bébé jusque dans ses retranchements et... et... le résultat est que
    Loiseau2nuit : 1 - Le plugin : 0

    J’ai gagné... le droit de venir t’enquiquiner un peu avec la problématique suivante :

    [(#REM) PRODUITS DE LA GAMME CLASSES PAR ONGLETS]
    
    <BOUCLE_gammes_catalogue_un(MOTS) {id_groupe IN 2,7} {0,1} {doublons onglets}>
    [(#ONGLETS_DEBUT{#TITRE})]				
    <div id="3cols">
    <BOUCLE_articles_un(ARTICLES) {id_rubrique} {id_mot} {par num titre, titre}>
    <div class="box_prod">
    <h3 class="#EDIT{titre} prod_name"><a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></h3>
    <span class="#EDIT{soustitre} prod_ref">Ref : [(#SOUSTITRE)]</span> <!-- Ref Produit -->
    								<div class="prod_pict">[(#LOGO_ARTICLE|#URL_ARTICLE||image_reduire{100,100})]</div>
    								<span class="#EDIT{descriptif} prod_desc">[(#DESCRIPTIF)]</span>
    							</div>
    						</BOUCLE_articles_un>
    <h3 class="prod_name">Aucun produit publi&eacute; dans cette gamme. N'h&eacute;sitez pas &agrave; renouveller votre visite ult&eacute;rierement.</h3>
    <//B_articles_un>
    </div>
    					
    <br class="nettoyeur" />
    						 
    </BOUCLE_gammes_catalogue_un>
    
    <BOUCLE_gammes_catalogue_suite(MOTS) {id_groupe IN 2,7} {tout} {doublons onglets}>
    				[(#ONGLETS_TITRE{#TITRE})]		
    <div id="3cols">
    <BOUCLE_articles_suite(ARTICLES) {id_rubrique} {id_mot} {par num titre, titre}> [(#REM) {pagination} ]
    							<div class="box_prod">
    								<h3 class="#EDIT{titre} prod_name"><a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></h3>
    								<span class="#EDIT{soustitre} prod_ref">Ref : [(#SOUSTITRE)]</span> <!-- Ref Produit -->
    								<div class="prod_pict">[(#LOGO_ARTICLE|#URL_ARTICLE||image_reduire{100,100})]</div>
    								<span class="#EDIT{descriptif} prod_desc">[(#DESCRIPTIF)]</span>
    							</div>
    						</BOUCLE_articles_suite>
    						
    <h3 class="prod_name">Aucun produit publi&eacute; dans cette gamme. N'h&eacute;sitez pas &agrave; renouveller votre visite ult&eacute;rierement.</h3>
    						<//B_articles_suite>
    </div>
    					
    <br class="nettoyeur" />
    		</BOUCLE_gammes_catalogue_suite>				
    
    #ONGLETS_FIN

    Tout marche nickel sauf que... mes #TITRE de mots clés ne saffichent pas dans les onglets :O !!!

    C’est grave docteur ???

    Merci d’avance pour tes retours ;)

    et désolé pour le code pas indenté mais vu la taille restreinte du champ de commentaire, c’est couru d’avance...

    Répondre à ce message

  • 3

    Bravo pour ce travail, et merci !!
    J’utilisais la précédente version (2003) et je suis heureux de voir arriver ce plugin.

    Je me permets une suggestion. Mon expérience du découpage en page a été malheureuse car il faut apprendre aux rédacteurs à insérer la chaîne de repérage. Avant c’était ----. En pratique, c’est la galère. Il y a toujours un tiret de plus ou de moins, ou un espace, etc. Sans compter (malgré la doc fournie... écrivez donc des docs, ça remplira toujours les tiroirs) que personne ne se souvient jamais de la chaîne magique (« C’est quoi déjà le truc pour ajouter une séparation de page ? »).

    J’avais donc modifié la fonction fournie avec la chaîne _PAGE_. Depuis, tout le monde a bien intégré la chose et je n’ai plus eu de souci avec les « non-informaticiens ».

    Comme je vois qu’on passe de ---- à ++++, je me permets de faire profiter de mon expérience. Mais d’autres ont peut-être de meilleures idées pour que l’usage soit « naturel » pour ceux qui ne quittent jamais le monde merveilleux de Word...

    Ce n’est qu’un détail, merci encore du plugin !

    • Merci pour ton retour d’expérience.

      Avant c’était ----.

      C’était une bien mauvaise idée : Il s’agit déjà d’un raccourcis SPIP ajoutant une ligne horizontale.

      Sans compter (...) que personne ne se souvient jamais de la chaîne magique (« C’est quoi déjà le truc pour ajouter une séparation de page ? »).

      C’est un pb connu des raccourcis supplémentaires... Chaque webmestre peut apprécier en son âme et conscience. Et puis oui, il faut de l’aide à la rédaction, ça paraît inévitable.

      J’avais donc modifié la fonction fournie avec la chaîne _PAGE_. Depuis, tout le monde a bien intégré la chose et je n’ai plus eu de souci avec les « non-informaticiens ».

      A voir si une douce mutation est encore possible... Un rapide str_replace('_PAGE_', '++++', $texte) ? Le raccourci « ++++ » me semblait idéal, simple et bien visible, avec un clin d’oeil à « ---- ».

    • En fait l’idéal (il n’y a aucune revendication derrière cette remarque) serait qu’un bouton soit ajouté à la barre typographique. Les utilisateurs n’auraient rien à retenir du tout.

      Je me suis toujours demandé pourquoi SPIP, qui se spécialise pourtant dans l’édition d’articles, n’avait jamais développé ce genre de fonctionnalités qui touchent le « coeur » de son objectif.

      Peu importe, maintenant il y a un plugin ! ;)
      merci !

    • D’abord, un grand merci aux auteurs de ce plugin !

      Dans IE6, je trouve qu’on ne voit pas les images .gif, comme : precedent.gif, precedant_off.gif, suivant.gif et suivant_off.gif.

      Savez-vous comment on fait pour régler ce problème ?

    Répondre à ce message

  • 1

    bonjour,

    merci pour votre travail.

    Cependant...j’ai un leger pb, j’utilise la version de spip, et quand j’insere des onglets, dans l’affichage privée cela fonctionne normalement, mais dans l’affichage public les onglets se positionnent en vertical au dessus des boites.

    j’ai essayé plusieurs trucs mais aucun effets sur le pbs. Alors si quelqu’un a qui cela est deja rrivé peut m’aiguiller, cela me rendrait beaucoup service.

    Actuellement je fais tourner en local.

    merci de votre coopération et de votre travail.

    Répondre à ce message

  • 4
    asso.bachant

    Hello je passe donc les articles sous le couteau suisse en utilisant les onglets ;) ça suprime un plug.

    Mais j’ai un soucis peut on avoir des onglets dans les onglets, j’utilisé ça avec l’ancien plug ; comment ecrire la syntaxe.

    <onglets>premier
    
    ++++deuxieme
    
    <onglets>premierdudeuxieme
    
    ++++deuxiemedudeuxieme
    
    </onglets>
    
    ++++troiséme 

    mais la ça fonctionne pas donc est ce possible ???

    Deuxiéme point voulant supprimer encore un plug en m’appuyant sur le couteau je souhaite afficher des onglets sur ma page sommaire donc j’utilise

    [(#ONGLETS_DEBUTIntroduction)]
    [(#ONGLETS_TITREDéveloppement)]
    [(#ONGLETS_TITREConclusion)]
    #ONGLETS_FIN

    mais comment les rendre cliquable pour qu’il ouvre un lien ??

    merci a toi PATV ; je découvre les faces cachées du couteau

    • 1. Ouh là, t’aimes ce qui est compliqué ;-) a priori, c’est normal que ça marche pas. Les regExpr actuelles ne sont pas assez performantes pour ça. Des onglets dans des onglets, je pensais pas qu’on puisse un jour me demander ça ! Euh... t’y tiens vraiment ? la seule solution serait sans doute de pouvoir aussi numéroter les balises : <onglets1>bla bla</onglets1>

      2. Je comprends pas en fait ce que tu cherches... Je vois bien les onglets de ton sommaire, mais ?

      Tiens, sur le site de Robert ya aussi des onglets : http://www.observatoire-de-la-langu...

    • 1. Ouh là, t’aimes ce qui est compliqué ; Des onglets dans des onglets, je pensais pas qu’on puisse un jour me demander ça ! Euh... t’y tiens vraiment ?

      oui ; j’ai pal mal de truc qui fonctionne comme ça
      exemple :
      2 onglets windows & linux et dedans des sous onglets xp & vista ; ubuntu & etc...

      2. Je comprends pas en fait ce que tu cherches... Je vois bien les onglets de ton sommaire, mais ?
      Tiens, sur le site de Robert ya aussi des onglets : http://www.observatoire-de-la-langu...

      ben voila c’est ça mais quand tu clique tu ouvre une autre page, d’ailleurs robert la page sommaire reste fixe, seul le texte change de l’onglet.
      en gros un menu en onglets ??

       ;) stéf qui veut dépluginisé le squelette , passé en dessous de la barre des 30 plug

    • 1. Ok, il faut utiliser les balises numérotées alors : <onglets2></onglets2> par exemple.

      2. Je vois pas la rapport entre manipuler des onglets avec un contenu qui change en fonction de l’onglet qu’on clique, et la possibilité d’ouvrir une autre page ? ou j’ai encore rien compris...

      A ce moment là, si tu vx de simples onglets à cliquer t’as pas besoin du couteau suisse... utilise directement les div et les class qui vont bien avec. Derrière les onglets du CS ya une programmation complexe qui n’a rien à voir avec de simples liens à cliquer mis les uns à côté des autres, même s’ils ont une apparence d’onglets ;-)

    • pour le 1 : impec

      pour le 2 : c’est moi qui complique ; vive les div et les class

    Répondre à ce message

  • J’ai installé un système d’onglets en haut de ma page sommaire. Sous Firefox et IE7, ça marche correctement. Mais sous IE6, les logos qui sont à l’intérieur des onglets n’apparaissent pas à l’intérieur des cadres.

    Exemple : http://centre-lecture.com/home

    Merci de votre aide.

    Répondre à ce message

  • 9

    Bonjour,

    J’essaye de mettre en place les onglets directement dans mon squelette sommaire.

    j’utilise donc le code suivant :

    <div class="onglets_bloc_initial">
                     <div class="onglets_contenu">
                          <h2 class="cs_onglet"><a href="#">Introduction</a></h2>
                          blah blah blah
                     </div>
                     <div class="onglets_contenu">
                          <h2 class="cs_onglet"><a href="#">Développement</a></h2>
                          blah blah blah
                     </div>
                     <div class="onglets_contenu">
                          <h2 class="cs_onglet"><a href="#">Conclusion</a></h2>
                          blah blah blah
                     </div>
                </div>

    Les onglets apparaissent bien...
    Sauf que j’ai des undefined dans le titre des onglets...
    et qu’aucun n’est déplié à l’ouverture de la page.

    démo ici : matthieu.56.free.fr (tout en bas a droite avec les titres undefined, les onglets au dessus sont un test avec le code directement compilé.)

    Est ce que j’utilise le bon code html ?
    J ai testé avec les balise onglets et les ++++ direct dans le squelette, mais ceci ne sont pas interpretés.

    • Ton code est juste, mais l’analyse jQuery ne supporte pas les retours à la ligne... Par exemple, pour le premier onglet, le code « <div><div><h2><a>Introduction</a></h2> » doit être écrit sur une seule ligne.

      Voyant l’utilisation que tu fais du plugin, j’ai décidé d’introduire les balises #ONGLETS_DEBUT, #ONGLETS_TITRE, et #ONGLETS_FIN, à l’image des blocs repliables, disponibles à l’intérieur des articles, tout comme dans les squelettes.

      Exemple de syntaxe :

      [(#ONGLETS_DEBUT{Introduction})]
      	blah blah blah 1
      [(#ONGLETS_TITRE{Développement})]
      	blah blah blah 2
      [(#ONGLETS_TITRE{Conclusion})]
      	blah blah blah 3
      #ONGLETS_FIN

      Je t’invite donc à installer la version 1.7.9.12 du plugin !

    • 1. Lecture du message de Pat (bravo pour la réactivité)

      2. Mis à jour du plugin

      3. insertion de balises

      4. ça marche nickel !

      5. Merci beaucoup Pat ;-)

    • Peut être étais je passé à coté, mais j ai un souci sous IE7 avec la derniere version du plugin. (tu m vais signalé le prob sous IE6 Pat mais pas sous IE7 il me semble..)
      Sous FF ça passe bien en revanche.

      le souci en « images » : http://matthieu.56.free.fr/SPIP_SVN/?var_mode=calcul

      Environnement : Spip SVN, derniere version de couteau suisse

    • Je me demande si les scripts de « Nifty Corners Cube » ne seraient pas la source du pb sous IE... ça passe mieux si tu les enlèves ?

    • Scrrmrrrmllllllllllll

      bien vu Pat. c’était bien ça...
      bon bah, me reste plus qu’à trouver une parade !

      Fais c**** ce satané IE :-o

    • Pour info :

      un petit overflow: hidden; ajouté sur la class div.onglets_bloc .onglets_contenu a résolu le problème sous IE7...
      pour iE6, je laisse tomber ! on en verra de moins en moins de toute façon :-p

    • Nifty ne peux pas fonctionner avec IE et les onglets, car il lance une procedure spéciale pour IE (function FixIE(el)) où le style display du bloc traité est mis à « inline-block »... c’est gênant pour un onglet caché !!! Du coup tous les onglets sont rendus visibles...

      De plus, les déclarations « window.onload=function(){} » et « jQuery(document).ready(function(){}); » se téléscopent... c’est déconseillé de mélanger de vieux scripts en Javascript pur et des scripts modernes (comme ceux de onglets :-P) en jQuery.

      Je te propose deux modifs :

      -  supprimer les appels de nifty-bloog.js et appeler Nifty avec jQuery comme ceci :

      	jQuery(document).ready(function(){
      		Nifty("div.onglets_contenu");
      	});

      -  dans nifty.js, supprimer le test IE pour les onglets en remplacant le ligne 160 (el.style.display="inline-block";) par :

      if(!el.id.match(/^onglets_contenu/)) el.style.display="inline-block";
    • Salut Pat,

      aprés quelques moi sans avancer, je reviens à la charge, avec mes histoires d’onglets et de nifty :-p.

      J ai bien suivi ce que tu m’as dit pour éviter les problèmes sous IE.

      Modif de nifty.js + appel dans nifty-bloog.js avec jQuery pour arrondir les onglets...

      ça fonctionne plus ou moins, puisque je suis passé maintenant sur un nifty arrondi certes mais aussi « baveux » ;-) !

      Je sais qu’on sort un peu du thème de ce forum.. mais juste au cas où, tu as une piste...

      Merci d’avance

      Matth

    • FireWolf

      Bonjour Franck et Patrice,

      J’utilise votre contrib comme une lame du Couteau Suisse et je le trouve super utile.

      Sinon je rencontre le même problème que Mat sous IE7 et IE6 (tout les onglets déplié)
      J’ai essayé d’identifier nifty.js ou nifty-bloog.js pour porter les modifs indiqué plus haut, mais je trouve ces fichiers nulle part dans mon install (1.9.2c)

      Ces 2 fichiers sont externe à votre plugin mais utilisé par, ou mon install a foiré ?

      merci

    Répondre à ce message

  • 6

    Bonjour et bravo pour le plugin que j’utilise via le couteau suisse.
    J’utilise la dernière version du couteau. Je rencontre un problème lors du clic sur le titre de l’onglet : rien ne se passe. Il faut que je clique dessus ou sur le coté (soit hors de la zone « a » du titre pour que çà veuille bien changer d’onglet. Quelqu’un a t’il le même problème. Y a t’il quelque chose de plus à faire que le code suivant dans l’article ? (hors aspect design)

    <onglets>
    {{The facilities}}
    
    
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
    xxxxxxxxxxxxx
    
    ++++
    {{The Multilinguism}}
    
    
    xxxxxxxxxxxxxxxxxxxx
    
    ++++
    {{The Uniforms}}
    
    
    BLa
    
    </onglets>

    Merci pour votre aide
    Yann

    • Q1 : as-tu la toute dernière version du Couteau Suisse ?

      Q2 : as-tu remarqué cela sur plusieurs navigateurs ?

      Q3 : as-tu un lien à montrer ?

      Au passage, le code proposé peut être simplifié comme ceci :

      <onglets>The facilities
      
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      
      xxxxxxxxxxxxx
      ++++The Multilinguism
      
      xxxxxxxxxxxxxxxxxxxx
      ++++The Uniforms
      
      BLa
      </onglets>
    • Bonjour et merci pour ta réponse rapide.
      R1 : J’ai la version 1.7.16.07 qui je crois est la dernière
      R2 : problème sous FF2.0.0.11, IE7, IE6, Opera 9.25.
      R3 : http://www.hfh.com.vn/new/spip.php?article268
      Simplification effectuée... J’avais effectivement vu que les titres étaient déjà en « bold » dans la CSS...
      Yann

    • Merci pour l’url.

      Il semble que le clic des liens <a> a été reprogrammé par dessus le couteau suisse et empêche donc les onglets de fonctionner pleinement. Pour être exact, ce sont les titres d’onglets <h2> qui recoivent le clic, d’où le fonctionnement partiel en périphérie du bouton. Je vais voir de mon côté si je peux éviter ça dans la source du couteau suisse.

      Que se passe-t-il si tu dévalides le chargement de menu.js ? Si ça résout ton pb, il faudrait changer le $("a").click en qqchose de plus ciblé, genre $("a.aumoinsuneclasse").click, afin de laisser les onglets fonctionner tranquille !

      Une dernière chose. Tu as créé un ficher perso_decoupe.css, mais tu pouvais aussi surcharger le fichier d’origine avec celui-ci : squelettes/outils/decoupe.css, tout comme n’importe quel fichier js ou css du Couteau d’ailleurs.

    • Voila, tu peux mettre à jour le Couteau Suisse, je viens de blinder le clic sur les titres d’onglets. Cela devrait fonctionner, même avec ton menu.js d’origine.

    • merci Pat pour toutes ces infos et pour ton blindage. Je vais de ce pas mettre à jour le couteau et te tiendrai au courant. Je pense aussi suivre comme tu le conseilles la méthode de personnaliation du couteau plutôt que celle que j’utilise. Ce sera plus cohérent...
      Mais chez moi il est tard (Vietnam) donc je ferai çà demain...
      Yann

    • C’est nickel...
      Merci encore pour ta réponse rapide et efficace.
      Yann

    Répondre à ce message

  • 8

    bonjour,

    félicitation pour l’intégration des onglets, compilés avec la découpe en page cela fait du plus bel effet !!!!

    Au passage, j’ai un message styleWarning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 15 in /home.10.19/allsecur/www/fr/tmp/couteau-suisse/mes_fonctions.php on line 66 sur 2 articles utilisant les onglets (je précise à l’interieur de la découpe en page. As tu une idée ?

    Merci d’avance

    • ah, comme le fichier est une compilation, je ne peux pas savoir de quelle ligne il s’agit en fait.. pourrais-tu me donner la ligne (ou le paragraphe) en question ? (ligne 66 de tmp/couteau-suisse/mes_fonctions.php)

    • // Controle (basique!) des 3 balises usuelles p|div|span eventuellement coupees
      // Attention : simple traitement pour des balises non imbriquees
      function cs_safebalises($texte) {
      	$texte = trim($texte);
      	// ouvre la premiere balise trouvee fermee
      	if(preg_match(',^(.*)</(.+)>,Ums', $texte, $m) && !preg_match(",<$m[2][ >],", $m[1])) $texte="<$m[2]>$texte";
      	// referme la derniere balise laissee ouverte
      	if(preg_match(',^(.*)[ >]([^ >]*[^/])<,Ums', $rev = strrev($texte), $m) && !preg_match(",>$m[2]/<,", $m[1])) $texte = strrev(">$m[2]/<$rev");
       ......
    • si tu remplaces « ,^(.*)[ >]([^ >]*[^/])<, » par « ,^(.*)[ >]([^ >]+[^/])<, » dans plugins/couteau_suisse/outils/cout_fonctions.php, ça règle le pb (url avec var_mode=recalcul) ?

    • Re,

      J’ai fait les modifs dans le fichier, supprimé le rep temp et reinitialisé le Cs, malheureusement : Fatal error: Call to undefined function: cs_safebalises() in /home.10.19/allsecur/www/fr/tmp/couteau-suisse/mes_fonctions.php on line 28. Je vais essayer de regarder aussi

    • c’est en ligne sur ton site ? quels sont les articles qui créent l’erreur sur preg_match ?

    • ah punaise au lieu d’avancer je recules .... je n’ai tjs pas trouvé l’origine du problème par contre il arrive que le couteau se désactive complètement (aucune fonction reconnue). Je l’ai testé sur un de mes site en 1.9.2.c et idem.

    • Merci bcp pour les infos que tu m’as données par mail. Je pense que la version 1.7.16.05 du plugin devrait régler le problème... J’ai été un peu trop lâche dans mes regexpr...

      As-tu toujours ces erreurs sur cs_decoupe ou cs_sommaire indéfinis ? car là c’est probablement des traitements appelés en dehors du champ applicatif du plugin : par exemple des balises #TEXTE (ou autres) dans des fichiers css.html ou js.html...

    Répondre à ce message

  • 1

    Bravo pour ce plugin très pratique et simple à mettre en oeuvre.
    J’utilise la fonctionnalité qui permet de découper un article en plusieurs pages MAIS (comme on est jamais totalement satisfait ...) je souhaiterais n’afficher le portfolio que sur la dernière page.
    Est ce possible ? Faut il modifier le plugin ?

    Merci d’avance pour une réponse.
    Thierry

    • Le question du portfolio est délicate. J’ai introduit aujourd’hui trois filtres à cet outil pour avoir accès aux pages de l’article : artpage, artpage_fin et artpage_debut.

      Ces filtres regardent simplement le parametre artpage de l’url pour donner le résultat. Voici qq exemples d’utilisation, sans certifier que ça soit pérenne ou remplacé par des balises :
      -  #ENV{artpage} : renvoie la valeur du parametre artpage
      -  [(#ENV{artpage}|artpage)] : renvoie la page en cours
      -  [(#ENV{artpage}|artpage{1})] : renvoie le nombre de pages (uniquement si spécifié dans artpage !)
      -  [(#ENV{artpage}|artpage_debut|?{' '}) Premiere page !] : est vrai si on est sur la première page
      -  [(#ENV{artpage}|artpage_fin|?{' '}) Derniere page !] : est vrai si on est sur la dernière page

      Ceci permettra peut-être d’agir sur les boucles du portfolio...

    Répondre à ce message

  • 4

    salut à tous !
    je débute sous spip mais je ne suis pas un noob ;)

    J’ai remarqué que l’insertion automatique de l’appel à jquery.js ne se faisait que quand j’étais logué en admin.
    J’ai donc mis l’appel moi même et là les onglets marchent aussi bien sous IE que sur FF.

    Pourquoi l’appel ne se met pas directement quand je suis en anonyme ?? Où faut il activer ceci ?

    (j’ai bien activé la fonction INSERT HEAD du couteau suiise.

    • ah... Il me semblait que c’était automatique... tu es sous quelle version de SPIP ?

    • dernière 1.92c

    • Je ne parviens pas à reproduire ton erreur... SPIP introduit d’office la fonction f_jQuery() sur les pipelines ’header_prive’ et ’insert_head’. T’es sûr que t’as pas activé la lame « pas de jQuery en public » ?

      Quel autres plugins as-tu activés ? Tu as un lien à montrer ?

    • merci de ta réponse.

      Lien : spip.le39prod.com

      apparement tout est rentré dans l’ordre j’ai laissé tombé linsert auto de INSERT HEAD. Il ne marchait pas apparement...
      enfin bref !
      Maintenant je m’attaque au multilingue !

    Répondre à ce message

  • 1

    Bonjour,

    Je suis en mode URL propre 2. Lorsque je voulais découper un article en page ou en onglet en utilisant votre plugin (récupéré dans le couteau suisse), la page ne se chargeait pas normalement. En désactivant le cache, les pages s’affichait correctement. Cependant, ayant besoin du cache, j’ai modifié le code source du plugin pour rajouter derrière chaque URL « &var_mode=calcul » pour recalculer chaque page.

    liens href sur « decoupe_fonction.php » :

    ligne 110 :

    $precedent = ’

     ;

    116 :

    $suivant = ’ ;

    124 :

    $debut = ’ ;

    130 :

    $fin = ’ ;

    et enfin ligne 145 :

    $milieu[] = ’$i

    " ;

    Si ça peut servir à quelqu’un d’autre.

    A+

    • 1. As-tu vraiment la toute dernière version du CS ? J’ai ajouté une compatibilité avec les urls dernièrement. Et rajouter « &var_mode=calcul » équivaut à annuler le cache...

      2. Il faut éviter de modifier les fichiers du plugins car à chaque mise à jour ces modifications sont perdues... Il vaut mieux tenter de trouver une autre solution. Par exemple, les fichiers .css peuvent être facilement surchargés en les copiant dans votre squelette : monsquelette/outils/monnouveau.css.

      3. Tes exemples de code ne passent pas du tout semble-t-il. Il faut utiliser les balises <code> et </code>

    Répondre à ce message

  • 4

    Bonjour,
    J’ai un petit problème (téléchargement de ce jour, dernière version du plugin) : le premier paragraphe après chaque onglet n’est plus justifié (par exemple ici ou . C’est le style
    <p class="spip" align="justify"> qui est éliminé par le style des onglets
    <div class="onglets_bloc_initial"><div class="onglets_contenu"><h2 class="cs_onglet">.

    Si je mets deux lignes de paragraphe après le titre de l’onglet, la mise en page est récupérée pour ce premier paragraphe... mais le titre de l’onglet n’est plus dans l’onglet.

    Suis-je la seule ? Que faire pour garder la mise en page homogène ?

    Merci

    • Merci pour ce message, les liens sont très explicites. Je viens de corriger ce pb dans la version 1.7.9.16 du CS.

      Un petit conseil de présentation peut-être qui vaut ce qu’il vaut... Dans la surcharge de decoups.css que tu as faite dans ton squelette, pkoi ne pas mettre plutot :

      div.onglets_bloc .onglets_contenu {
        top:-12px; /* a la place de -10px */
      }

      C’est vrai que le CSS h2, #conteneur #content h2 contenu dans blog.css vient pas mal modifier l’aspect des titres d’onglet...

    • Il doit y avoir un petit oubli quelque part car la page ne ressemble plus à rien (une suite des textes sans fin ni présentation).
      Pour info, elle commence par

      Array
      (
          [0] =>  
    • Toutes mes excuses, j’avais oublié une ligne de debug... C’est corrigé.

    • Une ligne de débug qui fait bugger... les joies de l’informatique < :-)
      Ca marche nickel, je suis super contente, j’ai rectifié mon css, les onglets parfaits. Très beau plugin, félicitations !

    Répondre à ce message

  • 13

    Cette contribution est incompatible avec En onglets dans le texte ?
    Chez moi, ça ne fonctionne pas.

    Et pourtant j’aimerais installer ce système, mais comme j’ai des nombreuses utilisations de l’autres, il me faudrait garder l’autre pour la lecture de l’existant.
    Est-ce possible ?
    Merci.

    • le couteau suisse et le plugin onglets dans le texte n’utilisent pas les mêmes balises et class css... des onglets qui fonctionent avec le premier ne « tourneront » donc pas avec le deuxième et vice versa.

      En revanche tu peux parfaitement garder tout ce que tu as fait avec le plugin « onglets dans le texte » et créer de nouveaux onglets avec le couteau suisse...

      A toi de voir...

    • Oui, effectivement, maintenant ça marche, j’avais dû faire une erreur quelque part.
      Une petite demande : peut-on accrocher des ancres à ces onglets, de manière à envoyer des liens directement sur la partie onglets que l’on veut ,
      Avec le plugin en onglets dans le texte ce n’est pas possible.

      Merci.

    • Depuis la toute dernière mouture du CS, la compatibilité avec la contrib de Pierre est assurée. Peux-tu vérifier cela avec tes anciens articles ? Plus besoin donc de cohabitation, même si elle fonctionne. Attention toutefois aux CSS...

      De plus, je vais poster ce soir une version du CS qui permettra d’activer un onglet au moyen d’un parametre « onglet » dans l’url. Si on veut activer le 5e onglet de la page (entière !), mettre : « onglet=4 ».

    • J’oubliais que l’ancre associée aux blocs d’onglets est par exemple : #ongl_1

      Il suffit de regarder le code final produit par jQuery.

    • Mon code source n’indique pas d’ancre, et, normal, ça ne marche pas. Depuis quand le système d’ancre est-il implémenté ?
      Merci

    • D’abord, il faut mettre à jour le plugin avant tout message ici. J’ai bien précisé, me semble-t-il : « depuis la toute dernière mouture du CS ».

      Ensuite, je parle du code source final, modifié par jQuery, non du code source. Ce code est facilement visible sous FF.

      Le code final doit ressembler à celui-ci : <div id="ongl_0" class="onglets_bloc">. Du coup, l’ancre est : #ongl_0.

      Si ça ne fonctionne toujours pas alors laisse-nous un lien public si tu en as un, c’est toujours plus efficace que de grands discours.

    • Euh, oui... mais non !
      Effectivement tout est nickel selon les spécifications. De ce côté pas de problème.
      Mais.... J’avais des onglets, avec titres et choix possible d’un coup d’oeil.
      Maintenant, automatiquement, sur les anciens j’ai un découpage avec des chiffres de page non significatifs.
      Et je ne vais pas me coltiner des centaines d’articles à changer.
      Je proposerai donc un petit changement :

      si on est dans la configuration ancienne (de en_onglets_dans_le_texte, alors soit au lieu du numéro de page on a le titre de l’onglet, pour choisir correctement (ma préférence, car tout le monde aura un jour ou l’autre cette envie, les chiffres des pages n’étant pas explicites) ;
      Soit l’ajout automatique d’un sommaire reprenant les titres des onglets, avec lien vers la page concernée (j’aime beaucoup aussi),
      soit un script pour changer la configuration de ce qui préexistait dans tous les articles ou brèves concernés en changeant :

      <onglet|debut|id=x|titre=titre de l'onglet> en <onglet> puis titre de l'onglet puis deux sauts de ligne
      
      <onglet|titre=titre de l'onglet> en ++++  puis titre de l'onglet puis deux sauts de ligne
      
      <onglet|fin> en </onglet>

      soit une autre solution, à chercher.

      En tous cas, merci c’est vraiment la bonne voie.

    • Euh, oui... mais non !

      J’ai peur de pas tout comprendre ton message... Toujours pas de lien ?

      je n’avais pas pris en compte le « |id=x ». Donc voila chose faite.

      Je précise que le raccourcis ici est au pluriel : <onglets>

    • Non, je ne parle pas de l’ancre, mais je n’ai plus les onglets pour l’ancienne notation : je n’ai que les numéros de page pour les clics d’un grand titre (anciennement onglet) à l’autre, pas les onglets.
      Je veux dire que l’ancienne notation onglets devient des numéros de page et non pas des onglets.
      De plus, les numéros de page en haut et en bas et au milieux, ce n’est pas très très joli, mais ça c’est une autre affaire < :-)

    • Merci de mettre à jour le plugin (rev. 17085) avant de répondre à ce message !! Les id devraient être pris en compte.

    • Super, les onglets marchent, merci beaucoup, reste plus qu’à adapter les css.
      En revanche les ancres non, et le code source d’ailleurs ne les donne pas (je parle bien du code source, ce qui signifie celui de la page, pas celui du programmeur) :<div class="onglets_contenu"><h2 class="cs_onglet"><a href="#">.
      A ce propos, je crois que pour limiter la confusionil vaudrait mieux ajouter artificiellement 1 au compteur pour que l’onglet numéro 1 s’appelle vraiment par #ongl_1 et non pas #ongl_0.

      Exemple : http://lipietz.net/?page=blog&id_breve=269#ongl_1

    • Mais les ancres pour quoi ? La seule ancre exploitable est celle du bloc entier : #ongl_0. Si un onglet est invisible, ses ancres ne servent à rien.

      Un système pour activer un onglet ? J’ai déja répondu à cette question...

      Les onglets s’activent grâce à un paramètre d’url. Exemple :
      http://lipietz.net/?page=blog&id_breve=269&onglet=1

      A cela on peut aussi ajouter l’ancre #ongl_0

    • Bon, désolée, j’avais pas tout compris, j’ai dû rater des trucs.
      Maintenant c’est nickel.
      Ne reste plus que ma suggestion (si possible) de mettre le compteur des onglets selon la logique humaine et non informatique < :-).
      Encore merci pour ce joli travail.

    Répondre à ce message

  • 1

    Bonjour,

    Un soucis avec cet outil. La découpe du texte en page fonctionne très bien,
    par contre toutes les notes de bas de page ont disparues.

    SPIP 1.9.2c + Version : 1.7.9.06 du couteau suisse.
    JQuery, #INSERT_HEAD sont pourtant bien activée.
    Je teste avec Firefox

    • je me répond à moi même.
      J’avais oublié de mettre dans mon squelettes la balise #NOTES …

    Répondre à ce message

  • 1
    thierrybo

    Bonjour,

    avec le squelette SPIP par défaut (Version : 1.7.9.04 du couteau suisse), j’obtiens ceci quelque soit les retours à la ligne avec le code suivant :

    A la rédaction du texte de l’article procédez comme suit :
    
    <onglets>Onglet1
    
    
    contenu du premier onglet
    
    ++++onglet2
    
    
    contenu du deuxième onglet
    
    ++++onglet3
    
    
    contenu du troisième onglet
    etc...
    </onglets>
    
    <onglets>Introduction
     
    blah blah blah
    ++++Développement
                   
    blah blah blah
    ++++Conclusion
                   
     blah blah blah
    </onglets>
    • Ah, tu es peut-être sous Mac ? sous Windows ? Je viens de renforcer la compatibilité entre plateformes au sujet du double saut de ligne.

      Qu’en est-il après mise à jour (v1.7.9.06 du couteau suisse, dispo à 14h04) ?

    Répondre à ce message

  • 2

    Bravo pour ce super plugin qui marche nickel sauf un léger soucis :

    Lorsque j’utilise la séparation en pages, les documents insérés dans l’article apparaissent en bas d’article alors que ce n’est pas le cas sans la séparation en pages activée. Avez-vous une idée de l’origine du problème ?

    PS : j’utilise Beespip 1.9.1 et un plugin pour insérer les animations Tracenpoche et Instrumenpoche

    • Tu as un lien à montrer ?

    • J’ai aussi le même effet. En fait, chaque doc n’apparait qu’une seule fois par défaut : si on a inclus un doc dans le corps du texte, il n’est plus censé apparaitre dans le portfolio. Mais avec ce plugin, la notion de pages est bouleversée : chaque mini page est considérée comme une entité à part entière, or les docs appartiennent à l’article dans son ensemble. Du coup, les docs joints apparaissent tous dans la portfolio, sauf ceux qui sont dans la corps de la mini page.

      Ce serait sympa de pouvoir disposer d’une option qui recense tous les docs joints à toutes les mini pages d’un article, afin qu’on n’ait pas cette suite de docs répétés dans le portfolio.

    Répondre à ce message

  • 3
    Thierry

    Bonjour,

    J’ai installé cette fonction sur un site en SPIP 1.9.2b et ça fonctionne presque parfaitement si ce n’est que les numéros des notes de bas de page ne sont pas les mêmes dans l’espace privé et dans l’espace public.

    Ainsi la note 1 dans l’espace privé se retrouve en ligne avec, par exemple, le numéro 25... la note 2 dans l’espace privé avec le numéro 26 dans l’espace public... et ainsi de suite...

    Comment corriger ce problème ?

    Merci pour votre aide,

    Cordialement,

    TS

    • A propos des notes de bas de page, j’ai un article coupé en plusieurs pages avec une seule note de bas de page qui se trouve dans la première page. Or toutes les autres pages affichent également le titre « Notes » sans rien dessous évidemment...

      Je ne vois pas comment empêcher cet affichage inutile.

    • Effectivement. Je viens d’optimiser le traitement des notes afin d’éviter ce problème.

      il te reste à mettre à jour le plugin. Merci pour le retour.

    • bravo ça fonctionne parfaitement :
      dans un article paginé dont certaines pages ont des notes et d’autres non,
      la section « Notes » s’affiche quand il y a une ou des notes dans la pages et ne s’affiche plus quand la page n’en a pas

      bref, ça le fait !

    Répondre à ce message

  • Bonjour à tous et un grand merci aux auteurs du Plugin.

    J’ai une petite idée de plugin complémentaire : que la découpe en pages soit faîte automatiquement de façon à avoir une hauteur de page fixe.

    La hauteur pourrait être spécifiée en pixel, par exemple. Il s’agirait de la hauteur de la zone corresponsant à #TEXTE. Il faudrait prendre en compte l’insertion des images et des paramètres css du texte. Pas simple hein ?

    Une option pourrait être que la découpe se fasse entre deux paragraphes consécutifs, pour éviter une découpe en plein milieu du texte. Une autre option : découpe automatique avant un intertitre.

    Mais toujours en respectant une hauteur de page max.

    Cela existe déjà ? ou dois-je mettre au défi les kadors du spip et du php ?

    ciao

    Répondre à ce message

  • Bonjour,

    Déjà merci pour ce plugins !

    Ayant un site avec un grand nombre de page déjà publiée, j’ai modifié le script pour que la découpe se fasse automatiquement tous les x nbre de caractère.

    Pour ne pas découper n’importe où dans le texte, la fonction cherche une fin de paragraphe

    pour insérer le séparateur. Il y a un contrôle pour éviter de couper dans une DIV.

    Serait-il possible d’incorper cette fonction, si pour autant elle peut être utile, au script du couteaux suisse ?

    voici le nouveaux code de « decoupe_fonction.php » :

    define('_decoupe_NB_CARACTERES', 10000);
    
    // Filtre local utilise par le filtre 'cs_imprimer' afin d'eviter la decoupe
    // Exemple : lors d'une impression a l'aide du squelette imprimer.html,
    // remplacer la balise #TEXTE par [(#TEXTE*|propre|cs_imprimer)].
    function decoupe_imprimer($texte) {
    	return str_replace(_decoupe_SEPARATEUR, '<p style="border-bottom:1px dashed #666; padding:0; margin:1em 20%; font-size:4pt;" >&nbsp; &nbsp;</p>', $texte);
    }
    
    // aide le Couteau Suisse a calculer la balise #INTRODUCTION
    function decoupe_introduire($texte) {
    	return str_replace(_decoupe_SEPARATEUR, '<p>&nbsp;</p>', $texte);
    }
    $GLOBALS['cs_introduire'][] = 'decoupe_introduire';
    
    // fonction appellee sur les parties du textes non comprises entre les balises : html|code|cadre|frame|script|acronym|cite
    function decouper_en_pages_rempl($texte) {
    	// Nettoyage des anciens caractère de découpe
    	$texte = decoupe_supp_anc_car($texte);
    	// Découpage automatique si plus grand que _decoupe_NB_CARACTERES et qu'il n'y a pas de _decoupe_SEPARATEUR dans le texte.	
    	if ((strlen($texte) <= _decoupe_NB_CARACTERES) && (strpos($texte, _decoupe_SEPARATEUR)===false)){
    		return $texte; 
    	} elseif (strpos($texte, _decoupe_SEPARATEUR) !== false) {
    		$auto = false;	
    	} elseif (strpos($texte, _decoupe_SEPARATEUR) === false) {
    		$auto = true; 
    	}
    	// au cas ou on ne veuille pas de decoupe
    	if ($_GET['artpage']=='print') return decoupe_imprimer($texte);
    	// recherche du sommaire s'il existe
    	if (defined('_sommaire_REM') && (substr_count($texte, _sommaire_REM)==2)) {
    		$pages = explode(_sommaire_REM, $texte);
    		$sommaire = $pages[0].$pages[1];
    		$texte = $pages[2];
    	} else $sommaire = ''; 
    
    	// Insertion automatique du séparateur de page après la balise </p> la plus proche tous les _decoupe_NB_CARACTERES
    	if ($auto) {
    		$look = '</p>';
    		$len_look = strlen($look); 
    		// Offset de découpe
    		$offset = _decoupe_NB_CARACTERES ;
    		$len = strlen($texte);
    		$len_toc = strlen($sommaire);
    		$pos = 0;
    		
    		do  { 
    		// Trouve la position pour insérer les caractères de découpage:
    		// Trouve la fin de paragraphe la plus proche depuis l'offset (ajoute la longueur du sommaire si existant)
    		$pos = strpos($texte, $look, $offset + $len_toc); 
    		// Déterimine si on est dans une DIV ou non
    		$div = 0;
    		if (strpos($texte, '</div>', $pos) < strpos($texte,'<div', $pos)) {
    			$div = 1;
    			}
    		// Si on est dans un DIV, on déplace la position jusqu'à la fin de la DIV
    		if ($div) {
    			$pos = strpos($texte, '</div>', $pos);
    			$len_look = strlen('</div>');
    		} 
    		// Découpe le texte depuis la position trouvée
    		$old = substr($texte, $pos + $len_look);
    		// Insère les caractères de découpage à la position définie
    		$texte = substr_replace($texte, _decoupe_SEPARATEUR.$old, $pos + $len_look);
    		$offset = $offset + _decoupe_NB_CARACTERES;
    		} while ($offset <($len - (_decoupe_NB_CARACTERES) ));
    		// Nettoyage des caractères de découpe inséré à la suite
    		$texte = str_replace(_decoupe_SEPARATEUR._decoupe_SEPARATEUR, _decoupe_SEPARATEUR, $texte);
    	}
    	
    	// traitement des pages	
    	$pages = explode(_decoupe_SEPARATEUR, $texte);
    	$num_pages = count($pages);
    	if ($num_pages == 1) return $texte;
    	$artpage = max(intval($_GET['artpage']), 1);
    	$artpage = min($artpage, $num_pages);
    /*
    	// si numero illegal ou si var_recherche existe, alors renvoyer toutes les pages, separees par une ligne <hr/>.
    	// la surbrillance pourra alors fonctionner correctement.
    	if (strlen($_GET['var_recherche']) || $artpage < 1 || $artpage > $num_pages)
    		return join("<hr/>", $pages);
    */
    	$self = self();//$GLOBALS['REQUEST_URI'];
    
    	// images calculees par decoupe_installe()
    	$images = unserialize($GLOBALS['meta']['cs_decoupe']);
    
    	// images et liens pour la navigation sous forme : << < ... > >>
    	// precedent
    	$alt = _T('cout:page_precedente');
    	$alt = "title=\"$alt\" alt=\"$alt\"";
    	$precedent = '<a href="' . parametre_url($self,'artpage', $artpage - 1) . '">'; 
    	$precedent = $artpage == 1?$images['precedent_off']." $alt />"
    		:$precedent.$images['precedent']."$alt /></a>";
    	// suivant
    	$alt = _T('cout:page_suivante');
    	$alt = "title=\"$alt\" alt=\"$alt\"";
    	$suivant = '<a href="' . parametre_url($self,'artpage', $artpage + 1) . '">'; 
    	$suivant = ($artpage == $num_pages)?$images['suivant_off']." $alt />"
    		:$suivant.$images['suivant']."$alt /></a>";
    	// s'il existe plus de trois pages on calcule les liens << et >>
    	if ($num_pages>3) {
    		// debut
    		$alt = _T('cout:page_debut');
    		$alt = "title=\"$alt\" alt=\"$alt\"";
    		$debut = '<a href="' . parametre_url($self,'artpage', 0) . '">'; 
    		$debut = $artpage == 1?($temp=$images['precedent_off']." $alt />").$temp
    			:$debut.($temp=$images['precedent']." $alt />").$temp.'</a>';
    		// fin
    		$alt = _T('cout:page_fin');
    		$alt = "title=\"$alt\" alt=\"$alt\"";
    		$fin = '<a href="' . parametre_url($self,'artpage', $num_pages) . '">';
    		$fin = ($artpage == $num_pages)?($temp=$images['suivant_off']." $alt />").$temp
    			:$fin.($temp=$images['suivant']." $alt />").$temp.'</a>';
    	}
    	// liens des differentes pages sous forme : 1 2 3 4
    	$milieu = array();
    	for ($i = 1; $i <= $num_pages; $i++) {
    		if ($i == $artpage) {
    			$milieu[] = "<span style=\"color: lightgrey; font-weight: bold; text-decoration: underline;\">$i</span>";
    		} else {
    			// isoler la premiere ligne non vide de chaque page pour l'attribut title
    			$page = trim(safehtml(cs_imprimer($pages[$i-1])));
    			$title = preg_split("/[\r\n]+/", $page, 2);
    			$title = attribut_html(propre(couper($title[0], _decoupe_NB_CARACTERES)));//.' (...)';
    			$milieu[] = '<a href="' . parametre_url($self,'artpage', $i) . "\" title=\"$title\">$i</a>";
    		}
    	}
    	$milieu = join(' ', $milieu);
    
    	// s'il existe plus de trois pages on retourne la pagination << < 1 2 3 4 > >>
    	// sinon une forme simplifiee : < 1 2 3 >
    	$pagination = $num_pages>3?"$debut $precedent $milieu $suivant $fin":"$precedent $milieu $suivant";
    	$pagination1 = "<a name='decoupe_haut' id='decoupe_haut'></a><div class='pagination decoupe_haut'>$pagination</div>";
    	$pagination2 = "<a name='decoupe_bas' id='decoupe_bas'></a><div class='pagination decoupe_bas'>$pagination</div>";
    	$page = trim($pages[$artpage-1]);
    	if (isset($_GET['decoupe_recherche'])) {
    		include_spip('inc/surligne');
    		$page = surligner_mots($page, $_GET['decoupe_recherche']);
    	}
    	return $sommaire.$pagination1.$page.$pagination2;
    }
    
    // meme chose que la fonction precedente, mais pour les notes
    function decouper_en_pages_rempl_notes($texte) {
    	if (strpos($texte, _decoupe_SEPARATEUR)===false) return $texte;
    	// au cas ou on ne veuille pas de decoupe
    	if ($_GET['artpage']=='print') return decoupe_imprimer($texte);
    	
    	// traitement des pages
    	$pages = explode(_decoupe_SEPARATEUR, $texte);
    	$num_pages = count($pages);
    	if ($num_pages == 1) return $texte;
    	$artpage = max(intval($_GET['artpage']), 1);
    	$artpage = min($artpage, $num_pages);
    
    	return trim($pages[$artpage-1]);
    }
    
    // supprime les notes devenues orphelines
    function decoupe_affichage_final($texte){
    	if (strpos($texte, "spip_note")===false) return $texte;
    	global $ouvre_note;
    	tester_variable('ouvre_note', '[');
    	$ouvre_note = str_replace('[', '\[', $ouvre_note);
    	$appel = "<p[^>]*>$ouvre_note<a [^>]*name=\"nb([0-9]+)\" class=\"spip_note\" [^>]+>[^<]+</a>.*?</p>";
    	preg_match_all(",$appel,", $texte,$tableau);
    	for($i=0;$i<count($tableau[0]);$i++) {
    		if (!preg_match(",<a href=\"#nb{$tableau[1][$i]}\",",$texte)) 
    			$texte = str_replace($tableau[0][$i], '', $texte);
    	}
    	return $texte;
    }
    
    function cs_decoupe($texte){
    	//if (strpos($texte, _decoupe_SEPARATEUR)===false) return $texte;
    	if (strlen($texte) <= _decoupe_NB_CARACTERES) {
    	$texte = decoupe_supp_anc_car($texte);
    	return $texte;
    	}
    	// verification des metas qui stockent les liens d'image
    	if (!isset($GLOBALS['meta']['cs_decoupe']) || isset($GLOBALS['var_mode'])) {
    		include_spip('outils/decoupe');
    		decoupe_installe();
    	}
    	return cs_echappe_balises('html|code|cadre|frame|script|acronym|cite', 'decouper_en_pages_rempl', $texte);
    }
    
    // Compatibilite
    function decouper_en_pages($texte){
    	return cs_decoupe($texte);
    }
    
    // Suppression des anciens caractères de découpe "////"
    function decoupe_supp_anc_car($texte){
    	$anc_car = "////";
    	if (strpos($texte,$anc_car) !== false){
    	$texte = str_replace($anc_car, "", $texte);
    	}
    	return $texte;
    }

    et pour que le sommaire fonctionne, « sommaire_fonction.php »

    define('_sommaire_NB_TITRES_MINI', 2);
    define('_sommaire_SANS_FOND', '[!fond]');
    
    // TODO : ajouter un fichier css pour le sommaire
    
    // Filtre local utilise par le filtre 'cs_imprimer' afin d'eviter la decoupe
    // Exemple : lors d'une impression a l'aide du squelette imprimer.html,
    // remplacer la balise #TEXTE par [(#TEXTE*|propre|cs_imprimer)].
    function sommaire_imprimer($texte) {
    	return str_replace(array(_sommaire_SANS_FOND, _sommaire_SANS_SOMMAIRE), '', $texte);
    }
    
    // aide le Couteau Suisse a calculer la balise #INTRODUCTION
    $GLOBALS['cs_introduire'][] = 'sommaire_imprimer';
    
    // renvoie le sommaire d'une page d'article
    function sommaire_d_une_page(&$texte, &$nbh3, $page=0) {
    	static $index; if(!$index) $index=0;
    	define('_sommaire_NB_CARACTERES', 30);
    	// image de retour au sommaire
    	$titre = _T('cout:sommaire');
    	$img = 'spip_out.gif';
    	$path = dirname(find_in_path(($GLOBALS['spip_version']<1.92?"img_pack/":"images/").$img));
    	list(,,,$size) = @getimagesize("$path/$img");
    	$haut = "<img class=\"no_image_filtrer\" alt=\"$titre\" title=\"$titre\" src=\"".cs_htmlpath($path)."/$img\" $size/>";
    	$haut = "<a title=\"$titre\" href=\"".self()."#outil_sommaire\">$haut</a> ";
    	// traitement des titres <h3>
    	preg_match_all(',(<h3[^>]*>)(.*)</h3>,Umsi',$texte, $regs);
    	$nbh3 += count($regs[0]);
    	$pos = 0; $sommaire = '';
    	$p = $page?",&nbsp;p$page":'';
    	for($i=0;$i<count($regs[0]);$i++,$index++){
    		$ancre = "\n<a id=\"outil_sommaire_$index\" name=id=\"outil_sommaire_$index\"></a>";
    		if (($pos2 = strpos($texte, $regs[0][$i], $pos))!==false) {
    			$titre = preg_replace(',^<p[^>]*>(.*)</p>$,Umsi', '\\1', trim($regs[2][$i]));
    			$texte = substr($texte, 0, $pos2) . $ancre . $regs[1][$i] 
    				. $haut	. $titre 
    				. substr($texte, $pos2 + strlen($regs[1][$i]) + strlen($regs[2][$i]));
    			$pos = $pos2 + strlen($ancre) + strlen($regs[0][$i]);
    			$lien = couper($regs[2][$i], _sommaire_NB_CARACTERES);
    			$lien = preg_replace('/[!?,;.:]+$/', '', $lien); // eviter une ponctuation a la fin
    			$titre = attribut_html(propre(couper($regs[2][$i], 100)));
    			$sommaire .= "<li><a $st title=\"$titre\" href=\"".parametre_url(self(),'artpage', $page)."#outil_sommaire_$index\">$lien</a>$p</li>";
    		}
    	}
    	return $sommaire;
    }
    
    // fonction appellee sur les parties du textes non comprises entre les balises : html|code|cadre|frame|script|acronym|cite
    function sommaire_d_article_rempl($texte) {
    	// s'il n'y a pas de balise <h3> ou si le raccourcis _sommaire_SANS_SOMMAIRE est present dans le texte, alors on laisse tomber
    	if (strpos($texte, '<h3')===false || strpos($texte, _sommaire_SANS_SOMMAIRE)!==false) 
    		return sommaire_imprimer($texte);
    	$sommaire = ''; $i = 1; $nbh3 = 0;
    	$texte0 = $texte;
    	// couplage avec l'outil 'decoupe_article'
    	if(defined('_decoupe_SEPARATEUR')) {
    	// Découpage automatique si plus grand que _decoupe_NB_CARACTERES et qu'il n'y a pas de _decoupe_SEPARATEUR dans le texte.	
    	if ((strlen($texte) <= _decoupe_NB_CARACTERES) && (strpos($texte, _decoupe_SEPARATEUR)===false)){
    		return $texte; 
    	} elseif (strpos($texte, _decoupe_SEPARATEUR) !== false) {
    		$auto = false;	
    	} elseif (strpos($texte, _decoupe_SEPARATEUR) === false) {
    		$auto = true; 
    	}
    	// Insertion automatique du séparateur de page après la balise </p> la plus proche tous les _decoupe_NB_CARACTERES
    	if ($auto) {
    		$look = '</p>';
    		$len_look = strlen($look); 
    		// Offset de découpe
    		$offset = _decoupe_NB_CARACTERES ;
    		$len = strlen($texte);
    		$len_toc = strlen($sommaire);
    		$pos = 0;
    		
    		do  { 
    		// Trouve la position pour insérer les caractères de découpage:
    		// Trouve la fin de paragraphe la plus proche depuis l'offset (ajoute la longueur du sommaire si existant)
    		$pos = strpos($texte, $look, $offset + $len_toc); 
    		// Déterimine si on est dans une DIV ou non
    		$div = 0;
    		if (strpos($texte, '</div>', $pos) < strpos($texte,'<div', $pos)) {
    			$div = 1;
    			}
    		// Si on est dans un DIV, on déplace la position jusqu'à la fin de la DIV
    		if ($div) {
    			$pos = strpos($texte, '</div>', $pos);
    			$len_look = strlen('</div>');
    		} 
    		// Découpe le texte depuis la position trouvée
    		$old = substr($texte, $pos + $len_look);
    		// Insère les caractères de découpage à la position définie
    		$texte = substr_replace($texte, _decoupe_SEPARATEUR.$old, $pos + $len_look);
    		$offset = $offset + _decoupe_NB_CARACTERES;
    		} while ($offset <($len - (_decoupe_NB_CARACTERES) ));
    		// Nettoyage des caractères de découpe inséré à la suite
    		$texte = str_replace(_decoupe_SEPARATEUR._decoupe_SEPARATEUR, _decoupe_SEPARATEUR, $texte);
    	}// Insertion automatique du séparateur de page après la balise </p> la plus proche tous les _decoupe_NB_CARACTERES
    	if ($auto) {
    		$look = '</p>';
    		$len_look = strlen($look); 
    		// Offset de découpe
    		$offset = _decoupe_NB_CARACTERES ;
    		$len = strlen($texte);
    		$len_toc = strlen($sommaire);
    		$pos = 0;
    		
    		do  { 
    		// Trouve la position pour insérer les caractères de découpage:
    		// Trouve la fin de paragraphe la plus proche depuis l'offset (ajoute la longueur du sommaire si existant)
    		$pos = strpos($texte, $look, $offset + $len_toc); 
    		// Déterimine si on est dans une DIV ou non
    		$div = 0;
    		if (strpos($texte, '</div>', $pos) < strpos($texte,'<div', $pos)) {
    			$div = 1;
    			}
    		// Si on est dans un DIV, on déplace la position jusqu'à la fin de la DIV
    		if ($div) {
    			$pos = strpos($texte, '</div>', $pos);
    			$len_look = strlen('</div>');
    		} 
    		// Découpe le texte depuis la position trouvée
    		$old = substr($texte, $pos + $len_look);
    		// Insère les caractères de découpage à la position définie
    		$texte = substr_replace($texte, _decoupe_SEPARATEUR.$old, $pos + $len_look);
    		$offset = $offset + _decoupe_NB_CARACTERES;
    		} while ($offset <($len - (_decoupe_NB_CARACTERES) ));
    		// Nettoyage des caractères de découpe inséré à la suite
    		$texte = str_replace(_decoupe_SEPARATEUR._decoupe_SEPARATEUR, _decoupe_SEPARATEUR, $texte);
    	}
    	
    		$pages = explode(_decoupe_SEPARATEUR, $texte);
    		if (count($pages) == 1) $sommaire = sommaire_d_une_page($texte, $nbh3);
    		else {
    			foreach($pages as $p=>$page) { $sommaire .= sommaire_d_une_page($page, $nbh3, $i++); $pages[$p] = $page; }
    			$texte = join(_decoupe_SEPARATEUR, $pages);
    		}
    	} else $sommaire = sommaire_d_une_page($texte, $nbh3);
    	if(!strlen($sommaire) || $nbh3<_sommaire_NB_TITRES_MINI) return $texte0;
    
    	$img = find_in_path('img/sommaire/coin.gif');
    	$sansfond = !$img || strpos($texte, _sommaire_SANS_FOND)!==false;
    	if ($sansfond) {
    		$texte = str_replace(_sommaire_SANS_FOND, '', $texte);
    		$fond = 'background-color:white; border:thin solid gray;';
    	} else {
    		$img = cs_htmlpath($img);
    		$fond = "background:transparent url($img) no-repeat scroll left top; border-bottom:thin solid #999999; border-right:1px solid #999999;";
    	}
    
    
    $sommaire='<a name="outil_sommaire" id="outil_sommaire"></a><div id="outil_sommaire" class="cs_sommaire" style="'.$fond.'"><div style="margin:3pt;"><div style="
    border-bottom:1px dotted silver;
    line-height:1;
    position:inherit;
    font-weight:bold;'.($sansfond?'':'margin-left:15px;').'
    text-align:center;">'._T('cout:sommaire').'</div>
    <ul style="font-size:84%;
    list-style-image:none;
    list-style-position:outside;
    list-style-type:none;
    margin:0.3em 0.5em 0.1em 0.7em;
    padding:0pt;">'.$sommaire.'</ul></div></div>';
    
    	return _sommaire_REM.$sommaire._sommaire_REM.$texte;
    }
    
    function sommaire_d_article($texte){
    	if (strpos($texte, '<h3')===false) return $texte;
    	return cs_echappe_balises('html|code|cadre|frame|script|acronym|cite', 'sommaire_d_article_rempl', $texte);
    }

    Désolé pour le post un peu long :-))

    Vince

    Répondre à ce message

  • 2

    Bonjour,

    J’utilise ce plugin depuis peu et je le trouve vraiment tres bien.

    J’aimerai cependant savoir s’il est possible d’afficher une boucle particulière (comme les documents attachés) en derniere page et pas à chaque page.

    Merci beaucoup.

    • Cela devrait être possible, oui. Ecrire un filtre déjà permettrait de répondre à cette question.

    • Merci beaucoup

      Mais mes connaissances en programmation spip ne sont pas suffisantes pour ecrire un tel filtre ;)

    Répondre à ce message

  • ya un pb

    Bonjour,

    je découvre spip 1.9 et j’ai un petit souci avec le découpage des pages et l’impression.
    L’impression sur une seule page ne fonctionne pas. Plus précisement je ne comprend pas où il faut mettre « artpage=print » et le filtre « cs_imprimer » ne fonctionne pas non plus.

    JE suis novice...

    help

    Répondre à ce message

  • 5
    babbibel

    Salut,

    J’ai installé cette géniale fonction par l’intermédiaire du couteau suisse sur ce site en SPIP 1.9.2a, et ça fonctionne presque parfaitement si ce n’est que les flèches de navigation active et inactive sur la première et la dernière page sont inversées...

    Je ne sais pas si c’est clair donc voilà la page en question

    Il y a peut-être quelque chose que je n’ai pas compris... Merci d’avance

    • babbibel

      une coquille s’est glissée dans le lien de la page, voici l’adresse exacte :

      http://www.cridupeuple.com/+ Une-affaire-de-femmes+

      Attention à l’espace dans l’adresse.
      Sans cela, le « e » ce transforme en « c » quand je valide le message pour une raison inconnue...

    • Le plugin que tu utilises semble ancien. La version actuelle est 1.7.3.0... Est-ce qu’une simple mise à jour règle le problème ?

      D’autre part, il me semble que le squelette ne permet pas d’insérer de code entre les balises <head> et </head>. Il faut donc, soit activer l’outil ’#INSERT_HEAD’ du plugin, soit ajouter cette balise à la main dans les headers du squelette...

    • babbibel

      Le squelette possède déjà la balise #INSERT_HEAD.

      Ensuite, j’utilise le plugin du « couteau suisse », je ne sais pas de quelle version il s’agit. Je ne sais pas comment mettre à jour le plugin découpage d’article dans le couteau suisse.... Il faudrait peut-être que je l’installe indépendamment du couteau suisse pour bénéficier de la version la plus récente....

      Merci Patrice

    • Attention, c’est bien le couteau suisse tout entier qu’il faut mettre à jour. L’outil « découpage » ne peut pas être dissocié... Il s’agit d’une lame du couteau, et non d’un plugin à part entière.

      La version du couteau suisse est indiquée dans la page des plugins (en cliquant dessus)

    • babbibel

      Feectivement après mise-à-jour, tout est rentré dans l’ordre... Merci

    Répondre à ce message

  • 5
    Christophe

    Juste une petite remarque pour ce plugin très pratique mais qui le serait encore plus avec une petite ancre au niveau des < 1 2 3 > …

    Qu’en pensez vous ?

    • Voila qui est fait, mais pour quel usage précis ?

    • Ch.Guigueno

      Déjà fait ? Ha… cool... Mais comment on met à jour le couteau suisse ?

      Merci en tout cas.

      pour l’usage : hé bien, cela permet par exemple de placer ce découpage que pour la partie #TEXTE de l’article. On garde ainsi Titre, chapô et PS sur toutes les pages. Ce que j’ai fait sur SeaSailsurf.com dès que j’ai trouvé ton découpage.

      En plus, pour ceux que cela intéresse, cela permet de faire une gallerie (diaporama) très simple…

      du coup, l’internaute qui glisse de page en page à partir des liens 1, 2, 3... garde le contenu modifié toujours à la hauteur des yeux (avec l’ancre).

       ;-)

    • Ch.Guigueno

      Hhum j’ai trouvé les modifs en haut à droite... Merci encore.

    • Je suis allé visiter ton site, effectivement le découpage est très efficace. Mais les images ont une méchante bordure qu’il faut absolument supprimer... Je me demande si je ne vais pas mettre cette protection par défaut directement dans le plugin...

      l’internaute qui glisse de page en page à partir des liens 1, 2, 3... garde le contenu modifié toujours à la hauteur des yeux (avec l’ancre).

      Quelle est l’utilisation ou la commande exacte que tu utilises avec ces ancres ? Tu as vu leur nom ? elles s’appellent ’decoupe_haut’ et ’decoupe_bas’.

    • Je me demande s’il ne serait pas intéressant pour toi d’utiliser la syntaxe [(#TEXTE|cs_imprimer)] dans imprimer.html, histoire d’imprimer l’article complet...

      Pour voir le résultat et une fois le plugin mis à jour essaie aussi : http://seasailsurf.com/seasailsurf/...

    Répondre à ce message

  • 1
    Maquisard

    Premièrement merci pour le plugin !

    Je l’utilise dans un cadre un peu particulier. Je me suis fabriqué un « modèle INCLURE » que j’ajoute dans le corp de certains articles :

     <modele|inclure|monfond=monSquelette>

    Ca me permet d’insérer un squelette directement dans l’article.

    J’ai donc insérer dans le code de monSquelette le ouput ++++

    Maintenant je voudrais positionner les éléments de navigation. Et je ne réussis pas à le faire pour celui insérer automatiquement en haut de page.

    Est-ce possible de positionner les éléments de navigation ou plus simplement de désactiver les éléments du haut de page ? Un paramètre dans config_outils.php ?

    Merci pour l’aide !

    • Depuis la version 1.7.2.14 du plugin, les paginations sont dans un bloc <div class='pagination decoupe_haut'> et <div class='pagination decoupe_bas'>.

      ’pagination’ est une classe de SPIP et le plugin introduit :
      div.decoupe_haut, div.decoupe_bas {display:block; text-align:center; }

      Dans ton squelette, il suffirait d’ajouter certaines propriétés css à ’decoupe_haut’ ou ’decoupe_bas’ pour arriver à ce que tu veux, non ?

    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