We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 17611
    • 3 Posts
    Salut,
    J’ai besoin de mettre un lien sur une page pour récupérer dynamiquement le contenu de ce même article dans un autre modèle (pour une impression papier). J’ai réussi à récupérer l’id comme ça :
    http://mon_site/index.php?id=[*id*]
    ... mais le top ce serait dans la foulée d’imposer le template :
    http://mon_site/index.php?id=[*id*]&template=13
    ... qui bien sûr ne marche pas, d’où mon post. undecided
    A supposer que c’est possible, quelqu’un à une idée ? Merci d’avance.
      • 23050
      • 1,842 Posts
      Bonjour,

      Pourquoi ne pas utiliser une feuille de style destinée à l’impression pour mettre en forme ta page ? En utilisant media="print"

      Néanmoins, si tu souhaites faire comme tu l’as imaginé, et comme on ne peut pas assigner 2 templates à un même document, essaie d’utiliser Ditto en appelant StartID=[*id*] et en définissant le chunk destiné à l’impression wink
        • 17611
        • 3 Posts
        Merci pour ta réponse rapide Perrine, mais ça ne correspond à ce que je recherche.
        Pourquoi ne pas utiliser une feuille de style destinée à l’impression pour mettre en forme ta page ? En utilisant media="print"
        Je voudrais que la page prête à l’impression soit visible à l’écran, épurée des menus, logos et autres fioritures.
        essaie d’utiliser Ditto en appelant StartID=[*id*] et en définissant le chunk destiné à l’impression
        J’ai essayé mais le contenu du document même remanié par le chunk ... sera quand même intégré au template de base ...

        Depuis, j’ai trouvé Template Switcher Plugin dans le forum : http://modxcms.com/forums/index.php/topic,1079.0.html Comme son nom l’indique, il permet de changer à la volée de Template mais ... je n’arrive pas à le faire tourner pfff
        Pas doué ! A l’aide :’(
          • 16732
          • 592 Posts
          Voila rapidement comment faire :

          1) Crée un nouveau snippet nommé : InsertContent
          Avec le code suivant :
          $table_content = $modx->getFullTableName('site_content');
          $sql_content = "SELECT content FROM $table_content WHERE id='".$_GET['id_page']."'";
          $result_content = $modx->db->query($sql_content);
          $enr=mysql_fetch_array($result_content);
          return $enr['content'];
          


          2) Crée un template nommé : Print
          Avec entre autre le code suivant :
          [!InsertContent!]
          


          3) Crée un document nommé "page d’impression" vide et associes lui le template Print. cette page ne doit pas être publiée.

          4) Crée un lien "Imprimer" comme ceci :
          <a href="index.php?q=id_de_ton_doc_Page-print&id_page=[*id*]">Imprimer</a>
          


          wink
            • 16732
            • 592 Posts
            Voici une version plus évoluée qui permet d’afficher un certain nombre de champs du document grâce à un chunk:

            <?php
             /*
             *  Name: InsertContent
             *  Version: 0.2
             *  Author: Laurentc 
             *
             * Exemple of use :
             * [!InsertContent? &tpl=`Template_PRINT` !]
             *
             * Parameters :
             * &tpl : chunck with page placeholders 
             *   exemple : 
             *   [+pagetitle+]
             *   <br>
             *   [+content+]
             *   <br>
             *   [+longtitle+]
             *   <br>
             *   [+description+]
              
             */
            
            
            if ($tpl) $tpl = ($chunk = $modx->getChunk($tpl)) ? $chunk:"Chunk '$tpl' introuvable.";
            
            return doPage($tpl);
            
            
            function doPage($tpl) {
                global $modx;
                $champs = array('id','pagetitle','longtitle','description','alias','menutitle','introtext','content');
                $table_content = $modx->getFullTableName('site_content');
                $sql_content = "SELECT id,pagetitle,longtitle,description,alias,menutitle,introtext,content FROM $table_content WHERE id='".$_GET['id_page']."'";
                $result_content = $modx->db->query($sql_content);
                $enr=mysql_fetch_array($result_content);
            
                foreach($champs as $nomChamp) {
                    $tpl = str_replace("[+$nomChamp+]", $enr[$nomChamp], $tpl);
                }
                return $tpl;
            
            }
            ?>
            
              • 17611
              • 3 Posts
              Alors, là, Respect, laurentc !

              Je pensais vraiment pas une réponse aussi pro (un snippet qui attaque la base, un template qui l’utilise et un chunk pour la mise en page) et rapide.

              Ca tourne nickel. Merci pour ton aide laugh
                • 20488
                • 353 Posts
                Bonjour,

                Je voudrais que la page prête à l’impression soit visible à l’écran, épurée des menus, logos et autres fioritures.

                Je rejoins l’avis de Perrine, il est tout à fait possible de gérer ceci via la feuile de style CSS. Voici un exemple basique de feuille CSS :

                PAGE HTML

                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml">
                <head>
                	<title>TItre de la page.</title>
                	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                     	<link rel="stylesheet" href="style.css" type="text/css"/>
                
                </head>
                
                
                <div id="LOGO">
                <h1>MON LOGO</h1>
                </div>
                
                <div id="CONTENU">
                <p>Ceci est mon contenu, il apparait à l'impression, contrairement au LOGO qui n'apparait pas. Le texte du contenu est vert lorsqu'on imprime, mais rouge à l'écran</p>
                </div>
                
                </body>
                     


                Feuille de style
                /********** FEUILLE DE STYLE NORMALE ****/
                
                #CONTENU p{color:red;}
                
                
                /******* MEDIA PRINT ***************/
                @media print { 
                #LOGO {
                display : none; 
                visibility : hidden; 
                } 
                #CONTENU p{
                color:green;
                } 
                
                }

                  • 16732
                  • 592 Posts
                  @luckrn : pas de quoi, la prochaine fois je fais payer wink

                  @Olivier : Oui tu as sûrement raison car ça à l’air assez simple à mettre en place... ma logique reste encore trop "dev" undecided... pourtant je suis assez flémard grin
                    • 20488
                    • 353 Posts
                    Alors je te conseille de passer par CSS. Vraiment plus simple une fois la logique intégrée. Surtout si tu connais les CSS !;)
                      • 16732
                      • 592 Posts
                      Intégrer la logique CSS... c’est sur ma liste ... mais bon, c’est moins marrant que de faire des snippets et des modules laugh