[gelöst] Modulausgabe alphabetisch sortieren?

Hilfe zu Modulen und Tags
Post Reply
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

[gelöst] Modulausgabe alphabetisch sortieren?

Post by nicmare »

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?
Last edited by nicmare on Tue May 25, 2010 6:42 pm, edited 1 time in total.
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: Modulausgabe alphabetisch sortieren?

Post by nicmare »

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.
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: Modulausgabe alphabetisch sortieren?

Post by nicmare »

Habe das jetzt so gemacht:

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} 
Ist allerdings noch nicht ganz das was ich wollte. Es wird zwar der Anfangsbuchstabe vorweg geschrieben, jedoch wird bspw zwischen "g" und "G" unterschieden.
Last edited by nicmare on Tue May 25, 2010 7:18 pm, edited 1 time in total.
NaN

Re: Modulausgabe alphabetisch sortieren?

Post by NaN »

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}

nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: Modulausgabe alphabetisch sortieren?

Post by nicmare »

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?
Last edited by nicmare on Tue May 25, 2010 4:13 pm, edited 1 time in total.
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: Modulausgabe alphabetisch sortieren?

Post by nicmare »

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 ;-)
NaN

Re: Modulausgabe alphabetisch sortieren?

Post by NaN »

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.
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: Modulausgabe alphabetisch sortieren?

Post by nicmare »

Nene, mit den paar if abfragen geht das schon.
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} 
User avatar
Rolf
Power Poster
Power Poster
Posts: 7825
Joined: Wed Apr 23, 2008 7:53 am
Contact:

Re: [gelöst] Modulausgabe alphabetisch sortieren?

Post by Rolf »

Hallo alle,

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>
...
...
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
- + - + - + - + - + - + -
LATEST TUTORIAL AT CMS CAN BE SIMPLE:
Migrating Company Directory module to LISE
- + - + - + - + - + - + -
Image
Post Reply

Return to “Module und Tags”