Komponente mit RAW view

  • Hallo Forum!
    Ich bin neu hier und brauche eine Lösung! :)
    Ich habe mir schon ein Buch über Joomla Extensions zugelegt, welches aber leider unbrauchbar ist.


    Wenn jemand ein einfaches Beispiel hat wie Controller und View für ein Raw ouput aussehen müssen wäre ich echt dankbar!


    Was ich schon mit google herausgefunden habe:


    Meine Controller.php

    Code
    class VideosController extends JControllerLegacy{    public function display($cachable = false, $urlparams = array())    {        $document = JDocument::getInstance('raw');  //this new instance is a raw document object        $viewType = $document->getType();                $this->getView('videos', $viewType);        $this->input->set('view', $viewName);        parent::display($cachable, $urlparams);    }


    Damit wird immerhin schonmal die view.raw.php angezogen.


    Diese sieht bei mir im Moment so aus:


    Leider erhalte ich jetzt die komplette Html Ansicht als Datei!
    Das war nicht ganz das was ich wollte.
    Wie bekomme ich nun noch den HTML output abgeschaltet?
    Vielen Dank schonmal für eure Ideen!
    Grüße

  • Hallo!


    Bin wieder einen kleinen Schritt weiter gekommen bzw. etwas schlauer:


    In der Datei ./joomla/libraries/cms/application/cms.php
    in der Funktion execute() spielt sich wohl das Entscheidende ab.


    Ich habe festgestellt, das bei mir zum Zeitpunkt der Aufrufes von render() an der besagten Stelle mein Dokument vom Typ JDokumentHtml ist.
    Wäre aber wohl besser wenn es ein JDokumentRaw ist.


    Das bedeutet ich muss im Aufruf von JApplicationSite->doExecute() das korrigert bekommen.
    Das JDocument wird nun aber wärend der Ausfürhung des Routings das erste mal initalisiert.
    ($this->route(); in JApplicationSite->doExecute()).


    Wenn man sich die implementierung von JFactory::createDocument() anschaut kann man sehen, das ich den Typ des JDocument Objekts an
    der Stelle beeinflussen könnte in dem ich die Werte von input( was auch immer das ist) der Application entsprechend verändere.


    Gut.


    Nur der Einsprung in meine Komponente ist erst viel später.
    $this->dispatch(); in der Methode JApplicationSite->doExecute().


    Zu dem Zeitpunk ist
    JFactory::$document schon initalisiert und die Factory lässt kein erneutes überschreiben zu! (Zumindes nicht auf offiziellem weg) :(


    --> Sackgasse



    Kleine Ergänzung:
    Das Framework schützt sich sogar vor so einer solchen Aktion.
    Die JDocument Instanz die zum Rendern verwendet wird, wird leider vor dem Einsprung in die Komponente gesichert. Man hat so in der Komponente keine Chance das JDocument durch ein anderes zu ersetzen!
    Wen es interessiert: JApplicationSite->dispatch() Aufruf von $this->loadDocument();


    Ergänzung:
    Eine Lösung für das Problem ist dafür zu sorgen, dass beim Erstellen der JDocument Instanz im JInput Objekt das Attribut format auf raw gesetzt ist.
    (JFactory::createDocument)
    Das zu erreichen ist denkbar einfach: der URL einfach &format=raw anhängen.
    Sehr großer Nachteil dieser Lösung: Der Controller muss sich darauf verlassen, das der Aufrufende das richtig macht, weil der Controller das selber nicht mehr beeinflussen kann.
    Schade das diese Funktionalität nicht dokumentiert ist. (Zumindest habe ich es nicht gefunden)
    Vielleicht gibt es aber doch noch eine besser Lösung?

    2 Mal editiert, zuletzt von Jnerd ()