[TYPO3-german] PHP/Extension - programmiertechnische Ratschläge gesucht

bernd wilke t3ng at bernd-wilke.net
Tue Sep 1 08:33:00 CEST 2015


Am 31.08.15 um 21:22 schrieb Steffen Liebig:
> Hallo Leute,
>
> ich bräucht nen Rat zum Thema "Prüfen auf Vorhandensein bestimmter
> Zeichen und Zeichenfolgen in Strings". Bislang wird in unserer Extension
> ein preg_match verwendet, aber damit komme ich nur teilweise weiter.
> Dank eines Programmierers hats schon mal funktioniert - ich hab noch
> nicht rausgefunden, worans liegt und kann ihn nicht erreichen. Jetzt
> versuche mich notgedrungen selber ein bisschen daran. In einer
> Testinstallation natürlich :-).
>
> Also Folgendes:
>
> Wir haben so ne Art Preisträgerliste, in der die Leute anhand der Art
> ihres Preises gelistet sind. Neudeutsch nennt sich das "Ehrentafel".
>
> Das Problem ist jetzt, dass einer der Preise sowohl an Personen als auch
> an Vereine vergeben werden kann. Ebenso können Verstorbene diesen Preis
> erhalten haben. Der Haken ist jetzt die Sortierung. Es sollen von vorne
> nach hinten
>
> a) Verstorbene
> b) Lebende
> c) Vereine
>
> und jeweils alphabetisch aufsteigend gelistet werden. Dabei sollen
> Vereine im selben Atemzug mit dem vollen Namen erfasst (also "SK
> Breitenstein e.V." etc.), aber nach der Stadt sortiert werden.
>
> Wir verwenden dazu Sortierungszeichen, die im jeweiligen Eingabefeld vor
> den Text gestellt werden. Diese Zeichen werden dann per substr-Befehl
> ausgeblendet.


das klingt für mich nach einer ziemlich schlechten Idee. und sorgt 
sicher für eine Menge Probleme.
lieber ein eigenes Feld für zusätzliche Information.

ggfls auch noch ein weiteres Sorting Feld:

> Vereine nach hinten und alles alphabetisch nach Stadt geht schon, aber
> das Modul tut grad so, als ob es TROTZ DES FEHLENDEN SORTIERUNGSZEICHENS
> die Namen von Menschen auch mit dem Ausblendemechanismus bearbeiten
> soll. Als Folge schleichen sich Fehler ein: es wird das falsche Layout
> für den Kasten genommen, neben dem fehlenden verstorben-Kreuz wird statt
> des Vornamens der Ort genannt und jeweils ein Teil von Nachnamen und
> Stadt ausgeblendet.

das klingt nach einem ganz komplizierten Sortieralgorithmus.
wenn a dann sortiere nach A
wenn b dann nach B
wenn c dann C
um das in ein SQL zu packen brauchst du sicher eine Menge Verrenkungen
da würde ich ein eigenes 'Sortierfeld' einfügen, das dann in 
Abhängigkeit von a,b oder c mit A,B oder C gefüllt wird, danach kannst 
du dann das sorting mit
	ORDER by feld_fuer_abc, feld_fuer_ABC
erledigen. Die Ausgabe steuerst du über feld_fuer_abc (einfach das 
passende partial aufrufen:
<f:render partial="partialFuer{feld_fuer_abc}" arguments="{data:record}" />)
Das vermeidet dann eine Menge ineinander geschachtelte 'if'


> Anzusehen ist der Stand der Dinge auf
> http://www.pfaelzischer-schachbund.de/test/psb-service/ehrentafel/ehrenteller-des-psb.html.
>
>
> Ich poste mal den Code für die Geschichte:
>
>
> ---------------------------------------------------------------------------------
>
>
> Hier gehts mit dem Problem los (Ehrung Nr. 7 = Ehrenteller)
>
> ---------------------------------------------------------------------------------
>
>
> <f:if condition="{person.ort}">
> <f:then>
> <f:if condition="{ehrung.nr} == 7">
> <f:then>
> <f:if condition="preg_match('/^°$/u', '{person.name}')">
>
> ---------------------------------------------------------------------------------
>
>
> --> statt nur zu prüfen, ob das "°" in Namen enthalten ist (für die
> Vereine klappt das - die stehen ganz hinten), wird offenbar die
> Condition wie ein "wenn Name vorhanden, dann" verstanden. Im Grunde
> verständlich, aber das war vorher mit einem eigenen ViewHelper auch
> schon so und hat erst ne ganze Weile funktioniert. Seit Kurzem werden
> die Sortierungszeichen (Name: °, Ort: *) bei den Vereinen nur noch als
> Text verstanden. Die Datenbanktabellen auf UTF-8 zu setzen hat nicht
> geholfen.
> Dieses Verhalkten ist gerade nicht beabsichtigt - wenn das Zeichen am
> Beginn des Namens fehlt, soll bei <else> weitergemacht werden. So kann
> zwar gerne bei den Vereinen alles Notwendige gemacht werden, aber sie
> rücken ans Ende.
> --------------------------------------------------------------------------------
>
>
> <f:then>
> <tr bgcolor="F2F2F2"><td><b><tnu:eval code="substr('{person.ort}', 1)"
> /> <tnu:eval code="substr('{person.name}', 2)" /></b>
> ({person.jahr})</td></tr>
> <tr><td>Geehrt mit dem PSB Ehrenteller, anlässlich:<br
> />{person.text}</td></tr>
> </f:then>
>
> -------------------------------------------------------------------------------
>
> Gemäß obiger Erläuterung sollte diese <then>-Schleife vorerst übergangen
> werden, wird sie aber nicht !!
> Im Ergebnis klappt die Zuordnung der als "verstorben" eingetragenen
> Personen im nächsten Block nicht mehr. Sie scheinen zwar zuerst
> angezeigt zu werden, aber ohne Kreuz, weil das falsche Layout verwendet
> wird. Zusätzlich wird der Umlaut bei Herrn Bärwinkel verschludert,
> während der verstorbene Dr. Müller korrekt behanelt wird (noch son Hammer).
> -------------------------------------------------------------------------------
>
>
> <f:else>
> <tr bgcolor="F2F2F2"><td><b>{person.name} {person.vorname}, {person.ort}
> <f:if condition="{person.verstorben}">&dagger;</f:if></b>
> ({person.jahr})</td></tr>
> <tr><td>Geehrt mit dem PSB Ehrenteller, anlässlich:<br
> />{person.text}</td></tr>
> </f:else>
> </f:if>
> </f:then>
> <f:else>
> <tr bgcolor="F2F2F2"><td><b>{person.name} {person.vorname} <f:if
> condition="{person.verstorben}">&dagger;</f:if></b>
> ({person.ort})</td></tr>
> </f:else>
> </f:if>
> </f:then>
> <f:else>
> <tr bgcolor="F2F2F2"><td><b>{person.name} {person.vorname} <f:if
> condition="{person.verstorben}">&dagger;</f:if></b></td></tr>
> <tr><td>{person.jahr} {person.text}</td></tr>
> </f:else>
> </f:if>
> </table>
> </f:for>
>
>
>
> </f:widget.paginate>
>
> Kann sich da jemand von Euch einen Reim drauf machen ?
>
> Ideal wäre noch in einer anderen Liste absteigend nach Jahren zu
> sortieren, aber da das einen zusätzlichen ViewHelper benötigen könnte,
> lassen wir das erstmal. Vielleicht lässt sich auch hier was machen und
> das dann übertragen.
>
> Besten Dank für alle Ideen und Anregungen
>
>
> Steffen

bernd
-- 
http://www.pi-phi.de/cheatsheet.html


More information about the TYPO3-german mailing list