[TYPO3-german] PHP/Extension - programmiertechnische Ratschläge gesucht
Steffen Liebig
steffen.liebig at gmx.de
Mon Aug 31 21:22:10 CEST 2015
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.
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.
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}">†</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}">†</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}">†</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
More information about the TYPO3-german
mailing list