4 spaltige Tabelle in Abhängigkeit der Zeilenanzahl…

Diskussionen zur Smarty-Template-Engine
Post Reply
User avatar
antiheld2000
Forum Members
Forum Members
Posts: 236
Joined: Thu Jan 31, 2008 9:23 am

4 spaltige Tabelle in Abhängigkeit der Zeilenanzahl…

Post by antiheld2000 »

Hi,

ich möchte eine 4-spaltige Tabelle einrichten, welche sich nach der Zeilenzahl der Inhalte richtet.  Das Problem ist, ich kann mich nicht an den items meiner foreach-Schleife orientieren, da ich hier noch vor jedem neuen Anfangsbuchstaben weitere Zeilen einfüge. Ich bekomme bei meiner Variante unterschiedlich lange Spalten. Hat jemand einen Tipp für mich, wie ich das gleichmäßiger lösen kann?

Code: Select all

{if isset($items)}
<table class="mega-layer-table"><tr><td valign="top" width="25%">
{assign var=zaehler value=0}
{foreach from=$items item=entry name=schleifling}
{assign var=umbruchwert value=$smarty.foreach.schleifling.total/3|ceil}
{assign var=firstletter value=$entry->company_name|substr:0:1|upper}
  {if $firstletter != $aktletter}{if $smarty.foreach.schleifling.first}{else}<br />{assign var=zaehler value=$zaehler+1}{/if}<strong class="firstletter">{$firstletter}</strong><br />{assign var=zaehler value=$zaehler+1}{assign var=aktletter value=$firstletter}{/if}<a href="{$entry->detail_url}">{$entry->company_name}</a><br />{assign var=zaehler value=$zaehler+1}
{if $zaehler >= $umbruchwert}{assign var=firstcol value=true}{/if}
{if $zaehler >= $umbruchwert*2}{assign var=secondcol value=true}{/if}
{if $zaehler >= $umbruchwert*3}{assign var=thirdcol value=true}{/if}
{if $firstcol == true && $firstcoldone != true}{assign var=firstcoldone value=true}</td><td valign="top" width="25%">{/if}
{if $secondcol == true && $secondcoldone != true}{assign var=secondcoldone value=true}</td><td valign="top" width="25%">{/if}
{if $thirdcol == true && $thirdcoldone != true}{assign var=thirdcoldone value=true}</td><td valign="top" width="25%">{/if}
{/foreach}
</td></tr></table>
{/if}
Dank und Gruß
anti
nhaack

Re: 4 spaltige Tabelle in Abhängigkeit der Zeilenanzahl…

Post by nhaack »

Irgendwie steige ich gerade nicht durch dein Smarty durch ;D. Kannst du mal das finale HTML eines Beispiel Tables posten? Und idealerweise ne vereinfachte Struktur der Daten die du ausgeben willst noch dazu.

Wenn du immer vier Spalten hast, kannst du ja vorher die maximale Länge deiner Spalten errechnen (man muss sich hierbei an der längsten Spalte orientieren). Ist eine Spalte kürzer, kannst du verbleibenden leeren Zellen einfügen.

{assign var=spalten_laenge value=$items|@count}
{assign var=spalten_laenge value=$spalten_laenge/4|ceil}

määp... lese gerade, dass du ja Zeilen einfügst und daher die Länge nicht vorher kennst (ich lass da oben trotzdem mal stehen).

Hatte auch einmal das Problem, eine Tabelle aufzubauen, bei der die eigentliche Größe erst mit Rendering der Seite fest stand. Vielleicht kommst du hier weiter, indem du einen Aufbau vorab simulierst... also nur die Schleifen etc ohne Ausgabe um die maximale Spaltenzahl zu ermitteln. Diesen Wert kannst du dann im eigentlichen Tabellen-Aufbau nutzen um ggf. Leerzellen hinzuzufügen.

Das geht natürlich ein wenig auf die Seiten-Performance. Musst mal gucken wie sich der Wert ohne Caching verändert.

Vielleicht helfen dir die Ideen.

Beste Grüße
Nils
antibart
Power Poster
Power Poster
Posts: 1155
Joined: Sun Aug 17, 2008 9:29 am

Re: 4 spaltige Tabelle in Abhängigkeit der Zeilenanzahl…

Post by antibart »

Eventuell wäre noch gut, zu sehen, was da am Ende bei rauskommen soll.

Vielleicht gibt es eine einfachere Lösung als das Tabellenkonstrukt.
User avatar
antiheld2000
Forum Members
Forum Members
Posts: 236
Joined: Thu Jan 31, 2008 9:23 am

Re: 4 spaltige Tabelle in Abhängigkeit der Zeilenanzahl…

Post by antiheld2000 »

Na, es soll eine Tabelle mit 4 Spalten rauskommen, welche gleichmässig mit Inhalte gefüllt ist. Hier ein Beispiel:

Code: Select all

