Wer sich meine PureMVC Site schon angesehen hat, wird den Namen der Extension bereits kennen. Ich habe ihr den Extension-Key mwflash2t3 gegeben. Im Repository ist sie noch nicht, da sie außer den Grunddateien noch nicht viel Funktion enthält. Ich hoffe, dass sich das diese Woche noch ändert.
Den groben Aufbau will ich euch aber nicht vorenthalten.
Die Extension wird in Frontend- und Backendfunktionen aufgeteilt. Im Frontend kann man die Extension sowohl als neuen Pagetype als auch als Plugin einfügen. Der neue Pagetype ist für komplette Flashsites gedacht. Das Plugin für ein einzelnes Flashmodul auf der Website. Das Frontendplugin wird zukuftsgerecht mit den lib/div Extension programmiert. Ich verspreche mir davon, dass es später für mich einfacher wird auf TYPO3 v5 zu switchen.
Das Backendmodul versteckt sich dann unter WEB im TYPO3-Backend. Hier wählt der Nutzer seine XML aus und mappt nach TemplaVoilà-Art. Ich hoffe, dass ich es zeitlich schaffe, dass die XML, ohne vorherige Eingabe der Node-Namen durch den User gemappt werden kann.
Beim Datenbankaufbau habe ich mich an TemplaVoila orientiert. Auch ich werde mit der Trennung zwischen Templateobject und Datastructure arbeiten. Da bei mir aber sowohl Frontend wie Backend Zugriff auf die XML brauchen, gibt es bei mir eine eigene Tabelle für die XML. Auch für die Daten aus der Flexform des Plugins stelle ich eine eigene Tabelle zur Verfügung.
Schade ist, dass TemplaVoilà das Mappen von XML nicht unterstützt. Interessant ist aber, dass dies anscheinend einmal angedacht war. In der Datei class.tx_templavoila_htmlmarkup.php befindet sich die Funktion setTagsFromXML ( $content )
/** * The idea is to parse the XML in $contnet and set the internal TAG array with all these tags so they can be mapped... * NOT WORKING YET - experiment. * * @param [type] $content: ... * @return [type] ... */ function setTagsFromXML($content) { $parser = xml_parser_create(); $vals = array(); $index = array(); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 0); xml_parse_into_struct($parser, $content, $vals, $index); if (xml_get_error_code($parser)) return 'Line '.xml_get_current_line_number($parser).': '.xml_error_string(xml_get_error_code($parser)); xml_parser_free($parser); $this->tags = $index; foreach($index as $idx => $value) { $this->tags[$idx] = array(); } print_r ($this->tags); $this->textGnyf = 1; }
Allerdings wird diese Funktion nie benutzt und ist sogar in der index.php des cm1-Ordners der Extension in der Funktion
function displayFileContentWithMarkup($content,$path,$relPathFix,$limitTags)
eingebaut, aber auskommentiert.
/** * This will mark up the part of the HTML file which is pointed to by $path * * @param string The file content as a string * @param string The "HTML-path" to split by * @param string The rel-path string to fix images/links with. * @param string List of tags to show * @return void Exits... * @see main_display() */ function displayFileContentWithMarkup($content,$path,$relPathFix,$limitTags) { $markupObj = t3lib_div::makeInstance('tx_templavoila_htmlmarkup'); $markupObj->gnyfImgAdd = $this->show ? '' : 'onclick="return parent.updPath(\'###PATH###\');"'; $markupObj->pathPrefix = $path?$path.'|':''; $markupObj->onlyElements = $limitTags; // $markupObj->setTagsFromXML($content); $cParts = $markupObj->splitByPath($content,$path); if (is_array($cParts)) { $cParts[1] = $markupObj->markupHTMLcontent( $cParts[1], $GLOBALS['BACK_PATH'], $relPathFix, implode(',',array_keys($markupObj->tags)), $this->MOD_SETTINGS['displayMode'] ); $cParts[0] = $markupObj->passthroughHTMLcontent($cParts[0],$relPathFix,$this->MOD_SETTINGS['displayMode']); $cParts[2] = $markupObj->passthroughHTMLcontent($cParts[2],$relPathFix,$this->MOD_SETTINGS['displayMode']); if (trim($cParts[0])) { $cParts[1]='<a name="_MARKED_UP_ELEMENT"></a>'.$cParts[1]; } return implode('',$cParts); } $this->displayFrameError($cParts); return ''; }
Leider, leider, leider bietet TemplaVoilà hier keinen Hook an, weshalb ich keinen Weg sehe, die Funktionalität, die ich benötigen würde, auf vernünftige Weise einzubauen. Per XCLASS zu erweitern, erscheint mir nicht sonderlich sinnvoll.
Was ich allerdings an dem neuen Ansatz lib/div noch nicht sehe, ist die Möglichkeit für das Backend mit dem MVC-Model zu programmieren. Es scheint ein Feature nur für Frontend-Plugins zu sein. Falls ich mich hier irre, lasse ich mich gerne berichtigen. Aber ich denke, dass mir für das Backendmodul nur der Weg über den Aufbau index.php + weitere Aspektorientierte Klassen gehen kann.
Anregungen, Tipps oder Kritik gerne hier posten.



