Zum Inhalt springen

Extension mit mehreren "Detail" - Unterseiten

Erstellt am 18. Oktober 2006 · 5 Antworten · letzte Antwort am 28. Oktober 2006

Tags: Frage

mike_72 ·

Hallo,
meine Frage ist wahrscheinlich hier absolut lächerlich wie ich befürchte, aber irgendwie scheine ich vor lauter Bäumen den Wald nicht zu sehen.

Ich bin dabei eine Extension ähnlich eines Katalogs zu erstellen, in dem erstmal alle Artikel der Rubrik XX als Liste dargestellt werden sollen. Soweit auch erstmal kein Problem. Alle Artikel werden untereinander gelistet. (Als Tabelle mit Artileknr. und Artikelname)

Nun soll man auf Klick auf einen Artikel in die Detailansicht gelangen. Da kann ja nun eigentlich keine neue Extension hinterstecken, sondern ich müsste zur "Einstiegsseite der Extension" nun eine Detailseite mit dem ausgewählten Artikel anzeigen. Diese Seite hat natürlich wieder ein eigenes Template, da nun auch Bilder etc. angezeigt werden. Also eine Extension mit zwei Templates (Listenansicht aller Artiklel einer Kategorie und Detailansicht eines Artikels)

Meine Frage: Wie löse ich sowas in TYPO3, daß ich eine Übersichtsseite mit Inhalten aus der DB anzeige und per Link dann noch Detailseiten - mit anderem Template - anzeigen kann. Sowas muss doch eigentlich ganz einfach sein. Irgendwie fehlt mir wohl der Tritt in die richtige Richtung...

Thx
Mike_72

just2b ·

Guten Morgen,

also in der Tat ist das sehr einfach zu lösen! Schau dir dazu so ziemlich jede Extension an, die im FE Daten ausgibt!

Grundsätzliches Vorgehen: Du fügst in den Link zur Detailseite sowas ein wie "&view=detail". Am Beginn der Extension fragst du nach dem Paramter und wenn er verfügbar ist, führst du nicht die Funktion list() aus, sondern die Funktion detail().
Du musst natürlich noch einen Parameter übergeben mit der Id des Datensatzes.

oder andere Vorgehensweise:
Du machst 2 Seiten, fügst auf beiden das Plugin ein und entweder über Flexforms oder über TS oder über die einfache Code-Box legst du fest, dass eine Seite Single-View ist. Dann musst du nur noch in der List-View auf die Single-Seite verlinken und die uid übergeben.

Georg

mike_72 ·

Vielen Dank für die Hinweise. Ich habe mir jetzt mal eine andere Extension installiert und schaue mir da einfach erst mal den Code an.

mike_72 ·

Hallo,

ich bin noch an dem ersten Vorschlag von just2b dran. Aber irgendwie leuchtet mir das Prinzip noch nicht so ganz ein. Klar, daß ich dann statt der Funktion list() dann eine andere Funktion aufrufe und mir dann da $content zurückgeben lasse.

Was mir noch unklar ist: Die Seite die ich dazu angelegt habe hat die pid 8. In der Datenbank wird auch zu jedem Datensatz (Artikel) diese pid gespeichert. In der Funktion und im MySQL frage ich auch explizit diese Daten ab.

$katalogPageID = $conf['katalogPageID'];
if (!intval($katalogPageID)) $katalogPageID = $GLOBALS['TSFE']->id;
.
.
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', '`user_katalog_artikel`', '`deleted` = 0 AND `hidden` = 0 AND `pid` = "'.$katalogPageID.'"');

Im Typoscript gebe ich nur den Parameter templateFile an. Das funktioniert auch alles wunderbar (bis auf die noch fehlende Blätterfunktion :-) )

Wenn nun auf einen Artikel aus der Übersichtsliste geklickt wird, soll ja eine Detailansicht angezeicht werden. Also neben einer anderen aufzufudenden Funktion soll auch ein anderes Template aufgerufen werden. Wie legt man denn sowas am elegantesten an? Einfach in der Funktion $conf['templateFile'] mit dem neuen Wert überschreiben? Oder im Typoscript einen weiteren Wert wie z.B. templateFile2 = /fileadmin/... übergeben?

Danke schonmal für Eure Hilfe.

steffenk ·

Da gibt es mehrere Möglichkeiten.
Entweder Du nimmst nur ein Template und legst dort für jede gewünschte Ansicht einen entsprechenden Subpart an oder Du konfigurierst das über TS:

plugin.tx_myext_pi1 {
   singleView {
      templateFile=fileadmin/...
   }
   listView {
      templateFile=fileadmin/...
   }
}

und in der Ext

$this->templateFile['singleView']=$this->conf['singleView.']['templateFile'];
$this->templateFile['listView']=$this->conf['listView.']['templateFile'];