8792 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

Vous êtes trop des stars, je suis en admiration. Merci beaucoup. Je vais essayer d'améliorer mon programme et je vous refait signe.

Et merci pour l'exemple Faire la bise / Toucher les fesse Smiley biggrin mdr, ca m'a bien aidé à comprendre même si pour moi Toucher les fesses, c'est public lol.

Petite question hors du sujet :
- vous avez mis combien de temps à apprendre tout ça ?
- vous avez tout appris avec des bouquins ou vous avez suivi des cours ?

Bon fini de rigoler, je retourne au bouloeau car j'ai envie de devenir aussi fort que vous.
jeje a écrit :

private function getTag ($tag, $decode = false)
{
    $resultat = false;
    if ($this->estValide())
    {
        // avec test sur le tag
        $resultat = $this -> dom -> getElementsByTagName($tag) -> item(0) -> nodeValue;
        if ($decode)
        {
            $resultat = uft8_decode($resultat);
        }
    }
    return $resultat;
}


if ($this->estValide())

Pourquoi tester si le dom est valide ? Je teste le fichier xml avec le dtd au début du programme. Smiley confus
Modifié par raffoul (16 May 2007 - 13:55)
raffoul a écrit :
Pourquoi tester si le dom est valide ?

Parce que je suis maniaque Smiley lol
Parce que rien ne me garantit que le document XML n'a pas été modifié depuis sa construction. Bien sûr, ce n'est pas le cas dans ton code actuel, mais ça pourrait changer à l'avenir donc on prend les devants et on blinde.
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)
raffoul a écrit :
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 ?

Ce serait l'idéal, si validate n'est pas trop gourmand. Sinon, ne teste qu'à la création comme tu as fait.

a écrit :
les constantes, il faut les mettres directement dans le fichier comme j'ai fais ou les mettre dans un autre fichier ?

C'est toi qui vois. Soit dans le même fichier, soit dans un fichier dédié aux constantes de cette classe (dans le même dossier que celui de la classe, ou un sous-dossier) mais PAS dans un fichier de constantes global au site. Question de réutilisabilité.

Si je peux me permettre, tu dérives un peu sur de la prog généraliste afin de terminer cette classe, alors que le sujet original était plus général à la POO. Fais un break avec cette classe, fais-toi de petits tests avec des classes simples pour bien maîtriser les notions de visibilité (privé/protégé/public), d'héritage, les méthodes virtuelles, les variables et méthodes de classes. C'est long et fastidieux, mais c'est un passage obligé si tu veux apprendre correctement.

Bon courage pour la suite
J.
Pages :