We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 15001
    • 697 Posts
    Salut helio le superrapide! grin

    Merci. Ben non, chez moi ceci joue lorsque j’y place dans une TV : @FILE 9.html
    mais pas ceci @FILE:9.html
    qui donne : Could not retrieve document ’:9.html’.

    Comme je l’explique ici
    http://modxcms.com/forums/index.php?action=post;topic=31819.15;num_replies=29
    j’obtiens le même type d’erreur dès que je compose dynamiquement le nom du document externe sur la base de son id. Vraiment mystérieux...
      • 11975
      • 2,542 Posts
      Normal

      si tu places ton @FILE dans une tv, tu fais appel aux @BINDINGS (@FILE, @SELECT, ...) de MODx.
      Dans ce cas mon plugin n’a aucun effet.

      :-)
        Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
        • 15001
        • 697 Posts
        @helio: Merci. Ta réponse me fais réaliser que je n’y ai encore rien compris aux bindings.
        J’étais sur que @FILE, @SELECT etc. étaient systématiquement des bindings particulières et que @BINDING était un terme générique pour désigner celà.
        Apparement, je me suis fourvoyé et du coup, je n’y comprend plus grand chose...

        Quand j’aurais compris, je parviendrai peut-être à importer mon document comme ton plugin le permet pour les templates. Pour l’instant, j’ai cela qui s’affiche : "@FILE:assets/templates/18.html" lorsque j’essaie d’appeler une page depuis le code source du document.

        Pour ce qui est des templates externes, j’ai réussi à faire marcher ton plugin. Vraiment génial, bravo !
          • 11975
          • 2,542 Posts
          J’étais sur que @FILE, @SELECT etc. étaient systématiquement des bindings particulières et que @BINDING était un terme générique pour désigner celà.

          C’est bien ça grin
          les @BINDINGS permettent d’étendre en quelque sorte les fonctionnalités des tvs.
          Comme par exemple effectuer une requête avec @SELECT, éxécuter un code avec @EVAL, etc ...

          :-)
            Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
            • 15001
            • 697 Posts
            si tu places ton @FILE dans une tv, tu fais appel aux @BINDINGS (@FILE, @SELECT, ...) de MODx.
            Dans ce cas mon plugin n’a aucun effet.
            C’est bien ça
            les @BINDINGS permettent d’étendre en quelque sorte les fonctionnalités des tvs.
            Comme par exemple effectuer une requête avec @SELECT, éxécuter un code avec @EVAL, etc ...
            Ah, je crois comprendre: Ton plugin émule en quelque sorte une binding de type @FILE qui fonctionne à partir de la zone du code source pour lier un modèle. Il fait en quelque sorte que la zone du code source fonctionne comme un peu comme une TV standard et reconnaît le binding @FILE. C’est bien ça ?

              • 11975
              • 2,542 Posts
              C’est le @xxxx qui créé la confusion.
              J’aurai pu utiliser n’importe quelle autre chaine @TPL par exemple.
              Le @FILE de mon plugin et celui utilisé dans une TV n’ont rien à voir en terme de code.

              :-)
                Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
                • 15001
                • 697 Posts

                Pour charger des documents stockés dans des fichiers externes; il semble qu’il faille exploiter l’événement OnWebPagePrerenderer.
                La dernière version en développement du plugin pour charger des documents
                depuis des fichiers est ici :

                http://modxcms.com/forums/index.php/topic,32537.0.html
                J’en suis au stade où il faut remplacer le contenu du document, mais seulement au niveau du frontend et je suis un peu perdu quant aux fonctions de l’API à utiliser pour ce problème. Aide bienvenue.


                L’idée est de reprendre le plugin posté par heliotrope permettant déjà d’importer un template depuis un fichier et de le modifier pour qu’on puisse aussi charger des documents stockés sous la forme de fichiers.

                Quelques autres fonctionnalités sont prévues comme deviner le nom du fichier à charger.

                Ainsi, en écrivant juste @TPL dans le code source d’un modèle, le fichier assets/templates/#.tpl serait chargé,
                # étant l’id du modèle.

                De même, en écrivant juste @DOC dans le contenu d’un document, le fichier assets/site/#.doc serait chargé, # étant l’id du document.

                Voilà, j’espère qu’il y a une chance que ça joue.
                Une partie du code est tirée de ce message, qui fonctionnait dans le cadre d’une utilisation en snippet :
                http://modxcms.com/forums/index.php/topic,32507.msg197851.html#msg197851

                Le code bogué pour le plugin LoadFromFile :
                $e = & $modx->Event;
                
                switch($e->name){
                
                	case 'OnLoadWebDocument':
                	$content = $modx->documentContent;
                	return $content;
                	$firstChars = substr($content,0,4);
                	
                	switch ($firstChars) {
                		
                		case '@TPL':
                			$file = substr($content,4);
                			$path = $modx->config['base_path'] ."assets/templates/";
                			if ($file) {
                				$file = $path.trim($file); 
                    		} else {
                	    		$tpl_id=$modx->documentIdentifier;
                	    		$file = $path.$tpl_id.'.tpl';
                    		}	
                			if(is_file($file)){
                				// return file_get_contents($file);
                				
                		//Start the buffer
                			ob_start();
                			include $file;
                			//get contents from the buffer
                			$ob_contents = ob_get_contents();
                			//and kill/delete the buffer
                			ob_end_clean();
                			//return it to MODx
                			$modx->documentContent = $ob_contents;
                				
                				
                			}else{
                				$modx->documentContent = "Erreur lors du chargement du template => ".$file;
                			}
                			break;	
                		
                		case '@DOC':
                			$file = substr($content,4);
                			$path = $modx->config['base_path'] ."assets/site/";
                			if ($file) {
                				$file = $path.trim($file); 
                    		} else {
                	    		$doc_id=$modx->documentIdentifier;
                	    		$file = $path.$doc_id.'.html';
                    		}
                			if(is_file($file)){
                				return file_get_contents($file);
                			}else{
                				$modx->documentContent = "Erreur lors du chargement du document => ".$file;
                			}
                			break;	
                	}
                }
                


                Et le mode d’emploi prévu :
                /* ### LoadFromFile ###

                Plugin pour charger un template ou un document stocké dans un fichier externe.

                Installation
                ------------
                Associer au plugin l’événement OnLoadWebDocument.

                Utilisation
                ------------

                Pour les modèles
                ----------------
                Pour charger un modèle stocké dans un fichier externe,
                on écrit @TPL chemin_vers_template/nom_template.tpl
                dans le champ code source du modèle.
                Le chemin à spécifier est relatif à assets/templates/.
                L’extension du fichier (ici tpl) est libre.

                On peut également écrire @TPL sans rien à la suite.
                En pareil cas, le plugin utilisera le fichier portant
                comme nom l’id du template, suivi de l’extension ".tpl"
                situé dans assets/templates/.

                Pour les documents
                ------------------
                Pour charger un document stocké dans un fichier externe,
                on écrit @DOC chemin_vers_document/nom_document.html
                dans le champ contenu du document.
                Le chemin à spécifier est relatif à assets/site/.
                L’extension du fichier (ici html) est libre.

                On peut également écrire @DOC sans rien à la suite.
                En pareil cas, le plugin utilisera le fichier portant
                comme nom l’id du document, suivi de l’extension ".html"
                situé dans assets/site/.

                */

                Désolé pour la longueur du message.

                Voilà, j’espère que c’est faisable...

                  • 10957
                  • 32 Posts
                  Bonjour,

                  j’utilise le très utile snippet getFileTemplate d’heliotrope (que j’ai renommé Include)

                  dans mon modèle de page je fais l’appel suivant :
                  [[Include? &file=`chunk/project-nav.html`]]

                  et dans project-nav.html:
                  [[Wayfinder? &startId=`[[UltimateParent]]`]]

                  qui ne fonctionne pas alors que :
                  [[Wayfinder? &startId=`6`]]

                  fonctionne parfaitement et que
                  [[UltimateParent]]

                  affiche bien 6.

                  Avez-vous une idée d’où peut provenir le problème ? (utilisation d’un snippet en paramètre d’un autre snippet impossible ?)
                    • 11975
                    • 2,542 Posts
                    Salut,

                    c’est une limitation du parser actuel.

                    Pour utiliser le résultat d’un snippet comme parametre d’un autre, tu dois appeler
                    [!uncached? &param=`[[cached]]`!]

                    ce qui donne

                    [!Wayfinder? &startId=`[[UltimateParent]]`!]

                    :-)
                      Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
                      • 10957
                      • 32 Posts
                      Merci Heliotrope,
                      le probleme c’est que si j’appelle WayFinder de cette façon : [!Wayfinder? &startId=`[[UltimateParent]]`!] alors c’est l’appel WayFinder qui n’est pas pris en compte. En effet, pour une raison que je ne saisis pas, les appels de snippet effectués dans un fichier inclu par le snippet getFileTemplate ne fonctionnent que s’ils sont "mis en cache".
                      C’est ce qu’évoque également Jul dans le début de sa réponse (http://modxcms.com/forums/index.php/topic,31819.msg197280.html#msg197280) sur ce sujet.

                      N’y a-t-il donc pas de solution pour utiliser le résultat d’un snippet comme parametre d’un autre dans un fichier inclus via getFileTemplate ?