<table>
	<tr>
		<td valign="top" width="25%"><strong class="firstletter">A</strong><br />
			<a href="1/">Arem</a><br />
			<a href="32/">Asulum</a><br />
			<a href="79/">Abrakadabra</a><br />
			<a href="34/">Asklepio</a> …<br />
			<br />
			<strong class="firstletter">D</strong><br />
			<a href="8/">Dadaismus</a><br />
			<a href="39/">Dankabar</a><br />
			<a href="82/">Dspoti</a><br />
			<a href="5/">Dubidu</a><br />
			<br />
			<strong class="firstletter">E</strong><br />
			<a href="40/">Elchtest</a><br />
			<a href="84/">Erzfeind</a><br>
			<a href="84/">Effendim</a><br>
			<a href="84/">Epsilon</a><br /></td>
		<td valign="top" width="25%"><a href="74/">Efmöff</a><br />
			<a href="42/">Eselsmilch</a><br />
			<br />
			<strong class="firstletter">F</strong><br />
			<a href="72/">Fistumir</a><br />
			<br />
			…<br />
			<br />
			<strong class="firstletter">J</strong><br />
			<a href="62/">Jackholborn</a><br />
			<a href="46/">Jimbeam</a><br />
			<br />
			<strong class="firstletter">K</strong><br />
			<a href="78/">Kackibumbacki</a><br />
			<a href="18/">Kifdo</a><br />
			<a href="101/">Kartoffelzabomm</a><br />
			<a href="103/">Mussmia</a><br /></td>
		<td valign="top" width="25%"><strong class="firstletter">L</strong><br />
			<a href="92/">Leckerlecki</a><br />
			<br />
			<strong class="firstletter">M</strong><br />
			<a href="104/">Mummpitz</a><br />
			<a href="48/">Maffma</a><br />
			<a href="49/">Mediator</a><br />
			<a href="50/">Milf</a><br />
			<a href="59/">Müffi</a><br />
			<br />
			<strong class="firstletter">…</strong><strong class="firstletter"></strong><br />
			<a href="96/">Richard</a><br />
			<br />
			<strong class="firstletter">S</strong><br />
			<a href="53/">Sumpfglocke</a><br />
			<a href="54/">Streetfighter4</a><br />
			<a href="88/">Simsala</a><br />
			<a href="88/">Sim</a><br /></td>
		<td valign="top" width="25%"><a href="20/">Schwarzwöldöl</a><br />
			<a href="47/">Schlammcatchen</a><br />
			<a href="105/">Sözü</a><br />
			<a href="21/">Signalim</a><br />
			<a href="97/">Sachte</a><br />
			<a href="55/">Schlachterei</a><br />
			<a href="66/">Stefffff</a><br />
			<a href="106/">Streetpunk</a><br />
			<br />
			<strong>…</strong><br />
			<strong class="firstletter">W</strong><br />
			<a href="11/">Wrumm Wurm</a><br />
			<a href="23/">Weltbildgestört</a><br />
			<a href="24/">Willstduauchma</a><br />
			<a href="26/">Warumeigentlichnich</a><br />
			<br />
			<strong class="firstletter">Z</strong><br />
			<a href="25/">Zuende</a><br /></td>
	</tr>
</table>
User avatar
lollipop27
Forum Members
Forum Members
Posts: 237
Joined: Wed Sep 12, 2007 4:09 pm
Location: Germany

Re: 4 spaltige Tabelle in Abhängigkeit der Zeilenanzahl…

Post by lollipop27 »

Ich habe leider nicht so viel Ahnung von Smarty, aber vielleicht geht es ja auch über einen UDT.
Kannst du nach dem Einfügen der Spalten nicht nochmal zählen wie viel Zeilen du hast?

Also das ganze in einen Array schreiben und dann die Länge und den Inhalt des Arrays zurückgeben?
nhaack

Re: 4 spaltige Tabelle in Abhängigkeit der Zeilenanzahl…

Post by nhaack »

aha :). Du hast also nur vier Zellen die nebeneinander stehen? Und damit die nicht unregelmäßig gefüllt werden, willst wissen, aber wieviel Einträgen du in die nächste Spalte wechseln musst damit alle Spalten möglichst gleich lang sind? Ich kenne jetzt nciht die Verteilung deiner Begriffe - also wie viele Begriffe jeder Buchstabe hat, bzw. wie hoch die Wahrscheinlichkeit ist X Einschübe pro Spalte zu haben... aber da du anscheinend garnicht die genaue Zeilenzahl brauchst um eine korrekte Tabelle aufzubauen... könntest du nicht mit einem kleinen Versatz leben?

Alternativ: du könntest vielleicht ein Array nehmen, dort alle Einträge einfügen und auch die Trenner für neue Buchstaben hier einfügen und die Tabelle dann erst mit diesem neuen Array aufbauen (im Gegensatz zum Einfügen der Buchstaben beim Aufbauen der Tabelle)? Dies ginge sicherlich einfacher mit einem UDT als Smarty. Also eigentlich, genau was Lollipop geschrieben hat.

Quasi:

Tag/Modul -> Smarty -> UDT -> Smarty -> Tabelle

Beste Grüße
Nils
User avatar
antiheld2000
Forum Members
Forum Members
Posts: 236
Joined: Thu Jan 31, 2008 9:23 am

Re: 4 spaltige Tabelle in Abhängigkeit der Zeilenanzahl…

Post by antiheld2000 »

Hm… schonmal danke für die Hilfe. Werde mich diese Woche noch dran machen und wohl die UDT Variante mal ausprobieren, da ich bzw. Kunde nicht mit einem Versatz leben kann. Werde dann bei Zeiten entweder um Hilfe schreien oder das Ergebnis posten.
Post Reply

Return to “Smarty-Tipps und -Tricks”