OK je vois. Donc si j'ai bien compris, il faut dans la fonction estValide vérifier à chaque fois que le dom respecte mon dtd original. En gros, je fais une vérification du dom à chaque fois que je récupère une valeur.
Avec la meme fonction validate que j'utilise au début ?
Autre question :
- les constantes, il faut les mettres directement dans le fichier comme j'ai fais ou les mettre dans un autre fichier ?
En tout cas, voici mon avancement, sans y avoir inclu la fonction estValide :
// Les constantes qui serviront dans cette classe dernierArticle
///////////////////////////////////////////////////////////////////////////////////////////////////
define('DOM_DECODE',true); // true = active le décodage utf8 (ne pas modifier) //
//
// Le nom des éléments du fichier XML concerné //
define('ELEMENT_TITRE', 'titre'); // nom de l'élément xml correspondant au titre de l'article //
define('ELEMENT_RUBRIQUE', 'rubrique'); // " " " la rubrique de l'article //
define('ELEMENT_DATE', 'date'); // " " " la date de l'article //
define('ELEMENT_PHOTO', 'photo'); // " " " la photo de l'article //
define('ELEMENT_LEGENDE', 'legende'); // " " " la légende de la photo //
define('ELEMENT_CITATION', 'citation'); // " " " la citation dans l'article //
define('ELEMENT_DEBUT','debut'); // " " " le début de l'article //
define('ELEMENT_LIEN', 'lien'); // " " " le lien vers l'article //
define('ELEMENT_TXTLIEN', 'txtlien'); // " " " le texte affichant le lien //
// Valeurs à donner aux variables membres en cas d'erreur //
define('ERROR_TITRE', 'Des perturbations techniques sur Tumbling France');
define('ERROR_RUBRIQUE', 'Problème technique');
define('ERROR_PHOTO', '../images/news/pb-xml.jpg');
define('ERROR_LEGENDE', 'Problème en cours de résolution');
define('ERROR_CITATION', NULL);
define('ERROR_DEBUT', "Nous rencontrons actuellement un problème technique quant à l'affichage de cet article puisqu'il nous est impossible d'en extraire les données. En effet, un de nos fichiers sources est corrompu et nous travaillons pour régler cet incident dans les plus brefs délais. Vous pouvez néanmoins continuer à surfer normalement sur l'ensemble du site. Profitez-en pour venir discuter sur le tchat ou débatre sur le Forum.<br /><br />Excusez-nous pour la gêne occasionée.<br />");
define('ERROR_LIEN', 'erreur.html');
define('ERROR_TXTLIEN', 'En savoir plus');
///////////////////////////////////////////////////////////////////////////////////////////////////
class dernierArticle{
var $titre; // Titre de l'article
var $rubrique; // Rubrique de l'article
var $dateA; // Date de l'article
var $photo; // Photo de l'article
var $legende; // Légende de la photo
var $citation; // Citation
var $debut; // Début de l'article
var $lien; // Lien vers l'article
var $txtlien; // Texte du lien
var $dom;
////////////////////////////////////////////////////////////////////////
// Constructeur de class //
// //
// Paramètres : //
// @ source_xml : source du fichier xml contenant le dernier article //
////////////////////////////////////////////////////////////////////////
public function __construct($source_xml){
////// Création et chargement du document DOM ///////
$this -> dom = new DOMDocument;
@$this -> dom -> load($source_xml);
if (!@$this -> dom -> validate()) // si fichier invalide, traitement de l'erreur
{
$this -> titre = ERROR_TITRE;
$this -> rubrique = ERROR_RUBRIQUE;
$this -> dateA = date('d/m/y');
$this -> photo = ERROR_PHOTO;
$this -> legende = ERROR_LEGENDE;
$this -> citation = ERROR_CITATION;
$this -> debut = ERROR_DEBUT;
$this -> lien = ERROR_LIEN;
$this -> txtlien = ERROR_TXTLIEN;
}
else
{
$this -> titre = $this -> getTagValue(ELEMENT_TITRE, DOM_DECODE); // Titre (obtenir la valeur du tag ELEMENT_TITRE)
$this -> rubrique = $this -> getTagValue(ELEMENT_RUBRIQUE, DOM_DECODE); // Rubrique de l'article
$this -> dateA = $this -> getTagValue(ELEMENT_DATE); // Date de publication de l'article
$this -> photo = $this -> getTagValue(ELEMENT_PHOTO); // Photo de l'article
$this -> legende = $this -> getTagValue(ELEMENT_LEGENDE, DOM_DECODE); // Légende de la photo
$this -> citation = $this -> getTagValue(ELEMENT_CITATION, DOM_DECODE); // Citation de l'article
$this -> debut = $this -> getTagValue(ELEMENT_DEBUT, DOM_DECODE); // Début de l'article pour mettre en appétit le visiteur
$this -> lien = $this -> getTagValue(ELEMENT_LIEN); // Lien vers l'article complet
$this -> txtlien = $this -> getTagValue(ELEMENT_TXTLIEN, DOM_DECODE); // Texte du lien à afficher (associé au lien ci-dessus)
}
}
////////////////////////////////////////////////////////////////////////
// Fonction privée getTagValue //
// But : obtenir la valeur d'un tag unique (ou 1er tag rencontré) //
// //
// Paramètres : //
// @ tag (string) : nom du tag concerné //
// @ decode (booléen) : s'il y a besoin de décoder ou non la valeur //
// //
// Valeur retorunée : string / le contenu du tag //
////////////////////////////////////////////////////////////////////////
private function getTagValue ($tag, $decode = false){
$resultat = $this -> dom -> getElementsByTagName($tag) -> item(0) -> nodeValue; // récupération de la valeur du tag xml
if ($decode) // on décode pour afficher les accents
$resultat = utf8_decode($resultat);
return $resultat;
}
// destructeur de class
function __destruct(){
unset($this -> titre, $this -> rubrique, $this -> dateA, $this -> photo, $this -> legende, $this -> citation, $this -> debut, $this -> lien, $this -> txtlien, $this -> dom);
}
}
Modifié par raffoul (16 May 2007 - 15:40)