[TYPO3-german] Re: direct_mail: Benutzergruppen in Empfängerliste

Stefan Frömken firma at sfroemken.de
Fri Nov 12 12:05:16 CET 2010


Ich hab das mal als "Unschönheit" in den Bugtracker gestellt:

http://bugs.typo3.org/view.php?id=16363

Mal schaun, was dabei rauskommt.

Ich gehe sehr davon aus, dass Deine Lösungen funktionieren, aber ich 
denke Du wirst mir Recht geben, dass das alles nur eine Umgehung des 
eigentlichen Problems ist.

Ich hab auch gleich mit angegeben, dass diese Datei keinen einzigen Hook 
beinhaltet, um die Funktionalität zu erweitern. Das würde uns die Arbeit 
echt erleichtern.

Stefan

Am 12.11.2010 11:44, schrieb Stephan Schuler:
> SELECT
>          u.*,
>          g.uid AS singleUsergroup
> FROM
>          fe_users u
>          LEFT JOIN
>                  fe_groups g
>          ON
>                  FIND_IN_SET(g.uid, u.usergroup)
> ^^ Versuch es mal hiermit. Auch das bläst natürlich deine Ergebnismenge auf, es funktioniert aber trotzdem.
> Wenn du am Query Generator rumbastelst wäre die zusätzliche Funktion "FIND_IN_SET" sicherlich der schönste Weg. Dann kannst du dir den von mir vorgeschlagenen VIEW natürlich sparen.
>
>
> Mein Vorschlag mit "Type: From pages" war anders gemeint.
>
> Leg einen einzelnen Sysfolder an in dem alle fe_users liegen.
> Leg weiterhin pro fe_group einen Sysfolder an in dem nur die Gruppe (also der Gruppendatensatz) liegt, nicht aber die zugehörigen fe_users. Die bleibem im ersten Sysfolder.
> fe_user_register bekommt als Storage-PID nun die eine in der alle fe_users liegen. Dass die fe_groups in ganz anderen Sysfoldern liegen dürfte ja egal sein.
>
> Wenn du nun eine Empfängerliste "From Pages" anlegst, gibst du den Sysfolder an in den der fe_groups-Record liegt. Diese Empfängerliste sollte nun die passenden fe_users beinhalten, auch wenn die gar nichts mit dem gewählten Sysfolder zu tun haben.
>
>
> Gruß,
>
>
>
>
> Stephan Schuler
> Web-Entwickler
>
> Telefon: +49 (911) 539909 - 0
> E-Mail: Stephan.Schuler at netlogix.de
> Internet: http://media.netlogix.de
> -----Ursprüngliche Nachricht-----
>
> Von: typo3-german-bounces at lists.typo3.org [mailto:typo3-german-bounces at lists.typo3.org] Im Auftrag von Stefan Frömken
> Gesendet: Freitag, 12. November 2010 11:22
> An: typo3-german at lists.typo3.org
> Betreff: [TYPO3-german] Re: direct_mail: Benutzergruppen in Empfängerliste
>
> Au...wahnsinn hast Du viel geschrieben. Finger noch OK? :-) Danke Dir
>
> Antworten siehe im Text
>
> Stefan
>
> Am 12.11.2010 10:58, schrieb Stephan Schuler:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA256
>>
>> Hallo Stefan.
>>
>>
>> Du sprichst sicherlich von Special-Querys, nehm ich an.
>
> Ganz genau
>
>> Dein konkretes Problem hat eine recht abenteuerliche Lösung. Die will ich kurz aufzählen, halte das aber für eine dermaßen abartige Variante dass ich das selbst nicht verwenden würde:
>> WHERE (
>>           usergroup LIKE '2,%'
>>           OR
>>           usergroup LIKE ',2'
>>           OR
>>           usergroup LIKE '%,2,%'
>>           OR
>>           usergroup = 2
>> )
>
> Diese Art "Konstrukt" kenne ich zwar, aber es lässt sich nicht mit dem
> queryGenerator abbilden, da dieser bei "contains" meinen Text immer in
> %|% wrapt. Wenn ich also wie in Deinem Beispiel sage: "2,%", dann mach
> der queryGenerator daraus: "%2,%%"
>
>> Durch die Pfeil-Einrückbuttons im Spqcial-Query-Editor von Direct Mail kriegst du das auch so hingebaut, dass dieses Klammerkonstrukt als Ganzes mit anderen Bedingungen Und-Verknüpft werden kann. Schön ist aber auch anders. Das wohl größte Problem das ich bei Special-Querys habe ist, dass der Queryanteil nicht Teil der vom Benutzer als beschreibbaren angegebenen TCA-Definition ist. Wenn du den Empfängergruppen-Record im TCEmain-Formular öffnest fehlt eben der Block in dem der Query hinterlegt ist. Das führt dazu, dass du die Empfängergruppe zwar kopieren kannst, dass bei der Kopie allerdings die Special-Querys nicht übertragen werden. Wenn ich 15 solcher Gruppen anlegen muss würde ich wahnsinnig werden bei dem Versuch ein solches Monster per Backend-Click-Orgie entsprechend häufig zu erzeugen.
>
> Das mit den Klammerkonstrukten habe ich verstanden...klappt ganz gut.
> Das mit dem Kopieren soll mir ja noch egal sein, weil ich das nur einmal
> machen muss und dann "hoffentlich" nie wieder.
>
>>
>> Sofern du keinen Special-Query brauchst kannst du die Recipient list einfach als "Type: From pages" definieren, im "Starting Point" den Sysfolder wählen in dem deine Gruppe liegt und unten die Checkbox "Website User Group" auswählen. Nachdem fe_users und fe_user_groups nicht zwingend im gleichen Sysfolder liegen, kannst du für jede Gruppe einen eigenen Sysfolder hernehmen und den dann als Startingpoint angeben. Dadurch bekommst du unterschiedliche Recipient lists für unterschiedliche fe_user_groups.
>
> Heißt aber auch ich muss zig Bedingungen in die sr_feuser_register
> reinwurschteln, damit er mit den User auch ja in den richtigen Ordner
> ablegt. Weiterhin sollen Redakteure entscheiden können, ob ein User nun
> Berechtigung X oder Y hat. Die werden begeistert sein, die User zwischen
> den Sysfoldern hin und her zu verschieben.
>
>>
>> Wenn du einen Special-Query benötigst klappt das natürlich nicht mehr.
>>
>>
>> Was ich da für gewöhnlich treibe ist zwar auch nicht die schönste Lösung, bietet mir aber den größten Freiraum was zusätzliche Verarbeitung der Benutzerdatensätze betrifft, ist mit ein wenig Geschick auch schnell getippt und lässt sich recht leicht auf diverse andere Projekte portieren:
>>
>> Zunächst hängt es davon ab ob du tt_address odre fe_user verwendest.
>
> fe_users
>
>> Fe_users hat die Gruppen des Benutzers durch Kommas getrennt im "usergroup"-Attribut des Users. Ich gehe deshalb davon aus dass du mit fe_users hantierst.
>
> Jup
>
>> Tt_address verwendet MM-Beziehungen. Die eigenen sich in meinen Augen grundsätzlich besser für solche Anforderungen weil die SQL-Querys dadurch einfacher werden -- nicht zuletzt auch was deren Anspruch an die Datenbankleistung betrifft.
>
> Die User erhalten nicht nur einen Newsletter, sie müssen sich auch and
> er Webseite anmelden können...deshalb wird das ein bissl schwierig mit
> tt_address
>
>>
>> Ich lege (eigentlich immer) einen View auf tt_address der mir die gewünschten Parameter abbildet. Im einfachsten Fall:
>> SELECT t.*, g.uid AS tt_address_group
>> FROM tt_address AS t LEFT JOIN tt_address_group_mm AS mm ON t.uid = mm.uid_local LEFT JOIN tt_address_group AS g ON mm.uid_foreign = g.uid
>>
>> Der Query enthält anschließend jeden tt_address-Record für jede Gruppe in der er ist exakt einmal. Dadurch vervielfacht sich zwar die Datenmenge und übers TYPO3-Backend wird die Sache auch nur noch bedingt auswertbar (weil die einzelnen Inkarnationen der unterschiedlichen Benutzer natürlich die gleiche UID haben) aber man kann das dann leicht über den Special Query ansprechen.
>>
>> Zu diesem View lege ich mittels kleiner eigener Extension einen TCA-Eintrag an: Ich kopiere den tt_address-TCA-Eintrag ($TCA['nxttaddressview'] = $TCA['tt_address']) und erweitere meinen TCA-Eintrag dann um die Spalten die mein View ergänzt.
>>
>> Das Konstrukt ist zwar zunächst aufwendig, allerdings hab ich alle Informationen anschließend schön in der DB abgebildet. Dazu kommt praktisch bei jedem Projekt noch die Anforderung, die Anrede "Sehr geehrter Herr XYZ," bzw. "Sehr geehrte Frau XYZ," zu wählen sofern das Geschlecht definiert ist und der Nachname eingetragen und "Sehr geehrte Damen und Herren," wenn wahlweise kein Geschlecht angegeben ist oder kein Nachname dran ist. Das bekommt man ohne View-Query schon überhaupt nicht hin.
>>
>
> Ich wurschtel mal ein bissl in der class.t3lib_querygenerator.php rum.
> Vielleicht nehmen die TYPO3ler unseren Featurewunsch ja noch für die 4.5
> auf.
>
>>
>> Gruß,
>>
>>
>> Stephan Schuler
>> Web-Entwickler
>>
>> Telefon: +49 (911) 539909 - 0
>> E-Mail: Stephan.Schuler at netlogix.de
>> Internet: http://media.netlogix.de
>>
>> - --
>> netlogix GmbH&   Co. KG
>> IT-Services | IT-Training | Media
>> Andernacher Straße 53 | 90411 Nürnberg
>> Telefon: +49 (911) 539909 - 0 | Fax: +49 (911) 539909 - 99
>> E-Mail: mailto:info at netlogix.de | Internet: http://www.netlogix.de/
>>
>> netlogix GmbH&   Co. KG ist eingetragen am Amtsgericht Nürnberg (HRA 13338)
>> Persönlich haftende Gesellschafterin: netlogix Verwaltungs GmbH (HRB 20634)
>> Umsatzsteuer-Identifikationsnummer: DE 233472254
>> Geschäftsführer: Stefan Buchta, Matthias Schmidt
>>
>> - -----Ursprüngliche Nachricht-----
>>
>>
>> Von: typo3-german-bounces at lists.typo3.org [mailto:typo3-german-bounces at lists.typo3.org] Im Auftrag von Stefan Frömken
>> Gesendet: Freitag, 12. November 2010 10:31
>> An: typo3-german at lists.typo3.org
>> Betreff: [TYPO3-german] direct_mail: Benutzergruppen in Empfängerliste
>>
>> Hallo zusammen,
>>
>> ich möchte eine Empfängerliste erstellen, die alle User beinhaltet, die
>> der Gruppe mit der UID 2 zugeordnet sind.
>>
>> Wenn ich aber sage:
>> WHERE usergroup = 2
>> dann findet er nicht die User, die den Gruppen 2,5,8 zugeordnet sind,
>> sondern nur die, die NUR diese eine Gruppe mit der UID 2 beinhalten.
>>
>> Sage ich:
>> WHERE usergroup LIKE '%2%'
>> dann findet er zusätzliche User, die nur den Gruppen 21,25,32 zugeordnet
>> sind
>>
>> Sage ich:
>> WHERE usergroup IN (2)
>> dann habe ich das gleiche Problem wie oben schon erwähnt.
>>
>> Wie macht ihr das?
>>
>> Stefan
>> _______________________________________________
>> TYPO3-german mailing list
>> TYPO3-german at lists.typo3.org
>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>>
>>
>> -----BEGIN PGP SIGNATURE-----
>> Version: PGP Universal 3.0.0 (Build 2881)
>> Charset: Windows-1252
>>
>> wpUDBQFM3Q/gpp0IwsibV8MBCC4sA/4+00KlUsCedECPB11Gd2b7V5GnPJ/PU8wp
>> oftRUgA22c8fhpUCxyz0N+q0QvNE35qF04Rzsk8+MQO9LVhI5REYWxeMAdw7h64C
>> jvUOF8C0CkLb2zRdaw/HH95RSVlog5EQHNXoM+kGGBxC2QrTtv9Av7Uo0krwLStY
>> HVoL6KZdxA==
>> =ACpD
>> -----END PGP SIGNATURE-----
>
> _______________________________________________
> TYPO3-german mailing list
> TYPO3-german at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>



More information about the TYPO3-german mailing list