<?php
/**
* class xmlmenuhasdom
* DOMDocument is enabled, XSLTProcessor is not
*
* @author: johan <barbier_johan@hotmail.com>
*/
class xmlmenuhasdom extends abstractxmlmenu {
/**
* public function __construct
* constructor
* @Param (string) sVersion : xml version
* @Param (string) sEncoding : xml encoding
*/
public function __construct ($sVersion = null, $sEncoding= null) {
$this -> doc = new DOMDocument ($sVersion, $sEncoding);
$root = $this -> doc -> createElement ('menu');
$this -> root = $this -> doc -> appendChild ($root);
parent::__construct ($sVersion, $sEncoding);
}
/**
* public function htmlToFile
* method to save the html to a file.
* cannot be done if XSLTProcessor is not enabled (see comments in the xmlmenu::toHTML () method to learn how to save the HTML file)
* @Param (string) sFileName :filename
*/
public function htmlToFile ($sFileName) {
return false;
}
/**
* public function toHTML
* method to transform the xml to html
* @Param (string) sType : XSL file to be used
* @Return (string) sHtml : transformed HTML string
*/
public function toHTML ($sType) {
if (false === ( $type = array_search($sType, $this -> aTypes))) {
return false;
}
/**
* Difficult bit here that needs a bit of explanation
* We do not have XSLTProcessor availaible.
* So, we cannot use it to apply the stylesheet.
* What we do is :
* we take the generated xml.
* We add a stylesheet import by parsing the text.
* we save it to a temporary folder
* we return only a link to the newly created file.
* now, to have the html version of the xml , user will need to save it via his web browser...
*/
$sXsl = '<?xml-stylesheet type="text/xsl" href="../xsl/'.$type.'"?>';
$this -> sHtml = $this -> doc -> saveXML ();
$iPos = strpos ($this -> sHtml, '?>');
$this -> sHtml = substr_replace ($this -> sHtml, $sXsl, $iPos + 2, 0);
$iCpt = count (scandir ('tmp_xml'));
$fp = fopen ('tmp_xml/tmp_xmllfile_'.$iCpt.'.xml', 'w+');
fwrite ($fp, $this -> sHtml);
fclose ($fp);
$this -> sHtml = '<a href="tmp_xml/tmp_xmllfile_'.$iCpt.'.xml" title="Cliquer pour voir le html généré" target="_blank">Cliquer pour voir le html généré</a>';
return $this -> sHtml;
}
}
?>
|