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

Steffen Liebig steffen.liebig at gmx.de
Wed Sep 2 19:29:06 CEST 2015


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
>



More information about the TYPO3-german mailing list