2012-04-02 4 views
1

Ich versuche, einen XML-Feed in einer Ansicht/Layout einer benutzerdefinierten Joomla 2.5-Komponente anzuzeigen, aber das XML wird als reguläres Layout innerhalb der HTML-Vorlage der Site gerendert. Wie kann ich den XML-Code ohne HTML-Code anzeigen?Wie kann ich einen XML-Feed ohne Vorlagecode in Joomla anzeigen?

(Der Trick tmpl=component in der URL von this related question enthalten nicht hilft, gibt es noch einige HTML-Ausgabe aus der Vorlage, die die XML-Ruinen.)

Ich würde eine Lösung bevorzugen, die nur meine Code-Änderungen in beinhaltet benutzerdefinierte Komponente, wie in Symfony, wenn Sie die Methode setLayout(false) aufrufen.

Antwort

2

Die einzige Lösung, die ich gefunden habe, ist eine Datei im aktuellen Vorlagenordner zu erstellen, z. "Xml.php", und nur diese in der Datei setzen:

<?php 
$document = JFactory::getDocument(); 
$document->setMimeEncoding('text/xml'); 
echo '<?xml version="1.0" encoding="UTF-8" ?>'; 
?> 
<jdoc:include type="component" /> 

Dann habe ich tmpl=xml an die URL anhängen.

+0

Ich habe definiert ('_JEXEC') oder sterben ('Eingeschränkter Zugriff') hinzugefügt; zur obersten Zeile. Klappt wunderbar! – Jim

2

[Bearbeiten] Meine schlecht, machte ich eine Annahme, und Sie wissen, was das Sie bekommt.

Joomla! 1.6-> 2.5 können Sie ein alternatives Ausgabeformat für eine vorhandene Ansicht erstellen durch:

  • Aufruf der Ansicht mit einem Formatparameter z. &format=json
  • Erstellen einer übereinstimmenden Ansichtsklassendatei z. view.json.php, die neben der Standard view.html.php Datei für Sie anzeigen können.
  • Die view.yourformat.php Datei kann Ihre vorhandenen Controller und Vorlagendateien in der normalen Art und Weise verwenden.

    Vergessen Sie nicht, entweder &tmpl=component oder &tmpl=raw zu Ihrer Abfragezeichenfolge hinzuzufügen, damit Module usw. nicht geladen werden.

    tmpl=raw wird nicht laden die HTML-Body umgibt oder Vorlage, nur die Hauptkomponente.

    [/ edit]

    Von Joomla! 1.6 weiter (einschließlich 2.5) gibt es eingebaute Unterstützung für Controller-Formate, dh. Sie erstellen einen Controller für das gewünschte Ausgabeformat.

    Normalerweise würde ein Controller für jede Ansicht werden genannt:

    /components/mycomp/controllers/myview.xml.php

    Ein JSON-Version wäre:

    /components/mycomp/controllers/myview.php

    Eine XML-Version des Controllers Name wäre

    /components/mycomp/controllers/myview.json.php

    Um eine bestimmte Formatversion eines Controller rufen Sie einfach &format=theformatyouwant zu den URL-Parametern hinzufügen, so in Ihrem Fall &format=xml

    Dies ist discussed in this document from 1.6 days - ich habe es als Grundlage für mehr unsere Komponenten, die JSON und ics haben Anforderungen.

    +0

    Diese Lösung erfordert praktisch identische Kopien der Controller- und Ansichtsklassen, die gegen DRY verstoßen. Ich möchte nur ein anderes Layout, nicht Controller oder Ansicht. Trotzdem habe ich etwas Wertvolles von dir gelernt, danke! (Eine andere Lösung könnte sein, nach dem XML-Typ im Controller zu suchen, das Layout zu ändern und den Typ auf HTML zurückzusetzen, um dieselbe Ansichtsklasse wiederzuverwenden.) –

    +0

    Ich vermisse etwas - wenn Ihre Inhaltsansichten bereits XML sind, wie geht das? DRY zu verletzen, wenn Sie nur Ihre vorhandenen '/ tmpl /' Dateien oder Sub-Template-Dateien in den neuen Controller laden müssen. Angesichts Ihrer Lösung darüber ist. – Craig

    +0

    Nun, der neue Controller ist eine Kopie des alten Controllers, der etwas Logik enthält. Und das Neue kann das Alte nicht erben, da es scheint, dass es denselben Klassennamen haben muss. –

    0

    Dieses Thema hat mich ein paar Mal verrückt gemacht.

    Nach viel Frustration ist die einfachste Lösung die von cppl vorgeschlagen. In Ihrer Anfrage Zeichenfolge setzen die folgenden Variablen:

    format=yourcustomformat 
    view=viewname 
    

    Lassen Sie sagen, Sie json Ausgabe aus einer Sicht genannt json wollen.

    erstellen veiw Ordner mit dem Namen Ihrer Ansicht

    json 
    

    und eine Datei in diesem Ordner namens

    view.json.php 
    

    Dann in Ihrem URL-String enthalten Sie die folgende URL durch die & getrennt Parameter Symbol:

    index.php?option=com_mycomponent&format=json&view=json 
    

    cppl ist richtig, dass dies l Oads eine nicht-HTML-Ansicht. Sie müssen den Parameter tmpl jedoch nicht mindestens in 2.5 eingeben. Wenn der Ansichtsname nicht view.html.php lautet, dann scheint 2,5 die zugewiesene Websitevorlage nicht in die Antwort aufzunehmen. Ich denke, weil die Ansicht nicht veiw.html.php ist, nimmt es rohe Ausgabe an und enthält die Vorlage nicht. Ich testete dies sowohl mit einem Ajax-Aufruf als auch mit einem direkten URL-Aufruf an die Ansicht, und in beiden Fällen kam nur die Komponentenausgabe zurück. Ja!

    Wenn jemand weiß, wo dieses Problem von den Joomla-Leuten gut dokumentiert ist, bitte posten!