Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 23. September 2011 22:56

kris29
kennt CMS/ms
Registriert: 15. Dezember 2010
Beiträge: 106

Array in 3 Listen aufteilen

Ich hab ein einfaches Modul mit dem CTL-Modulmaker erstellt welches eine lange Liste von kurzen Einträgen ausgibt. Diese Liste soll nun im Layout in drei Spalten nebeneinander aufgeteilt werden, um Platz optimal auszunutzen.

Wie stellt man das an?
Viel weiter als die Anzahl aller Einträge abfragen komme ich nicht sad

{assign var='anzahl' value=$itemlist|@count}
Die Anzahl aller Einträge: {$anzahl}

Weiß jemand Rat?
Da ich mit Smarty/PHP nicht soviel Ahnung habe, hab ich auch schon darüber nachgedacht mittels jQuery die Liste zu splitten (list splitter). Aber direkt vom Template generiert würde es mir besser gefallen.

Offline

#2 23. September 2011 23:23

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: Array in 3 Listen aufteilen

Wenn die Einträge die gleiche Höhe haben, kannst Du sie in der Breite doch einfach 33% breit sein und links floaten lassen:

.items {
    float:left;
    height: eine bestimmte Höhe px;
    width: 33%;
}

Thema erledigt.
Dann musst du nicht mal wissen wieviele es sind oder irgendwie rumrechnen.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#3 23. September 2011 08:11

kris29
kennt CMS/ms
Registriert: 15. Dezember 2010
Beiträge: 106

Re: Array in 3 Listen aufteilen

Da hab ich mich falsch ausgedrückt. Der Inhalt soll auf 3 Spalten verteilt werden (column layout). Eine Spalte ist demnach maximal mit einem Drittel aller items gefüllt.

Die normale Ausgabe der foreach-Schleife

{if $itemcount > 0}
<ul>
{foreach from=$itemlist item="item"}
<li>
Name: <h3>{$item->name}</h3>
Beschreibung: {$item->beschreibung}
</li>
{/foreach}
</ul>
{/if}

sieht so aus:

item1
item2
item3
item4
item5
item6
item7
item8
item9

und so möchte ich:

item1  |  item4  |  item7   
item2  |  item5  |  item8
item3  |  item6  |  item9

Für den Fall wenn es mal nicht soviele items gibt, dann wäre eine minimal-items-Angabe sinnvoll. Hier z.B. 3 Stück pro Liste:

item1  |  item4  |     
item2  |  item5  | 
item3  |            |

Wo ich nicht weiterkomme ist, wie ich mit Smarty sage dass es bei der foreach-Schleife items nach Anzahl-x in eine neue Spalte packt (neue Liste ul, li).

Wenn irgendwann CSS3 in allen Browsern angekommen ist, würde ich das über CSS multi column lösen.

Beitrag geändert von kris29 (23. September 2011 08:11)

Offline

#4 23. September 2011 08:34

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: Array in 3 Listen aufteilen

Hm, das kannst du allenfalls auch mit einem Mehrfach aufruf des Arrays erreichen.

Siehe:
http://www.blattertech.ch/blog/9/70/Sma … leifen.htm

Mittels

Weisst du wo du bist. Mittels count kannst du du Anzahl der Datensätze auslesen und damit dann eine section Schleife bauen in welcher du die Spalten aufbaust
http://support.zikula.de/module-News-di … id-800.htm

Mittels break bzw. continue kannst du dann steuern wann du welche Datensätze anzeigen willst.

Ist im Moment ein wenig wirr, da ich zuwenig Zeit habe das ganze Konzept sauber durch zu denken, es soll dir aber einen Ansatz geben wo du suchen kannst.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#5 23. September 2011 10:58

piratos
arbeitet mit CMS/ms
Registriert: 12. August 2011
Beiträge: 545

Re: Array in 3 Listen aufteilen

Drei Spalten nebeneinander das geht nur mit CSS.

1. ermitteln wie viele Inhalte man hat
2. ermitteln wie viele Inhalte pro Spalte kommen werden und ein Maximum pro Spalte definieren
3. in der Hauptschleife einen Counter starten und abfragen ob der das Spaltenmaximum erreicht hat, wenn ja z.B. ein DIV beenden und das nächste starten, Counter neu setzen

Offline

#6 23. September 2011 20:31

kris29
kennt CMS/ms
Registriert: 15. Dezember 2010
Beiträge: 106

Re: Array in 3 Listen aufteilen

Danke euch. Also mit smarty gestaltet sich das für mich nicht so easy. Habe es nun mit jQuery columnize gelöst. War sehr einfach einzubinden.

Von der Semantik ist es sogar besser so, als wenn nur zum Layoutzweck Inhalt einer Liste in mehrere Listen direkt im HTML verteilt wird.

PS: Die reine CSS-Lösung kam mangels IE-Unterstützung leider nicht in Frage.

Offline