[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}">&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


More information about the TYPO3-german mailing list