[TYPO3-german] Daten einer Flexform eines ANDEREN Content-Elements lesen

Widmann, Manfred mpunktw at gmx.net
Sat Mar 1 10:52:08 CET 2008


Hi, du hast recht, danke für den Wink mit dem Zaunpfahl! Jetzt hätte ich mir 
vom BE-Admin die PID des Storage FOlders übergeben lassen und dazu recht 
mühsam die Seite ermittelt, auf der das Blog gerendert wird. Viel besser ist 
es aber, die PID der Blog-Seite als Parameter zu übernehmen und sich mit 
eine einzigen Zugriff die Storage-Folder-PID dazu zu suchen!

Danke, für den Hinweis!

Manfred


"bernd wilke" <x00nsji02 at sneakemail.com> schrieb im Newsbeitrag 
news:mailman.1.1204289718.30939.typo3-german at lists.netfielders.de...
> Widmann, Manfred Dipl.-Ing. schrieb am Fri, 29 Feb 2008 13:12:50 +0100:
>
>> Hi!
>>
>> Folgendes Problem:
>> Ich möchte in einem Plugin auf bestimmte Infos (in diesem Fall auf die
>> Angabe der StoragePIDs) zugreifen, die in einer Flexform eines anderen
>> Content-Elements gespeichert ist. Genauer: ich möchte jenes
>> Content-Element aus der tt_content selektieren, in dessen Flexform eine
>> bestimmte PID als StoragePID verwendet wird.
>
> das wird nicht so einfach sein (wenn überhaupt möglich).
> Dazu muss man sich mal anschauen wie die Flexform-felder abgespeichert
> werden und wie SQl Abfragen realisiert.
>
> normalerweise sehen abfragen in etwa so aus:
> SELECT * FROM tabelle WHERE feld="wert"
> oder noch
> SELECT * FROM tabelle WHERE feld LIKE "%wert%"
>
> damit werden die datensätze geholt, die im Feld 'feld' den Wert
> 'wert' (als Teilstring) enthalten.
>
> das ist einfach bei normalen Feldern, die genau einen Wert enthalten. bei
> den 'Array-Feldern' (Komma-separierte Liste) wird es schon komplizierter:
>
> suche Datensatz mit einer 5 in der Liste:
>
> SELECT * FROM tabelle WHERE feld LIKE "%5%"
> ist verkehrt! (liefert auch ergebnis wenn eine 15 eingetragen ist!)
>
> SELECT * FROM tabelle WHERE concat(',',concat(feld,',')) LIKE "%,5,%"
> ist richtig.
>
> flexforms sind eine Sammlung von (Eingabe-)feldern, die in einem
> (Datenbank-)Feld gespeichert sind. es ist als notwendig nicht nur den
> Wert, sondern auch den Wert an der richtigen Stelle herauszuholen.
> Performance ist dabei natürlich nicht mehr gegeben. Eine Suche über alle
> tt_content-Einträge eigentlich absoluter Wahnsinn, da für jeden Datensatz
> (und tt_content hat typischerweise sehr viele!) ein Haufen komplexer
> Stringoperationen für das flexformfeld gemacht werden müssen.
>
> Alle Felder in denen etwas gesucht werden soll müssen eigentlich als
> eigenständige Felder in der Tabelle sein. Idealerweise als indiziertes
> Feld wenn ein genauer Eintrag gesucht wird.
>
> Wenn du die BLOG-Extension selber schreibst empfehle ich dir das Feld mit
> der StoragePID nicht im Flexform unterzubringen. Dafür eignet sich z.b.
> das vorhandene Feld 'pages' ('startingpoint'), das zwar auch ein
> kommasepariertes Array ist, wo die Suche mit den beiden concats aber noch
> recht einfach ist und noch einfacher wird, wenn man definiert, dass nur
> ein Wert eingetragen werden darf.
>
> Wenn es nicht deine Extension ist und du ein add-on zu einer bestehenden
> Extension schreiben willst:
> wie wäre es, wenn du dir den Datensatz vom Admin/BE-User konfigurieren
> lässt?
> bau ein (Flexform(?)-)Feld, in dem ein tt_content-Datensatz referenziert
> wird und lass ihn eintragen (insert record from ...)
> Die Performance dürfte dann auch besser sein, weil nicht für jeden
> Seitenaufruf die gesamte tt_content durchsucht werden muss. (Eine
> (manuelle) Suche bei der Installation, statt ständige Suche bei jedem
> Seitenaufruf)
>
>> Hintergrund:
>> Ich schreibe einen Teaser für eine BLOG-Extension. Dort wird das
>> Frontend-Plugin über eine Flexform konfiguriert und einer dieser
>> Parameter ist die PID des General Storage in dem die Beiträge abgelegt
>> werden. Mein Teaser selektiert nun aus der BLOG-Tabelle alle jene
>> Einträge, die jünger als x Tage sind und liefert den Namen des Bloggers,
>> den Titel, einen Teil des Inhalts und sollte auch einen Link auf den
>> Beitrag liefern. Dazu muss ich aber im Teaser-Plugin jene PID finden,
>> die jenen Content enthält, in dessen Flexform die StoragePid vorkommt,
>> die ich als Parameter dem Teaser-Plugin mitgebe.
>>
>> Die Flexform ist im Content als XML gespeichert ... wie komme ich also
>> am leichtesten auf die PID? Ich meine select pid from tt_content where
>> pi_flexform like "%280%" ist ein wenig sehr fehleranfällig???! Aber wie
>> geht's besser?
>>
>> lg
>> Manfred
>
> Bernd
> -- 
> http://www.pi-phi.de/t3v4/cheatsheet.html 




More information about the TYPO3-german mailing list