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 ·

Ich möchte gern die aktuelle Seiten-ID mit TS setzen, also verändern. Auslesen geht, aber zum Schreiben hab ich nichts gefunden.

Da gibt's doch bestimmt so eine kryptische ultralange TS-Zeile...

Unbekannter Benutzer ·

nein gibts nicht und wäre auch ein ziemlicher Unfug weil die Seiten-ID ist unique wenn Du die selbst setzt wäre die Gefahr dass Du ID's doppelt vergibst. Schon mal in die Datenbank geguckt?

Aber sag doch mal was die fachliche Intention Deiner Frage ist.

Viele Grüße
Niki

toyde ·
droptix schrieb

Ich möchte gern die aktuelle Seiten-ID mit TS setzen, also verändern. Auslesen geht, aber zum Schreiben hab ich nichts gefunden.

Hab mich auch schon gefragt, was da die Absicht dahinter sein soll. Wenn aktuelle Seiten neue ID's bekommen sollen, wie sieht's da wohl in den Tabellen aus, wenn einige User auf der Website rumklicken #paralyzed# .
Ausserdem, wie genannt schlägt's der Uniqueness und allfälligen fixen ID's im TypoScript auf den Magen.

droptix ·

Die fachliche Intention ist ganz simpel. Es geht um ein typisches Problem, dass bei der Verwendung mit 'tt_news' auftritt. Beim Anklicken einer News (Einzelansicht) verliert das Menü seinen Fokus. Da niemand auf meine langen Threads antwortete, wollte ich das hier ganz direkt anfragen. Schaut hier:

Das Problem
Meine Idee

Das ist mein Ansatz. Wenn die 'tt_news' Extension das nicht auf die Reihe kriegt... muss ich das eben mit Gewalt durchsetzen #paralyzed# Notfalls binde ich an den besagten Stellen eben PHP-Funktionen ein, die das für mich erledigen.

Oder hat jemand eine bessere Idee?

toyde ·

Es geht also um dem Zustand der Navigation, Abhängig von News-Einzelansichten? Gibt's da nen Link zum Frontend, oder einen Screenshot? Bei Bedarf auch per privater Nachricht an mich.
Gibt sicher nen simplen Lösungsansatz. ID's faken macht in meinen Augen keinen Sinn - vielleicht bin ich ja bald schlauer.

Viele Grüsse

edit:
Ausserdem wäre die Haltung deiner Fragen in 1 Thread sehr viel übersichtlicher #paralyzed# . Spätere User werden es Dir danken.

droptix ·

@toyde: Hab dir einen Link per pm geschickt...

Ich finde es sehr viel nerviger, wenn ich einen Thread immer wieder anstoßen muss, damit Leute ihn vielleicht lesen. Der Hintergrund ist leider nunmal wichtig, aber kaum jemand hat Lust soviel Text zu lesen. Wenn einfach mal "Nein, geht nicht" gekommen wäre, dann wäre das wenigstens eine Antwort gewesen... 🙂 Vielleicht sollte ich die Threads dann immer editieren... kann ich in Zukunft machen

toyde ·
droptix schrieb

@toyde: Hab dir einen Link per pm geschickt...

Gesehen. PM beantwortet.

Allfälligen Frust bei "Nichtantworten" kann ich verstehen. Hab aber Nachsicht mit den Benutzern, falls nicht auf alle Threads eingegangen wird. Das wäre ein Fulltime-Job, egal ob Goodwill oder bezahlt.

droptix ·

Okay, habe "ACT" als Menüzustand mit aufgenommen. Sieht jetzt so aus, geht aber immernoch nicht (Cache natürlich gelöscht):

MENU = HMENU
    MENU {
    wrap = <div id="menu">|</div>
    1 = TMENU
    1 {
        NO = 1
        CUR = 1
        CUR {
            ATagParams = class="sel"
        }
        ACT = 1
        ACT {
            ATagParams = class="sel"
        }
        ACTIFSUB = 1
        ACTIFSUB {
            ATagParams = class="sel"
        }
    }
    2 < .1
    2 {
        wrap = <div id="submenu">|</div>
    }
    3 < .1
    3 {
        wrap = <div id="submenu2">|</div>
    }
}

Man muss dazu sagen, dass die Einzelansicht der News natürlich keine Unterseite des Menüpunktes ist, sonst ginge das ja. Die Einzelansicht liegt in einem SysFolder. Ich kann ja nicht unter jedem Menüpunkt eine separate Einzelansicht machen. Das ist ja das Problem...

toyde ·

Wie das News-Plugin Sinn macht:

Seitenbaum
Root
+ Hauptpunkt 1
- News List
- News Single

+ Hauptpunkt 2
- Unterpunkt 1
- Unterpunkt 2
+ Hauptpunkt n

Die kursiven Seiten stellt man bspw. auf "not in menu".
Wenn Deine News alle in einem Sysfolder oder einer Seite unterhalb Hauptpunkt n liegen, dann ist es verständlich, dass der Benutzer sich "nicht mehr in der Navigation" im Frontend befindet - es wird keine der oberen Seiten gehighlightet.
Positiver Nebeneffekt: wenn man mit News-Kategorien je Seite arbeiten will, ist das mit dieser Methode wohl am einfachsten.

edit:
Schmeiss in obigem Code alles mit CUR ganz raus. ACT reicht aus.

Unbekannter Benutzer ·

Die kursiven Seiten stellt man bspw. auf "not in menu".

... oder schließt diese bei Seitentyp normal oder erweitert im Menüskript mittels excludeUidList aus, damit die Seiten noch (falls gewünscht) in der breadcrumb auftauchen und alle darüber hängenden ACT Zustände beibehalten bleiben.

Viele Grüße
Niki

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 😢