Zum Inhalt springen

Seiten-ID per TS setzen

Erstellt am 4. Mai 2006 · 23 Antworten · letzte Antwort am 13. August 2008 · Seite 1 von 2

Tags: Seiten & Seitenbaum, Frage

droptix ·

@toyde: So wie du das gepostet hast kann man das mit tt_news meistens nicht machen... oder nur extrem eingeschränkt. Jeder Button in meinem Menü zeigt News aus einer anderen Kategorie an. Also ist auf jedem Button (auf jeder zugehörigen Seite) ein Content-Element vom Typ Plugin/News. Dort gibt's dann nur eine LIST-Ansicht.

Seitenbaum:
root
Seite 1
- Plugin/News > LIST mit Filter (nur News aus Kategorie 1 anzeigen)
Seite 2
- Plugin/News > LIST mit Filter (nur News aus Kategorie 2 anzeigen)
SysFolder für News und Kategorien
- Hier liegen zum einen News-Datensätze
> Und zum anderen die einzige News-Einzelansicht
> - Plugin/News > SINGLE (wird für alle News verwendet)

Ich leg doch nicht unter jeden Menüpunkt nochmal eine Einzelansicht. Ist doch dann alles zehn Mal vorhanden... Es gibt bei mir nur eine Einzelansicht und die Seite ist im TS verankert: plugin.tt_news.singlePid

Das ist weitaus üblicher und wie ich finde weniger fehleranfällig. Deshalb muss man leider an der Seiten-ID manipulieren, um möglichst einfach den gewünschten Effekt zu erzielen.

Es muss ja nur vor dem "Rendern" des Menü die Seiten-ID auf die backPid gesetzt werden. Und danach einfach wieder zurück stellen... sollte nix weiter passieren. Aber das scheint mit TS nicht machbar zu sein. Dann muss halt PHP ran.

toyde ·
droptix schrieb

Ich leg doch nicht unter jeden Menüpunkt nochmal eine Einzelansicht. Ist doch dann alles zehn Mal vorhanden...

Mit den List-Views machst Du ja nichts Anderes. Was ist denn dabei dies gleich für die Single-View zu übernehmen?

droptix schrieb

@toyde: So wie du das gepostet hast kann man das mit tt_news meistens nicht machen...

Der Ansatz stammt aus diversen Tutorials. Ich sage doch 😉 .
Die beiden Views (List und Single) schieben sich die News-ID's zu. Das ist ja der Sinn der Sache. Da Du die News-ID aus der List-View immer in den untersten Ordner verweist (Single), befindet sich der Newsleser im Frontend nicht mehr in der für ihn sichtbaren Navigation.
Das mit PHP oder Gebastel "nachzuahmen" - wär es mein Problem: nicht mit mir #paralyzed# .

droptix ·

Naja da ich die Seite nicht selbst betreue, sondern Redakteure, kann ich mich nicht darauf verlassen, dass die das kapieren und v.a. später auch korrekt einhalten, wenn das Menü mal erweitert werden soll. Und immmer den Admin spielen kann ich auch nicht, denn die Seite wird mal übergeben. Dann muss der Kern stehen und Erweiterungen sollen möglichst einfach von Statten gehen... Daher ist diese (ansonsten logische) Lösung hier nicht machbar.

Ich würde zumindest erstmal testweise probieren, ob mein Ansatz überhaupt geht. Wenn ich die TSFE->id nicht mit TypoScript setzen kann, dann möchte ich gern VOR und NACH dem TMENU eine PHP-Datei durchlaufen lassen... Ich geb dann mal bescheid, ob das überhaupt geht oder ob ich doch lieber gleich die Datei anpassen muss, wo das TMENU generiert wird.

droptix ·

Ich bin heute über einen interessanten Ansatz gestoßen, der eigentlich alle zufrieden stellen müsste. Ich bin mir auch sicher, dass er geht... Ich hab aber nur die halbe Lösung und bräuchte bitte nochmal euer Wissen:

Um den CUR-Zustand des Menüs mit TYPO3-Mitteln auszutricksen, kann man die Einstellung 'HMENU.alwaysActivePIDlist' verwenden. Ich kann schonmal mit einer if-Abfrage auslesen, ob es die Variablen $_GET['tx_ttnews']['tt_news'] und $_GET['tx_ttnews']['backPid'] gibt. Wenn ja, dann schaue ich gerade die SINGLE-Ansicht einer News an. In diesem Fall muss

HMENU.alwaysActivePIDlist = $_GET['tx_ttnews']['backPid']

