[TYPO3-german] PHP/Extension - programmiertechnische Ratschläge gesucht
DirkHo
dirk_studivz at web.de
Tue Sep 1 08:57:40 CEST 2015
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}">†</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
>
> bernd
More information about the TYPO3-german
mailing list