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...