Comment avoir une version imprimable d’un article ?

Faire un lien via un squelette d’impression : Méthodes traditionnelles pour SPIP 1.8 et SPIP 1.9, ou par plugin.

Avertissement

La façon normale et « standard » de procéder pour gérer l’impression est de fournir au navigateur (comme le fait la dist/) une feuille de style alternative destinée à l’impression.

<link rel="stylesheet" type="text/css" media="print" href="print.css" />

Pour plus de détail, nous vous renvoyons sur l’excellent article d’Openweb

Cette « petite contribution » ne s’adressera donc à vous que dans la mesure où vous voulez un squelette spécifique d’impression, que vous pourrez personnaliser à souhaît.

Jusqu’aux versions de SPIP 1.8

1/ Faire un squelette d’impression

2/ Faire un lien dans le squelette article, avec du texte ou une petite image d’imprimante, vers l’article en mode impression.

article_print.php3?id_article=[(#ID_ARTICLE)]

<a href="imprimer.php3?id_article=#ID_ARTICLE"
 title="afficher une version imprimable de cet article">
Imprimer l'article
</a>

À partir de SPIP 1.9

Il n’ y a plus de fichier d’appel en .php3.

1/ Mettre le squelette imprimer.html dans le répertoire squelettes à la racine de spip ou dans dist à défaut.

2/ Dans le squelette article.html

Je me suis posée la question de savoir comment insérer ce lien en spip 1.9.

J’avais d’abord trouvé cette solution un peu naïve avec la balise #URL_SITE :

<a href="#URL_SITEspip.php?page=imprimer&id_article=#ID_ARTICLE" onclick="window.open(this.href,'_blank');return false;">
Imprimer
</a>

3/ Cela a pour effet d’ouvrir la page dans un target _blank [1].

Pour être accessible, penser à mettre un « title » dans le lien.
On peut également insérer une image d’impression. Pour valider la page en xhtml strict, qui ne validerait pas avec un target blank [2] classique, on se sert de cette astuce dans le lien.

http://www.webmaster-hub.com/lofive...

<a href='#'onclick="window.open
(this.href,'_blank');return false;">

Sauf que, petit hic encore, le &id ne valide pas en xhtml

-  L’astuce donnée par James, consiste à remplacer par &amp ;

<div>
<a href="#URL_SITEspip.php?page=imprimer&id_article=#ID_ARTICLE" title="afficher une version imprimable de cet article" onclick="window.open(this.href,'_blank');return false;">
<img src='squelettes/impresora.gif' alt="impression" title="impression" />
</a>
Imprimer cet article
</div>

En fait, tout cela n’est pas très SPIP !

Il y a une balise beaucoup plus appropriée et une syntaxe beaucoup plus « spip » pour faire cela. Merci, encore une fois à James, de me l’avoir indiquée.

-  Utiliser : #URL_PAGE
Cf ce que dit la doc à propos de cette balisehttp://www.spip.net/
fr_article190...

#URL_PAGE (...) retourne une url de type « page » (...), vers la page passée en paramètre et qui pourra être utiliser dans un lien. Par exemple, pour accéder à la page générée par le squelette toto.html, située dans votre dossier-squelette, #URL_PAGEtoto généra automatiquement l’url spip.php ?page=toto. Un second paramètre est autorisé pour ajouter des paramètres à l’url. Exemple

#URL_PAGE {toto,id_article=#ID_ARTICLE}

génèrera l’url spip.php ?page=toto&id_article=XXX.

#URL_PAGE{imprimer}|parametre_url{id_article} 

-  La syntaxe peut même se racourcir à :

#URL_PAGE{imprimer,id_article=#ID_ARTICLE}

Nous devons donc mettre le lien suivant dans notre squelette article.html. Une syntaxe courte, belle, et qui en plus valide !

<div>
<a href="#URL_PAGE{imprimer,id_article=#ID_ARTICLE}" title="afficher une version imprimable de cet article" onclick="window.open(this.href,'_blank');return false;">
<img src='squelettes/impresora.gif' alt="impression" title="impression" />
</a>
Imprimer cet article
</div>

Cette solution en 1.9 reste pour tout ceux qui voudraient concevoir leur propre squelette d’impression, ou qui ne voudraient pas utiliser du javascript.

La solution plugin avec « Imprimir_documento »  [3]

Mise à jour SPIP-Contrib (juin 2007)
ce plugin est désormais documenté, pour la version française, dans cette rubrique

Il y a désormais un plugin imprimir_documento fait par JoseLuis, et disponible sur la zone.

Il y a aussi une contribution en espagnol faîte par l’auteur lui-même du plugin.

Je ne parle pas du tout l’espagnol pour traduire l’article de Joseluis, mais rapidement, quelques mots concernant ce plugin :

1/ Comme pour tous les plugins, récupérez le dernier zip à jour de cette contrib sur http://zone.spip.org/files/spip-zone/, décompactez le et placez le dossier « imprimir_documento_1_9 » obtenu dans votre répertoire /plugins (à créer à la racine de votre spip s’il n’existe pas encore), puis allez sur l’interface de gestion des plugins (menu Configuration > Gestion des plugins), cochez le plugin « imprimir_documento_1_9 » puis validez.

2/ Ensuite, dans votre squelette d’article ou de brève, insérer à l’endroit souhaité la balise #IMPRIMIR_DOCUMENTO** avec les deux astérix.

Ce petit plugin est basé sur un jeu de deux squelettes que vous pouvez très bien personnaliser si vous le souhaîtez, un de brève et un d’article :

-  imprimir_articulo.html
-  imprimir_breve.html

Et un petit script javascript qui lance une popup bien sympatique, contenu dans un script php :

-  baliza_imprimir_documento.php

3/ Il est possible de personnaliser le plugin :

-  Vous pouvez changer l’icone d’impression en renommant votre propre icone « impresora.gif » dans le répertoire plugin.

-  La typographie du style appliqué entre la balise #IMPRIMIR_DOCUMENTO** peut être changée à l’aide d’une balise span style dans le squelette, ou dans une feuille de style que ous créez :

<span style= "font-size: 65%;" >… </span>

-  Toutes les autres modifications se font dans baliza_imprimir_documento.php.

Ce qu’il reste à faire encore sur ce petit plugin

-  L’internationaliser en remplacant l’espagnol d’orgine des deux squelettes par des fichiers de langues et des chaînes de langues, ainsi que les quelques mots du fichier php.
-  Rendre le javascript d’appel de la popup compliant et valide.
-  et dans baliza_imprimir_documento.php, ligne 28, rajouter un attribut alt et title dans la balise img pour que ca valide xhtml.

<img src=\"$logo\" title=\"Impression\" alt=\"Impression\" />

En pièce jointe, le squelette de Joseluis, donné ici uniquement à titre d’exemple, pour appliquer la méthode d’impression en target _blank sans plugin, et sans javascript, ie dans une nouvelle fenêtre et une petite image d’impression fournie par le plugin. Mais naturellement, vous pouvez concevoir votre propre squelette d’impression.

Conclusion

Cette modeste contribution ne prétend en rien être novatrice, juste peut-être utile à certains. Cette question d’impression revient en effet souvent sur les listes et sur les forums.

Pour élargir un peu, dans le genre d’outil pratique pour le squelette article, signalons :
-  le plugin de Fil « Recommander » par mail. [4]
-  le plugin de Cédric « Article_pdf_1_9 », qui génère un .pdf de vos articles. [5]

À vos imprimantes !

Notes

[1Nous sommes d’habitude plutôt favorable à l’idée de laisser le choix au visiteur d’ouvrir un lien dans une nouvelle page ou un nouvelle onglet, plutôt que de le lui imposer de fait. Néanmoins, cela semble se justifier lorsqu’il s’agit d’ouvrir un squelette spécifique d’impression avec une mise en page particulière et épurée

[3Imprimir artículo o breve con SPIP 1.8 ó 1.9

D’ailleurs l’auteur propose une option de popup javascript pour la 1.8 et la 1.9, indépendemment du plugin. Vous pouvez donc avoir le choix de la popup javascript ou de la méthode target _blank décrite plus haut. Il semblerait toutefois que le script javascript ne valide pas la page en xhtml.

[4http://zone.spip.org/files/spip-zone/ en jquery, disponible sur la zone.

Discussion

7 discussions

  • une vraie usine à gaz !

    Répondre à ce message

  • 3

    Bonjour à toutes et à tous,

    Tout d’abord, merci pour cette contrib, qui m’a éclairé sur pas mal de choses, mais un point qui m’est essentiel au vue de la structure de notre site, ce sont les impressions des rubriques. Il s’avère que nous avons pas mal de contenu dans des rubriques, et l’impression reste délicate.
    Alors étant donné que nous n’utilisons pas les brèves, j’ai voulu modifier le plugin espagnol « imprimir_documento » et en remplacer l’appel de la page des brèves par une copie modifiée pour les rubriques. J’ai donc fait ce petit changement lors du test sur $_id_article :

    $_id_article = champ_sql(’id_article’, $p) ;

    $arg = « ’page=imprimir_articulo&id_article=’. ».$_id_article ;

    $url = generer_url_public(’’,$arg) ;

    // la modif ici :

    if (!$_id_article)

    $_id_rubrique = champ_sql(’id_rubrique’, $p) ;

    $arg = « ’page=imprimer_rubrique&id_rubrique=’. ».$_id_rubrique ;

    $url = generer_url_public(’’,$arg) ;

    $p->code =« preparar_enlace_imprimir($arg) » ;

    J’ai bien entendu créer un nouveau masque « imprimer_rubrique.html » que j’ai mis au bon endroit, seulement je ne comprends pas le script ne monte pas la bonne page, il m’envoi la page articulo, alors que le tag est placé dans mon rubrique.html, et que je teste la validité de la balise article.
    On dirait que l’identifiant de l’article est trouvé même si une rubrique est chagée ...
    Quelqu’un aurait il une soluce ?

    Merci beaucoup, car je ne dois pas être le seul dans ce cas.
    Ah oui pour les versions : spip 1.9.1 + pllugin installé

    • Bon alors voilà, je vais me répondre en fait :

      la solution que j’ai trouvé est la suivante :

      if ($_GET[’article’])

      $_id_article = champ_sql(’id_article’, $p) ;

      $arg = « ’page=imprimir_articulo&id_article=’. ».$_id_article ;

      $url = generer_url_public(’’,$arg) ;

      else

      $_id_rubrique = champ_sql(’id_rubrique’, $p) ;

      $arg = « ’page=imprimer_rubrique&id_rubrique=’. ».$_id_rubrique ;

      $url = generer_url_public(’’,$arg) ;

      $p->code =« preparar_enlace_imprimir($arg) » ;

      $p->statut = ’html’ ;

      return $p ;

      Ce n’est peut être pas ce qu’il y a de mieux, mais en tous cas ça fonctionne !

      A savoir que nous n’utilisons pas les breves, donc attention à ceux qui voudraient se servir ce ça pour ajouter comme nous des choses à imprimer dans un squelette spécifique.

    • Merci pour avoir posté ton code qui fonctionne en détournant les brèves. Je pense qu’on pourrait contacter Jose Luis, l’auteur du plugin, pour lui demander dans quelle mesure il serait possbile de l’étendre aussi sur les rubrique. Pour ma part, je n’ai pas de compétence en développement.

    • Salut a tous,
      j ´ai moi aussi ce probleme pour imprimer rubriques ou articles à volonté. Mais ce code ne fonctionne pas, les breves activées ou non c´est le même résultat... il se prend pas en compte les valuers lorsque nous sommes dans un article et imprime les rubriques...

      Y a t- il du mouvement ou ce plug est il abandonné ?

      Salutations
      Rano

    Répondre à ce message

  • n’est-ce pas à la feuille de style de dire comment imprimer le document HTML ? Ainsi dès qu’on lance l’impression la mise en forme peut être complétement modifiée.
    -  Je me trompe ou quoi ?

    Répondre à ce message

  • 1

    Bonjour,

    je souhaite réaliser un squelette dans lequel on trouverai le même article plusieurs fois (10 fois le même sur 2 colonnes) pour imprimer en ligne des flyers par exemple.

    Je comprend les balises de base style #TEXTE mais là, je ne vois pas bien où placer la balise #IMPRIMIR_DOCUMENTO**.(que signifient les 2 astérisques ?)

    Il me semblait qu’en la mettant au début de la < div > à imprimer ça irait, mais non ! j’ai du oublier quelque chose quelque part !

    Pourtant le plugin est bien activé, j’ai crée un squelette article=34.html spécialement pour ça que j’ai placé dans le dossier plugins/squelette_egt/

    Si quelqu’un(e) a une idée...merci

    • cooljapan

      Bonjour,

      J’ai le même problème.
      Quelqu’un peut-il nous éclairer ?

    Répondre à ce message

  • génial le plugin Imprimir_documento
    merci !

    Répondre à ce message

  • Onyrodine

    Bonjour,

    J’ai utilsé la version « À partir de SPIP 1.9 » (celle avec la balise #URL_page). Le bouton d’impression s’affiche dans mes articles mais lorsque je clique dessus j’obtiens une erreur 404. Vu la simplicité du code, je ne vois pas ou j’ai pu me tromper. QQ aurait-il une idée ? Y a t’il un autre fichier à modifier que mon squelette article ?

    Merci

    Répondre à ce message

  • je voulais savoir si il etait possible d’enlever « version imprimable » ?? si oui comment ??

    merci

    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