Hallo Bernd und Dirk,

danke für die schnellen Reaktionen.

Im Grunde muss ich Euch beiden beipflichten. Das Beste wäre ein Feld "Vereine" und ein für das Kürzel ("SF" oder "Spvgg" etc) gewesen. Dann kann man nach dem Verein sortieren und das Kürzel davorsetzen.

Bei uns lief es aber von Anfang an umgekehrt, weil a) bei den Anforderungen was Wichtiges übersehen wurde und b) ein Feld für den Ort schon da war. So war das Modul fertig, bis jemand merkte, dass nicht nur Menschen, sondern auch Vereine den Ehrenteller bekommen können. Das Ganze gilt auch nur für den Teller und im Nachhinein was einzufügen - das direkt in der DB zu machen, wenn ich da drauf gekommen wäre...über die Modulerstellung hätte es das ganze Modul neu erstellt, weil neues Strukturelement (ich nenns mal so). Das war mir zu viel des Guten, weshalb ich unseren Programmierer fragte, ob sich das lösen lässt. Da er bereits einen ViewHelper für solche Aufgaben hatte, wurde diese Lösung bevorzugt.

Warum das jetzt nicht mehr funktioniert...man frage mich was Leichteres . Der Grund dürfte irgendwo zwischen UTF-8 (seltsamerweise stand die Tabelle auf Latin_Swedish) und den aktuellen PHP-Versionen liegen, was Anderes hat sich unterwegs nicht geändert.

Cu, Steffen

Am 01.09.2015 um 08:57 schrieb DirkHo:
Hallo Steffen,

das "im Nachgang" zu machen ist keine gute Idee. Passt das SQL-Statement
an, dass es vorab schon die Ausgaben sortiert.

Wenn ihr die Präfixe schon "richtig" vergebt, dann würde es schon
reichen, wenn du direkt das eine Feld sortierst, in dem alles steht.

Die bessere Alternative wäre es aber, wie der Vorredner schon sagte,
dafür x extra Felder in der DB anzulegen und anhand derer dann zu
sortieren.

Viele Grüße,

Dirk

Am 01.09.2015 um 08:33 schrieb bernd wilke:
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


_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an