Von dem Firmenverzeichnis lasse ich mir meine Firmen alphabetisch ausgeben.
Dazu benutze ich ein simples Template was mir nur den Firmennamen mit Link ausgibt:
{CompanyDirectory summarytemplate="alpha"}
Das ergibt dann sowas:
Allround Vermietung
Autowerkstatt Heinrich
Backstube Müller
Bodenbeläge Konrad
Einrichtungshaus Meier
Nun möchte ich aber, dass der alphabetische Anfangsbuchstabe vorweg gestellt wird.
Also in etwa so:
A
Allround Vermietung
Autowerkstatt Heinrich
B
Backstube Müller
Bodenbeläge Konrad
E
Einrichtungshaus Meier
Und das ganze soll in einer Range von A-L und von M-Z angezeigt werden (also zwei mal das Modul aufrufen).
Das müsste doch irgendwie mit Smarty gehen oder?
[gelöst] Modulausgabe alphabetisch sortieren?
[gelöst] Modulausgabe alphabetisch sortieren?
Last edited by nicmare on Tue May 25, 2010 6:42 pm, edited 1 time in total.
Re: Modulausgabe alphabetisch sortieren?
Im Grunde würde es ja reichen nur Firmen mit dem Anfangsbuchstaben A oder B (usw) auszugeben. Dann würde ich das Modul 26 mal aufrufen und vorweg statisch den Anfangsbuchstaben eingeben.
Re: Modulausgabe alphabetisch sortieren?
Habe das jetzt so gemacht:
Ist allerdings noch nicht ganz das was ich wollte. Es wird zwar der Anfangsbuchstabe vorweg geschrieben, jedoch wird bspw zwischen "g" und "G" unterschieden.
Code: Select all
{assign var=buchstabe value=null}
{foreach from=$items item=entry}
{if $entry->company_name[0] != $buchstabe}
{assign var=buchstabe value=$entry->company_name[0]}
<b>{$buchstabe}</b><br />
{/if}
<a href="{$entry->detail_url}">{$entry->company_name}</a><br />
{/foreach}
Last edited by nicmare on Tue May 25, 2010 7:18 pm, edited 1 time in total.
Re: Modulausgabe alphabetisch sortieren?
Versuchs mal mit Smarty Modifikatoren:
Code: Select all
{assign var=buchstabe value=null}
{foreach from=$items name=kunden item=entry}
{if $entry->company_name[0]|strtolower != $buchstabe|strtolower}
{assign var=buchstabe value=$entry->company_name[0]|strtolower}
<b>{$buchstabe|upper}</b><br />
{/if}
<a href="{$entry->detail_url}">{$entry->company_name}</a><br />
{/foreach}
Re: Modulausgabe alphabetisch sortieren?
ah mist, probiere schon die ganze zeit mit den modifikatoren aber in der kombination hatte ich es noch nicht und es funzt
danke!
aber eine sache ist bedenklich.
bei firmen jenseits von A-Z (also solche wie 123... oder irgendwas anderes mit zahlen) würden dann immer ne eigene kategorie bekommen. besser wäre es, die alle unter einer einzuordnen. also zB 0-9 oder sowas. wenns keine andere lösung gibt, werde ich es aber erstmal so machen müssen
und zu meiner zweiten frage ausm thread: wie kann ich das bis M kürzen bzw ab M starten?

aber eine sache ist bedenklich.
bei firmen jenseits von A-Z (also solche wie 123... oder irgendwas anderes mit zahlen) würden dann immer ne eigene kategorie bekommen. besser wäre es, die alle unter einer einzuordnen. also zB 0-9 oder sowas. wenns keine andere lösung gibt, werde ich es aber erstmal so machen müssen
und zu meiner zweiten frage ausm thread: wie kann ich das bis M kürzen bzw ab M starten?
Last edited by nicmare on Tue May 25, 2010 4:13 pm, edited 1 time in total.
Re: Modulausgabe alphabetisch sortieren?
ich mein ich könnte jetzt jeden buchstaben einzelnd abfragen:
{if $entry->company_name[0] != "M"}
Aber das käme mir etwas "stümperhaft" vor
{if $entry->company_name[0] != "M"}
Aber das käme mir etwas "stümperhaft" vor

