Zum Inhalt springen

Typolink auf Content Elemente?

Erstellt am 18. März 2010 · 4 Antworten · letzte Antwort am 22. März 2010

Tags: Frage

ChrL ·

Hi zusammen,

ich komme mir etwas doof vor:
- ich habe ein Tabellenfeld, in der eine kommaseparierte Liste von ids [ID] aus einer anderen Tabelle liegt
- die Namen TITEL dazu liegen in dieser anderen Tabelle
- die hole ich und will sie nun auf eine Einzelansicht verlinken
- der Link soll im Endeffekt so aussehen:

<a href="www.domain.de/index.php?id=123&tx_extension_pi1[ID]">TITEL</a>

Typolink macht aus den ids leider Page-IDs.
Wie gewöhne ich dem das ab?

Danke!

VG,
C.

ChrL ·

Hm, ich versteh's nicht so ganz.
Problem ist aber vllt. auch, daß ich die Daten via wfqbe beziehe:

Dies funktioniert genau nicht, weil die [ID] ja für die Page-ID gehalten wird:

plugin.tx_wfqbe_pi1.customProcess.5 {
  2 =  TEXT
  2.value = ###WFQBE_FIELD_2###
  2.split {
    token = ,
    cObjNum = 1
    wrap = | <br />
    1.typolink.parameter.current = 1
  }

Die Titel liegen einfach in ###WFQBE_FIELD_8###, quasi.

Ist der linkhandler da immer noch das Richtige?
Ich hab's jedenfalls nicht zum Laufen bekommen...

Alternative wäre ja, mittels der [ID] und einem Content-Objekt auf die Inhalte der Tabelle zuzugreifen und dann den Titel als typolink.parameter zu nutzen... oder sehe ich das falsch?

ChrL ·

Hallo zusammen,

nach einem eher quälenden Wochenende habe ich zumindest einen kleinen Fehler eliminiert:
ich hatte den CEs nicht erlaubt auf Seiten eingebunden zu werden, was sich beim Experimentieren mit verschiedenen Funktionen als fatal herausgestellt hat...

Weiter komme ich irgendwie nicht. Eigentlich dachte ich, dies müßte gehen:

plugin.tx_wfqbe_pi1.customProcess.5 {
  2 = TEXT
  2.value = ###WFQBE_FIELD_2###
  2.split {
    token = , 
    cObjNum = 1
    1.current = 1
    1.typolink.parameter = 217
    1.typolink.title {
      cObject = RECORDS
      cObject {
        tables = tx_extension
        source < 1.current
        conf.tx_extension = TEXT
        conf.tx_extension.field = title
        }
      }
    1.wrap = | <br />
    }
  }

Das bringt aber leider nur dies Ergebnis:

<a href="www.domain.de/index.php?id=123">123</a><br />

Ich hätte aber gerne:

<a href="www.domain.de/index.php?id=999&tx_wfqbe_pi1[id]=123">Der-Titel-aus-Tabelle-tx_extension-mit-uid-123</a><br />

Kann hier jemand helfen?

Vielen (ich meine: VIELEN 🙂 ) Dank im Voraus!

ChrL ·

Geknackt 🙂

Lösung:

plugin.tx_wfqbe_pi1.customProcess.5 {
  2 = TEXT
  2.value = ###WFQBE_FIELD_2###
  2.split {
    token = , 
    cObjNum = 1
    1 {
      10 = CONTENT
      10 {
        table = tx_extension
        select {
          pidInList = 228
          andWhere.current = 1
          andWhere.wrap = uid=
          }
        renderObj = TEXT
        renderObj {
          field = title
          dataWrap = <a href="?id=217&tx_wfqbe_pi1[uid]={field:uid}">|</a><br />
          }
        }
      }        
    } 
}

Erklärung:

  • * Zeilen 1 bis 3 beziehen sich auf die Extension "wfqbe", die im Repository liegt und gut dokumentiert ist. Aus der Datenbank wird eine kommaseparierte Liste von UIDs einer eigenen Tabelle geholt.
    * Zeilen 4 bis 6 zerlegen die Liste in Einzelwerte, Kommas werden als Marker genutzt und dann gelöscht. Das Ganze funktioniert so ähnlich wie ein Array in PHP, die Einzelbestandteile können im Folgenden via CURRENT angesteuert werden.
    Etwas verwirrend ist sicher, daß CURRENT und VALUE unterschiedlich reagieren. Für das Ausprobieren der unterschiedlichen Möglichkeiten ist das etwas mühselig.
    Letztlich ist aber hier ein Weg gefunden, der auf die Unterschiede keine Rücksicht nimmt.
    * Ab Zeile 7 (bis 15) kommt der eigentliche Trick: hier wird ein CONTENT-Objekt definiert, mit dem, wie dokumentiert, eine Datenbankabfrage generiert werden kann. Dazu braucht es SELECT (für das SQL-Statement) sowie das Rendern ("Umsetzen") des Ergebnisses (Zeilen 16 bis 19).
    * Eine schöne Überraschung ist, daß WRAP für die WHERE-Klausel funktioniert. Ohne das wäre es nötig, den CURRENT-Wert zuvor mit dem Operator ":=" und "prependString(uid=)" vorzubereiten. Die hier gezeigt Variante ist kürzer, verständlicher und weniger tippfehleranfällig 🙂
    * Zeile 19 schließlich gibt das Ergebnis mit den jetzt zugänglichen richtigen Datenbankfeldern aus. Das dürfte ganz gut verständlich sein.
    * Nicht verwirren lassen von den hartkodierten Page-IDs, die sind je nach Fall natürlich Unsinn.

Vielleicht helfen Code und Prosa ja dem einen oder anderen Mitleser weiter 🙂