gesetzt werden... zumindest veranschaulicht. Die 'backPid' kann ich mir so ausgeben lassen:

10 = TEXT
10 {
    data = GPvar:tx_ttnews|backPid
    if {
        isTrue.data = GPvar:tx_ttnews|tt_news
        isTrue.data = GPvar:tx_ttnews|backPid
    }
}

Mein Problem: Wie kriege ich den Wert von '10' (also die ausgelesene 'backPid') nun nicht als 'TEXT', sondern in die Einstellung 'HMENU.alwaysActivePIDlist' übertragen? Die if-Abfrage müsste ich ja eigentlich auf 'HMENU.alwaysActivePIDlist' legen, aber mein Wissen schweigt sich dazu aus #paralyzed#

Ich habe auch probiert:

MENU = HMENU
MENU {
    # is used to fake the HMENU's CUR-status on tt_news SINGLE view
    alwaysActivePIDlist >
    alwaysActivePIDlist.data = GPvar:tx_ttnews|backPid
    alwaysActivePIDlist.if {
        isTrue.data = GPvar:tx_ttnews|tt_news
        isTrue.data = GPvar:tx_ttnews|backPid
    }

Ging natürlich nicht. Wenn ich statisch einfach die (mir ja bekannte) 'backPid' reinschreibe, also so: MENU.alwaysActivePIDlist = 2, dann klappt das. Dann behält der Menüpunkt tatsächlich seinen CUR-Status.

Nun möchte ich das Ganze aber nicht statisch, v.a. weil sich die 'backPids' manchmal unterscheiden.

Was auch noch verbesserungswürdig ist: Wenn nun jemand schon die Einstellung 'alwaysActivePIDlist' verwendet, dann dürfen die darin gespeicherten Werte ja nicht einfach überschrieben werden. Die 'backPid' muss in diesem Fall einfach nur hinten ran gehängt werden. Das wäre dann das Nonplusultra, spielt bei mir jetzt aber nicht die übergeordnete Rolle.

Wer hat eine grandiose Idee?

droptix ·

Muss nochmal den Thread anstoßen... quäle mich hier schon wieder ne knappe Woche durch und schaffe es einfach nicht, den Wert der ausgelesenen 'backPid' auf die Variable 'alwaysActivePIDlist' umzuleiten. Habe mittlerweile auch keinen Ansatz mehr.

Vielleicht eine einfache Frage dazu: Im Beispiel oben verwende ich:

10 = TEXT
10.data = GPvar:tx_ttnews|backPid

Die Angabe 'TEXT' gibt mir das Ausgelesene ja sofort aus. Was müsste ich denn verwenden, damit das stattdessen zwischengespeichert und abrufbereit gehalten wird? Habe auch schon 'COA' probiert... ging ebenfalls nicht. Ich denke, am Ende müsste ich dann sowas machen:

temp.foo = KEINE_AHNUNG
temp.foo.data = GPvar:tx_ttnews|backPid
MENU = HMENU
MENU.alwaysActivePIDlist < temp.foo

Oder wie in Constants:

temp.foo = KEINE_AHNUNG
temp.foo.data = GPvar:tx_ttnews|backPid
MENU = HMENU
MENU.alwaysActivePIDlist = {$temp.foo}

Was müsste anstatt KEINE_AHNUNG stehen?

Kilkenny ·

Hallo droptix,
ich habe diesen Thread mal überflogen. Es geht doch darum, dass das Menü sich nicht verändern soll, wenn man auf die Single Ansicht geht. Ich könnte dir da einen komplett anderen Lösungsweg vorschlagen, den ich hier im Forum gefunden habe. Es gibt nämlich die Möglichkeit, die Listenansicht wie auch die Single Ansicht auf ein und derselben Seite anzeigen zu lassen, wodurch sich dein aktiver Menüpunkt nicht verändert:

LIST and SINGLE at the same page
With a small TypoScript condition it's possible to show the news SINGLE view at the same page where the LIST is. This has some advantages for realUrl links:

Insert this to the setup field:

      # clear the code field
      plugin.tt_news.code >
      plugin.tt_news.code = LIST

      # prevent indexing of the LIST view
      config.index_enable = 0

      [globalVar = GP:tx_ttnews|tt_news > 0]

        # set code to SINGLE if the GETvar tx_ttnews[tt_news] exists
        plugin.tt_news.code = SINGLE

        # enable indexing of the SINGLE view
        config.index_enable = 1

      [global]

      # clear main content in page object
      page.10.subparts.content >

      # load tt_news as content to the page object
      page.10.subparts.content < plugin.tt_news

Gefunden in folgendem Beitrag:
#37112

Hoffe das hilft

droptix ·

Hallo Kilkenny,

leider geht das nicht... das kommt halt immer drauf an, wie man 'tt_news' einsetzt. Ich verwende es als Seiteninhalt (Plugin -> News) und nicht als TS-geschriebenen Inhalt.

Das Grundproblem:

Ich habe ein Menü, bei denen einige Menüpunkte Seiten mit der News-LIST-Ansicht sind, in etwa so:

• root
— Startseite
— Sport*
— Politik*
— Wirtschaft*
— Impressum

*) Diese Punkte haben nix weiter drin als ein Content-Element vom Typ Plugin/News mit dem Code: LIST. Jede Seite zeigt mit ihrer LIST-Ansicht nur News aus bestimmten Kategorien an.