Re: Modulausgabe alphabetisch sortieren?
Via PHP wäre es genauso "blöd".
Da es nunmal keine Möglichkeit gibt, dem Modul zu sagen, nur Einträge bis einschließich M aus der DB auszulesen, musst Du nunmal alle Einträge auslesen lassen. Und um bestimmte Einträge herauszufiltern, musst Du leider nunmal alle Einträge durchlaufen.
Da spielt es eigentlich keine Rolle, ob Du das via PHP oder Template machst.
Das Prinzip mit der Foreach-Schleife bleibt bei beiden das gleiche.
Eleganter wäre vielleicht ein Plugin dem Du die Einträge als Parameter übergibst.
Da hat Du mehr Möglichkeiten als im Template.
Und anschließend das Ergebnis einfach wieder als Template-Variable dem Template zuweisen.
Aber ich sehe da jetzt leider keine andere Möglichkeit.
Am besten wäre es natürlich, wenn man dem Modul sagen könnte "bitte nur Einträge, die mit [A-M] beginnen auslesen".
Aber dazu bräuchte man einen extra Parameter und eine spezielle Datenbankabfrage.
Und das Modul zu hacken, ist bestimmt nicht in Deinem Sinn.
Ich überlege gerade ob man die Ausgabe in Deinem Fall nicht besser komplett über ein eigenes Plugin realisieren sollte.
Schon aus Performance Gründen.
Dann hat man auch weniger Arbeit beim Upgrade.
Da es nunmal keine Möglichkeit gibt, dem Modul zu sagen, nur Einträge bis einschließich M aus der DB auszulesen, musst Du nunmal alle Einträge auslesen lassen. Und um bestimmte Einträge herauszufiltern, musst Du leider nunmal alle Einträge durchlaufen.
Da spielt es eigentlich keine Rolle, ob Du das via PHP oder Template machst.
Das Prinzip mit der Foreach-Schleife bleibt bei beiden das gleiche.
Eleganter wäre vielleicht ein Plugin dem Du die Einträge als Parameter übergibst.
Da hat Du mehr Möglichkeiten als im Template.
Und anschließend das Ergebnis einfach wieder als Template-Variable dem Template zuweisen.
Aber ich sehe da jetzt leider keine andere Möglichkeit.
Am besten wäre es natürlich, wenn man dem Modul sagen könnte "bitte nur Einträge, die mit [A-M] beginnen auslesen".
Aber dazu bräuchte man einen extra Parameter und eine spezielle Datenbankabfrage.
Und das Modul zu hacken, ist bestimmt nicht in Deinem Sinn.
Ich überlege gerade ob man die Ausgabe in Deinem Fall nicht besser komplett über ein eigenes Plugin realisieren sollte.
Schon aus Performance Gründen.
Dann hat man auch weniger Arbeit beim Upgrade.
Re: Modulausgabe alphabetisch sortieren?
Nene, mit den paar if abfragen geht das schon.
Also so siehts jetzt aus:
Also so siehts jetzt aus:
Code: Select all
{assign var=buchstabe value=null}
{foreach from=$items item=entry}
{if ($entry->company_name[0] != "M") AND ($entry->company_name[0] != "O") AND ($entry->company_name[0] != "P") AND ($entry->company_name[0] != "Q") AND ($entry->company_name[0] != "R") AND ($entry->company_name[0] != "S") AND ($entry->company_name[0] != "T") AND ($entry->company_name[0] != "U") AND ($entry->company_name[0] != "V") AND ($entry->company_name[0] != "W") AND ($entry->company_name[0] != "X") AND ($entry->company_name[0] != "Y") AND ($entry->company_name[0] != "Z")}
{if $entry->company_name[0]|strtolower != $buchstabe|strtolower}
{assign var=buchstabe value=$entry->company_name[0]|strtolower}
<strong>{$buchstabe|upper}</strong><br />
{/if}
<a href="{$entry->detail_url}">{$entry->company_name}</a><br />
{/if}
{/foreach}
Re: [gelöst] Modulausgabe alphabetisch sortieren?
Hallo alle,
Ich hab die Code etwas geänderd in:
Hab jetzt oben auf der Liste eine Zeile von Buchstaben mit Anchor links: A B D J K L M R W Z
Gruss, Rolf
Ich hab die Code etwas geänderd in:
Code: Select all
...
...
{assign var=buchstabe value=null}
<p><b>Zur ersten Buchstaben: </b>
{foreach from=$items name=kunden item=entry}
{if $entry->company_name[0]|strtolower != $buchstabe|strtolower}
{assign var=buchstabe value=$entry->company_name[0]|strtolower}
<b><a href="{$page_alias}#{$buchstabe}">{$buchstabe|upper}</a></b>
{/if}
{/foreach}
</p>
{if isset($items)}
{foreach from=$items item=entry}
<a name="{$entry->company_name[0]|lower}"></a>
...
...
Gruss, Rolf
- + - + - + - + - + - + -
LATEST TUTORIAL AT CMS CAN BE SIMPLE:
Migrating Company Directory module to LISE
Migrating Company Directory module to LISE
- + - + - + - + - + - + -