Thema:
XML Output - ungetestet flat
Autor: Transistor
Datum:18.02.22 11:01
Antwort auf:Re:Erstmal dann nicht wie angedacht von Andi

Dann machen wir es mal konkret - hier eine neue Templateklasse für XML Output als Basis für die Apps:

<?php
require_once(INCLUDEDIR."/templatelayer/cTemplate.php");

class cTemplateXml extends cTemplate{

   var $m_sXmlDoc;                    // xml file for the data

   function cTemplateXslt($sSkinDir){

       cTemplate::cTemplate($sSkinDir);
       $this->m_sTemplateExtension = ".xsl";

       $this->m_sXmlDoc =   "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"
                           ."<!DOCTYPE xsl:stylesheet [\n<!ENTITY nbsp \"&#160;\">\n]>\n"
                           ."<pxmboard>\n";
   }
   
   function _addDataRecursive(&$arrData,$sSubst = ""){
       reset($arrData);
       while(list($mKey,$mVal) = each($arrData)){
           if(is_integer($mKey) && !empty($sSubst)){
               $mKey = $sSubst;
           }
           if(empty($mKey)){
               return FALSE;
           }

           if(is_string($mKey) && (strncmp($mKey,"_",1)==0)){
               $mKey = substr($mKey,1);
           }
           if(is_array($mVal)){
               if(!empty($mVal)){
                   if(is_integer(key($mVal))){
                       $this->_addDataRecursive($mVal,$mKey);
                   }
                   else{
                       $this->m_sXmlDoc .= "<$mKey>\n";
                       $this->_addDataRecursive($mVal,$sSubst);
                       $this->m_sXmlDoc .= "</$mKey>\n";
                   }
               }
           }
           else{
               if( $mVal===0 || $mVal==="" ){
                   $this->m_sXmlDoc .= "<$mKey/>\n";
               }
               else{
                   $this->m_sXmlDoc .= "<$mKey><![CDATA[$mVal]]></$mKey>\n";
               }
           }
       }
       return TRUE;
   }


   function getOutput(){
       $this->m_sXmlDoc .= "</pxmboard>\n";
       return $this->m_sXmlDoc;
   }
}
?>

Waren jetzt doch mehr als 30 Zeilen aber man hätte es auch von der Xstl Klasse erben können statt zu kopieren- Dann wäre es nur die überschriebene getOutput. :-) Genauso könnte man in der _addDataRecursive JSON zusammenbauen. Die Methode macht nicht viel mehr als die von der Anwendung übergebenen Schlüssel-Wert Paare aus dem Array in ein Ausgabe-/Templatetaugliches Format umzuwandeln.

2 kleine Schritte fehlen noch: Der neue Templatetyp müsste in der DB registriert werden und man müsste das Setzen des Templates via URL zulassen. Aktuell geht das nur über die zentrale Konfiguration pro Board bzw. pro Nutzer in den eigenen Einstellungen. Alternativ müsste man einen Systemnutzer mit dem sich die Apps anmelden müssen und für den das neue Template konfiguriert wäre.

Das bildet so natürlich erstmal nur die vorhandene Funktionalität ab. Für sowas wie Up-/Downvotes braucht man dann neue "actions" und neue Tabellen. Das ist halt die Frage ob man das noch in PHP machen will. Umsetzbar wäre es ohne größere Verrenkungen.


< antworten >