Dazu gibt's einen SysFolder, in dem alle News und die Kategorien stecken. Weiterhin gibt's eine Seite vom Typ 'Nicht im Menü' mit der SINGLE-Ansicht. Die steckt bei mir ebenfalls im SysFolder (was egal ist) und deren 'pid' ist in den Template-Constants angegeben: plugin.tt_news.singlePid = 10. Im Template-Setup wird die SINGLE-Ansicht einmalig definiert, da für alle News dieselbe Ansicht gelten soll (soll überall gleich aussehen): plugin.tt_news.singlePid = {$plugin.tt_news.singlePid}.

Wenn ich nun aus dem Menü den Punkt 'Sport' auswähle, werden mir die News aus der News-Kategorie 'Sport' angezeigt (wird über die LIST-Ansicht gefiltert). Beim Anklicken einer News springt TYPO3 zur SINGLE-Seite mit der pid = 10, die keine Unterseite von 'Sport' ist. Damit verliert das Menü seinen Fokus von 'Sport'.

Das Menü würde nur korrekt arbeiten, wenn die Seite mit der SINGLE-Ansicht eine Unterseite von 'Sport' wäre. Damit das aber für alle Menüpunkte klappt, müsste ich die SINGLE-Ansicht unter jede Seite des Menüs kopieren und der LIST-Ansicht mitteilen, dass nicht die im Template definierte singlePid verwendet werden soll. Dadurch wäre die SINGLE-Ansicht mehrfach vorhanden. Wenn man da mal was ändern will, muss man das in jeder Seite machen... das ist nur eine Fehlerquelle mehr und der Seitenbaum wird unübersichtlicher.

Wenn (Chef-)Redakteure dann noch in der Lage sein sollen, neue Menüpunkte anzulegen, müssten Sie auf diese Details achten, was ich denen weder zutraue noch zumuten möchte.

——————————

Außerdem: Die Idee mit 'alwaysActivePIDlist' funktioniert, wenn es dynamisch geschieht. Es ist doch nur eine winzige Hürde, den Wert der 'backPid' dort hinein zu "kopieren", oder? Hat dazu niemand die Lösung? TypoScript wird das doch sicher können 😢

steffenk ·

ich meinte eigentlich das
- Detail (versteckt im Menu, PID 12)
- Sport
-- Mount of 12
- Wirtschaft
-- Mount of 12
- TYPO3
-- Mount of 12

annett ·

mh ok.

habe noch was, wenn man das news plugin einbindet,
dann kann man immer eine Detailseite zuweisen die für die Anzeige genutzt wird.

Jetzt blende ich aber in diesem Modul rekursiv verschiedene News aus verschiedenen Verzeichnissen ein und hätte gern, das es je nachdem in welchem Verzeichnis sich die News befindet die passende Detailseite verwendet wird.

Geht sowas?
Oder ist das vielleicht nur mittels Kategorien lösbar?

Danke.

VG Annett

annett ·

hab eben gefunden das es per Kategorie geht.
plugin.tt_news.useSPidFromCategory = 1

Aber gibt es vielleicht noch einen Weg ohne Kategorien, evtl. per TS die pid's statisch zuweisen. Weiß das ist nicht unbedingt
schön aber dem Kunden jetzt die Umstellung auf Kategorien zuzumuten finde ich nicht gut.
Ausserdem habe ich in Erinnerung das das nicht ganz reibungslos lief bei meinen anfänglichen Tests (Typo3 4.2/ tt_news 2.5.0 )

Was meint Ihr?

Grüße
Annett