| 
<?php
/**
 * class xmlmenuhasdom
 * DOMDocument is enabled, XSLTProcessor is not
 *
 * @author: johan <[email protected]>
 */
 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;
 }
 }
 ?>
 |