2011-06-04 14 views
7

Bir sınıfta saveHTML() döndüren çeşitli işlevler var. SaveHTML() sınıfında birden fazla işlevi ekledikten sonra, HTML'nin bir kısmını tekrarlar. Bunu başlangıçta saveHTML ($ node) yaparak çözdüm ama şimdi bir seçenek görünmüyor.

SaveHTML'nin ($ domnode) sadece PHP 5.3.6'da mevcut olduğunu bilmiyordum ve sunucu üzerinde herhangi bir kontrole sahip olmadığım için dosyaları şimdi yükledim ve PHP 5.2 ile uyumlu hale getirmeliyim. Basitçe anlatmak gerekirse

o sadece benim problem göstermek için bu şuna benzer:

<?php 

class HTML 
{ 
    private $dom; 

    function __construct($dom) 
    { 
     $this->dom = $dom; 
    } 

    public function create_paragraph() 
    { 
     $p = $this->dom->createElement('p','Text 1.'); 

      $this->dom->appendChild($p); 

     return $this->dom->saveHTML(); 
    } 

    public function create_paragraph2() 
    { 
     $p = $this->dom->createElement('p','Text 2.'); 

      $this->dom->appendChild($p); 

     return $this->dom->saveHTML(); 
    } 
} 

$dom = new DOMDocument; 
$html = new HTML($dom); 

?> 
<html> 
<body> 
<?php 

echo $html->create_paragraph(); 

echo $html->create_paragraph2(); 

?> 
</body> 
</html> 

Çıkışlar:

<html> 
<body> 
<p>Text 1.</p> 
<p>Text 1.</p><p>Text 2.</p> 
</body> 

ben yine oluyor bir fikrim var ama hiç bir fikrim var saveHTML ($ domnode) olmadan tekrar yapılmaması. PHP 5.2 ile düzgün çalışmasını nasıl sağlayabilirim?

İşte yapmak mümkün istiyorum ne bir örnek:

Ne yapmam

http://codepad.viper-7.com/o61DdJ

+1

Tabanlı gibi kadarıyla bir DOM şey olacak, DOMDocument 'j için yanlış bir araç olabilir ob. Doğrulanmış çıktıyı isterseniz, XMLWriter'i kullanabilirsiniz. XMLWriter 5.2'de kullanılabilir. Bkz. Http://www.php.net/manual/en/book.xmlwriter.php – jmz

cevap

10

, sadece XML olarak düğümünü tasarruf edilir. Orada sözdiziminde bazı farklılıklar vardır, ancak çoğu kullanımları yeterli iyi:

return $dom->saveXml($node); 
+0

Sadece ihtiyacım olan şey. Teşekkürler :) – Tek

+0

Bazı durumlarda LIBXML_NOEMPTYTAG bayrağını eklemeniz gerekebilir: '$ dom-> saveXml ($ node, LIBXML_NOEMPTYTAG)' – SingLow

0

Sana sınıf içinde iade etmek zorunda olmadığını biliyorum gibi kadarıyla (sınıfınızda iki kez return $this->dom->saveHTML(); var Eğer alırsan her yerde bu özel fonksiyon olmadığı sürece.

return $this->dom->saveHTML();createparagraph() dışına o dönmeden echo. biliyorum ama sizin gibi bu yeni duyuyorum. sizin örnek üzerinde

İlgili konular