Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/04/2011, 00h29   #1
Membre du Club
 
Inscription : décembre 2005
Messages : 152
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 152
Points : 66
Points : 66
Par défaut [DOM] insérer du code HTML dans un noeud

Bonjour,

J'ai créé une classe pour écrire du HTML via DOMDocument. Il s'agit d'une structure à base de DIV avec un header, un footer et un div de contenu.
Je souhaite implémenter une fonction pour écrire du code HTML personnalisé dans le div de contenu, mais quand je l'ajoute en tant que texte, il encode les caractères HTML.
J'ai également essayé de créer un nouveau DOMDocument à partir de ma chaîne de code HTML, sans succès.

Quelqu'un aurait une idée ?
Merci d'avance.

La classe (ça coince au niveau de la fonction setContent) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class Popup {
	static $id;
	static $html;
 
	public function __construct($id){
		$this->id = $id;
 
		$dom = new DOMDocument('1.0', 'iso-8859-1');
		$popupdiv = $dom->createElement('div');
		$popupdiv->setAttribute('id',$id);
		$popupdiv->setAttribute('class','popup');
		$popupdiv->setAttribute('style','display:block;');
		$dom->appendChild($popupdiv);
 
		$headerdiv = $dom->createElement('div');
		$headerdiv->setAttribute('class','popup_header');
		$popupdiv->appendChild($headerdiv);
		$maindiv = $dom->createElement('div');
		$maindiv->setAttribute('class','popup_main');
		$popupdiv->appendChild($maindiv);
		$footerdiv = $dom->createElement('div');
		$footerdiv->setAttribute('class','popup_footer');
		$popupdiv->appendChild($footerdiv);
 
		$this->html = $dom;
	}
 
	public function setTitle($title){
		$headertext = $this->html->createTextNode($title);
		$this->html->firstChild->firstChild->appendChild($headertext);
		$this->html->firstChild->firstChild->replaceChild($headertext, $this->html->firstChild->firstChild->firstChild);
	}
 
	public function setContent($content){
		$contenthtml = new DOMDocument('1.0', 'iso-8859-1');
		$contenthtml->loadHTML($content);
		$this->html->firstChild->childNodes->item(1)->appendChild($contenthtml);
	}
 
	public function addCancelButton($label="Annuler"){
		$button = $this->html->createElement('input');
		$button->setAttribute('type','button');
		$button->setAttribute('value',$label);
		$button->setAttribute('onclick',"javascript:document.getElementById('".$this->id."').style.display='none';");
		$this->html->firstChild->childNodes->item(2)->appendChild($button);
	}
 
	public function display(){
		echo $this->html->saveHTML();
	}	
}
Utilisation :
Code :
1
2
3
4
5
$pop = new Popup("testpopup");
$pop->setTitle("Test");
$pop->setContent("<p>bla <strong>bla</strong> bla</p><p>lol</p>");
$pop->addCancelButton();
$pop->display();
madislak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 02h28   #2
Membre confirmé
 
Avatar de polkduran
 
pablo duran
Consultant informatique
Inscription : décembre 2009
Messages : 148
Détails du profil
Informations personnelles :
Nom : pablo duran
Âge : 28
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2009
Messages : 148
Points : 266
Points : 266
essayes avec importNode
http://fr.php.net/manual/fr/domdocument.importnode.php
__________________
polkduran est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/04/2011, 12h10   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
J'ai également essayé de créer un nouveau DOMDocument à partir de ma chaîne de code HTML, sans succès.
Code :
1
2
3
 
$doc = new DOMDocument;
$doc->loadHTML($html);
Tu devrais faire tes popups en JavaScript.
Si tu souhaite vraiment générer tes vues avec DOMDocument, ce qui peut se comprendre, alors tu devrais éviter de mélanger les chaines de caractères et les DOMNodes.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 14h42   #4
Membre du Club
 
Inscription : décembre 2005
Messages : 152
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 152
Points : 66
Points : 66
Bonjour,

J'ai résolu mon problème avec DOMDocument::createDocumentFragment()
Merci beaucoup pour vos réponses.

Mad
madislak est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h44.


 
 
 
 
Partenaires

Hébergement Web