login  Naam:   Wachtwoord: 
Registreer je!
 Forum

PHP DOMDocument html als nodeValue

Offline Grayen - 11/04/2007 13:41 (laatste wijziging 11/04/2007 13:41)
Avatar van GrayenPHP ver gevorderde Beste leden,

Ik maak gebruik van PHP DOMDocument om html te genereren op de manier zoals je het ook bij javascript zou doen. Alleen nu zit ik met een probleem. Ik heb een functie die een tabel genereert en een die een menu genereert. Wat als ik nu het menu in het tabel wil hebben. Zou ik het volgende doen...

  1. <?php // Kleurtjes
  2. $document = new DOMDocument();
  3. $table = $document->createElement('table');
  4. $document->appendChild($table);
  5. $tr = $document->createElement('tr');
  6. $table->appendChild($tr);
  7. $td = $document->createElement('td');
  8. $td->nodeValue = '<a href="#">linkje</a>';
  9. $tr->appendChild($td);


... dan krijgt $td als waarde &lt;a href="#"&gt;linkje&lt;/a&gt;. Dit is natuurlijk wel te verwachten omdat hij er een textnode van maakt (en dus als ware een htmlentities overeen gooit). Maar hoe kan ik ervoor zorgen dat hij het WEL als html aan ziet? Ik heb een beetje lopen klooien met $document->loadHTML(); maar ik kreeg hem niet goed aan de praat. Zou iemand mij kunnen helpen?

Bij voorbaat dank,

Grayen

9 antwoorden

Gesponsorde links
Offline ArndJan - 11/04/2007 14:01
Avatar van ArndJan PHP interesse Zo misschien?

  1. <?php
  2.  
  3. $html = str_replace("&lt;","<",$td);
  4. $html = str_replace("&gt;",">",$td);
  5.  
  6. ?>


Anders met een preg_replace:

http://www.php.net/preg_replace
Offline Grayen - 11/04/2007 14:20 (laatste wijziging 11/04/2007 14:20)
Avatar van Grayen PHP ver gevorderde Ik weet al hoe ik het ga doen. Ik ga gebruik maken van deze functie...

  1. <?php // Kleurtjes
  2. function htmltagsonly($string)
  3. {
  4. $tableEntities = get_html_translation_table(HTML_ENTITIES);
  5. foreach($tableEntities as $ascii => $htmlentitie)
  6. {
  7. $tableOther[$ascii] = '&#'.ord($ascii).';';
  8. }
  9. return strtr(strtr($string, array_flip($tableEntities)), array_flip($tableOther));
  10. }


... om html toe te laten en de values toch valide te houden.
Offline ArndJan - 11/04/2007 14:21
Avatar van ArndJan PHP interesse Oke dan is wel handig ja,

Maar heeft de DOMDocument niet iets wat er html van maakt?
Offline Grayen - 11/04/2007 14:32 (laatste wijziging 11/04/2007 15:41)
Avatar van Grayen PHP ver gevorderde htmltagsonly functie werkt van geen meter, dus ik ben verder opzoek gegaan in php.net en ik heb eindelijk hetgeen gevonden wat ik zocht:

  1. <?php // Kleurtjes
  2. $fragment = $document->createDocumentFragment();
  3. $fragment->appendXML($value);
  4. $td->appendChild($fragment);
Offline Stijn - 11/04/2007 15:55
Avatar van Stijn PHP expert Je maakt een nieuwe element natuurlijk! Dit is hetzelfde als in JS zeg je... maar dan doe je het niet 

  1. <?
  2. $a = $document -> createElement('a');
  3. $a -> attribute( 'href' , 'http://....' )
  4. -> nodeValue = 'link tekst';
  5. $td->appendChild( $a );
  6. ?>

Offline Grayen - 11/04/2007 18:28
Avatar van Grayen PHP ver gevorderde was het maar zo simpel... denk je nou echt dat ik daar niet op was gekomen? Het probleem zit hem in het feit, zoals ik in het eerste bericht al vermelden...

Citaat:
Ik heb een functie die een tabel genereert en een die een menu genereert.


Beide functies returnen html code. maar mijn probleem was nu juist ik wil de html code van het menu in de document tree van de tabel kunnen zetten. Eerst dacht ik dat het niet mogelijk was, maar later vond ik de functie waarbij je wel een string met xhtml code kon toevoegen alsof het een node was namelijk die documentfragment functie.
Offline ikkedikke - 12/04/2007 15:16
Avatar van ikkedikke PHP expert waarom geef je ze dan niet het object mee waar ze het in moeten zetten? en zorg je dat die dat weer returnt?
Offline Grayen - 12/04/2007 18:03
Avatar van Grayen PHP ver gevorderde Zou misschien wel kunnen maar een beetje een omweg en aangezien ze ook los van elkaar goed moeten kunnen werken is dit zoals ik het nu heb veel beter (met dat fragment). Anders zou ik bij ELKE functie een controle moeten uitvoeren om te kijken of er een element is meegegeven als argument en bij elk een stuk code toevoegen die hem laat toevoegen.
Offline ikkedikke - 12/04/2007 18:51
Avatar van ikkedikke PHP expert heel dat gebruik van DOMDocument is een omweg, maar volgens mij valt het ombouwen van die functies nog best mee.
Wil je ze eens posten dan kijk ik wel
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.227s