Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 01. Dezember 2015 15:00
- rage_all
- kennt CMS/ms
- Ort: Augsburg
- Registriert: 09. März 2011
- Beiträge: 288
[GELÖST] ListIt2 Kategorien ... wieder mal :-)
ListIt und die Kategorien sind ja ein beliebtes Thema - hab ich eben beim Recherchieren herausgefunden.
Leider hat mir kein Beitrag so wirklich helfen können, und nun kommt langsam die Verzweiflung...
Meine Konfiguration:
CMSms 1.12.1 “Rontiki”
ListIt2 1.4.1
Folgendes Produkt ist das Ziel:
Eine Speisekarte, deren Einträge nach ihrer Art (Vorspeisen, Salate, etc.) gruppiert sind, in Bootstrap-Tabs. Fertig.
In meinem Kopf war das noch ganz einfach...
Zunächst: Ich habe es nicht geschafft, ein Kategorien-Template zu aktivieren. Mit template_category ging es jedenfalls nicht. Auch action='detail' hat sich geweigert (und dafür irgendein Template gerendert). Auch alle möglichen {$cats} und was ich sonst so im Netz und in der Hilfe gefunden habe, ging im Template nicht, bzw. lieferte kein Ergebnis, das mich motiviert hätte, weiter zu basteln...
Nun bin ich also im Zusammenfassungs-Mode - der funktioniert einwandfrei (und macht ja auch Sinn: Ich möchte keine Romane zu den Speisen und Getränken schreiben sondern nur Nr., Name, Preis, ggf. evtl. noch ein Foto (eher nicht)). Auch eine Weiterführung/Weiterleitung Speise -> Detail kommt nicht infrage.
Mit print_r bekomme ich so viele Informationen, dass ich nicht weiß, wie ich aus dem Baum die benötigten Schalter holen kann. Herausgefunden habe ich aber folgendes: ID Nr. 4 enthält die benötigte Info (nach der ich auch gruppieren möchte).
Mit
[== Template / Smarty ==]
{foreach from=$items item=item}
{$item->fielddefs[4].value}
{/foreach}
erhalte ich "Vorspeisen Vorspeisen" (es sind erst zwei Einträge, beide unter Vorspeisen enthalten).
Mit (nur eins der vielen Versuche)
[== Template / Smarty ==]
{foreach from=$item->fielddefs[4] item=group}
bekomme ich NULL Ergebnisse.
Da hakt es aus bei mir: Ich bekomme aus allen Items die Details der Felddefinition N°4, kann jedoch keinen einzigen Datensatz produzieren, wenn ich von der Felddefinition N°4 ausgehe. Ich meine, so kann ich doch auch nicht gruppieren, oder etwa doch?
Ich stelle mir vor, dass die Datensätze später in der Reihenfolge ihrer Eingabe auch ausgegeben werden, also Vorspeisen (2 Items), Getränke (12 Items), Desserts (4 Items), Vorspeisen (4 Items), ... zumindest, wenn ich einfach nur {foreach from=$items} aufrufe.
Ich spiel inzwischen mal etwas Halma zur Beruhigung.
Bitte klärt mich über meinen Denkfehler auf - ich weiß es liegt an mir, aber ich weiß nicht wo...
Vielen Dank!
Offline
#2 02. Dezember 2015 22:39
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
Re: [GELÖST] ListIt2 Kategorien ... wieder mal :-)
Wenn dein Extrafeld z.b. "speisenart" heisst und dort die Werte "Vorspeise", "Salate" und "Hauptgericht" heissen, sollte es mit sowas funktionieren. Für das Extrafeld "speisenart" würde sich als Typ "Dropdown" anbieten in dem du die entsprechenden Optionen vorgibst, prinzipiell würde es auch ein einfaches Textfeld tun. Geht bestimmt auch eleganter...
[== smarty ==]
{foreach from=$items item=item}
{if $item->fielddefs.speisenart.value = "Vorspeise"}
{$item->fielddefs.speisenart.value}
{/if}
{/foreach}
{foreach from=$items item=item}
{if $item->fielddefs.speisenart.value = "Salate"}
{$item->fielddefs.speisenart.value}
{/if}
{/foreach}
{foreach from=$items item=item}
{if $item->fielddefs.speisenart.value = "Hauptgericht"}
{$item->fielddefs.speisenart.value}
{/if}
{/foreach}
Offline
#3 03. Dezember 2015 23:04
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
Re: [GELÖST] ListIt2 Kategorien ... wieder mal :-)
Ach, es geht auch einfacher.
Einfach im Content an der entsprechenden Stelle, oder im Seitentemplate eine entsprechende Anweisung setzen.
{ListIt2Speisekarte template_summary="uebersicht" search_speisenart="Vorspeise"}
{ListIt2Speisekarte template_summary="uebersicht" search_speisenart="Salate"}
{ListIt2Speisekarte template_summary="uebersicht" search_speisenart="Hauptgericht"}
Vorraussetzung ist das das Extrafeld "speisenart" vorhanden ist und ein summary-template mit namen "uebersicht" exisitiert.
Den Parameter kann man aber auch weglassen, dann wird hat das "default" template verwendet.
aus der Modulhilfe:
(optional) search_*="" - Durchsucht ein bestimmtes Feld. Sie können 'title' verwenden oder den Alias eines Extra-Felds, bspw. search_title. Bleibt unbeachtet, wenn der Parameter 'search' gesetzt ist, jedoch ist die Kombination mehrerer search_* Parameter möglich.
Offline
#4 03. Dezember 2015 15:20
- Dancer62
- Server-Pate
- Ort: 26345 Bockhorn, Niedersachsen
- Registriert: 08. November 2013
- Beiträge: 414
Re: [GELÖST] ListIt2 Kategorien ... wieder mal :-)
Um dem Ganzen dann die Krone aufzusetzen, könntest Du das Template folgendermaßen gestalten (hier wurde praktischerweise mit Definitionslisten gearbeitet) :
{if $items|@count > 0}
<!-- items -->
{foreach from=$items item=item}
<!-- item -->
<div class="listit">
<h3>{$item->category|cms_escape}</h3>
<dl>
<dt>
<img src="/uploads/<Pfad zu den Bilddateien>{$item->fielddefs.foto_speise.value}" alt="*" />
</dt>
<dd>
<h4>{$item->title|cms_escape} {$item->speise|cms_escape}</h4>
{if !empty($item->fielddefs)}
<!-- field definitions -->
<div class="item-properties">
{$item->fielddefs.beschreibung.value|cms_escape}
{$item->fielddefs.preis.value|cms_escape}
</div>
<!-- field definitions //-->
{/if}
</dd>
</dl>
{/if}
</div>
<!-- item //-->
{/foreach}
<!-- items //-->
{/if}
Voraussetzung ist hierbei eine Liste mit den Kategorien "Vorspeise", "Salat", Hauptspeise" etc. und den Extra-Feldern Alias' "foto_speise", "speise", "beschreibung" und "preis" (das erste Feld "title" ist das Feld "Titel des Eintrags" im Reiter "Optionen").
Wenn Du jetzt Deine Liste mit
{ListIt2Speisekarte template_summary='uebersicht' category='Vorspeise' orderby='item_title'|ASC}
{ListIt2Speisekarte template_summary='uebersicht' category='Salat' orderby='item_title'|ASC}
{ListIt2Speisekarte template_summary='uebersicht' category='Hauptspeise' orderby='item_title'|ASC}
etc.
aufrufst, müsstest Du eine Speisekarte erhalten, die nacheinander alle Speisen einer Kategorie auflistet und jeweils nach aufsteigender Nummer innerhalb der Kategorie sortiert ist.
(Nachtrag : lediglich bei der ersten Zeile
<h3>{$item->category|cms_escape}</h3>
bin ich mir nicht sicher, ob dadurch tatsächlich die gewünschte Kategorie angezeigt wird. Aber dafür haben wir ja glücklicherweise fähige Administratoren / User, die hoffentlich mehr wissen, als ich... )
Man ist so alt, wie man sich fühlt...
Offline
#5 04. Dezember 2015 11:48
- rage_all
- kennt CMS/ms
- Ort: Augsburg
- Registriert: 09. März 2011
- Beiträge: 288
Re: [GELÖST] ListIt2 Kategorien ... wieder mal :-)
Wow!
Erstmal vielen Dank für Eure Antworten!
Ich muss zu meiner Schande gestehen, dass ich gerade viel zu viel zu tun hab - mit dem Glück jetzt nicht an diesem einen Problem verzweifeln zu müssen, mit dem Pech jetzt nicht sofort alle Ansätze ausprobiert haben zu können *sorry*. Ab Dienstag kann ich wieder durchatmen und schau mir alles nochmal ganz in Ruhe an, dann gibt es auch einen ausführlichen Post der dem Umfang Eurer Antworten hoffentlich gerecht wird.
Mir wars jetzt aber wichtig so bald wie möglich Zwischenmeldung zu geben und mich zu bedanken!
Ich konnte kurz den ersten Vorschlag von bd0 erfolgreich umsetzen - bei einer Kategorie, erstmal. Mein ursprünglicher Traum war ja ein Eierlegendes-Woll-Milch-Sau-Konzept, das mir autark sowohl die Tabs füllt als auch die Contents vom Bootstrap-Template (Bootstrap - JavaScript: Tabs).
Sprich: Aus dem Feld "Art" (der Speisen), welches übrigens tatsächlich ein Drop-Down ist, alle enthaltenen Werte exakt 1× auslesen und in die Tabs füllen; danach die Speisen nach ihrer Zugehörigkeit gefiltert in die zugehörigen DIVs packen.
Mit hin- und her zicken hab ich vor einiger Zeit auch einen vollautomatischen ContentBlock für Bootstrap Carousel erstellen können, dass selbständig Bilder aus einem Verzeichnis ausliest, nummeriert und die Nummern in die jeweiligen Klassen zu den jeweiligen Fotos packt, damit sie navigierbar sind. *mann-bin-ich-stolz*
Ich dachte, ich krieg das hier auch 'mal eben' hin...
Aber - es muss eigentlich gar nicht Vollautomatisch sein.
Die Kategorien der Speisekarte "Vorspeise", "Suppen", etc. ändern sich ja nicht. Eine Gruppierung ist im Grunde wirklich alles was ich brauche. Dann 'filtere' ich mit dem Smarty-Template die Speisen entsprechend in das vordefinierte Bootstrap-Template rein und schreibe halt die Struktur 1 × vor. Ist ja nicht so, dass es ein unglaublicher Aufwand wäre...
Damit wäre mein Problem also bereits komplett gelöst!
An dieser Stelle also schon herzlichen Dank - und Thema als 'gelöst' markiert!
Nächste Woche gehe ich wie gesagt die anderen Beiträge noch durch und teste ausführlich. Dann gibt's noch einen Nachtrag.
Wenn Ihr möchtet, stelle ich gern das fertige Template hier ein - könnte ja an anderer Stelle brauchbar sein (vielleicht baut einer von Euch mal was für ein Restaurant)? Wäre halt Bootstrap 3, wenn das nicht stört?
Offline
#6 04. Dezember 2015 13:15
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] ListIt2 Kategorien ... wieder mal :-)
Wenn Ihr möchtet, stelle ich gern das fertige Template hier ein
Beiträge dieser Art sind immer gern gesehen ... müssen nur langsam mal sehen, wie wir die mittlerweile sehr zahlreichen Anhängsel hier gescheit geordnet & bereitgestellt bekommen. Mir fehlt aber gerade etwas die Zeit dafür ...
Offline
#7 15. Dezember 2015 10:35
- rage_all
- kennt CMS/ms
- Ort: Augsburg
- Registriert: 09. März 2011
- Beiträge: 288
Re: [GELÖST] ListIt2 Kategorien ... wieder mal :-)
So, wie versprochen die fertigen Snippets zum Thema "Gruppieren der Einträge von ListIt2" in Bootstrap-Tabs:
Mein Zusammenfassungs-Template im "Speisekarte"-Modul, einer ListIt-Instanz:
[== Template/Smarty ==]
{if $items|@count > 0}
{foreach from=$items item=item}
{assign "title" $item->title}
{assign "beschreibung" $item->fielddefs.beschreibung.value}
{if ($title == $beschreibung)}{assign "same" "1"}{/if}
<tr>
{if $same == "1"}
<td colspan='2'>{$item->title|cms_escape}</td>
{else}
<td>{$item->title|cms_escape}</td>
<td>{$item->fielddefs.beschreibung.value}</td>
{/if}
<td class='price'>{$item->fielddefs.preis.value|cms_escape} €</td>
</tr>
{assign "same" "0"}
{/foreach}
{/if}
(Das "same" ist lediglich damit keine doppelten Wörter auftreten wenn der Titel der Speise und die Beschreibung gleich sind)
Jetzt wird's etwas länger - hier der Inhalt der Seite mit den Bootstrap-Tabs:
[== HTML/Smarty ==]
<div id='SpeisekarteTabs'>
<!-- Nav tabs -->
<ul class='nav nav-tabs' role='tablist'>
<li class='active' role='presentation'> <a href='#Vorspeisen' aria-controls='Vorspeisen' role='tab' data-toggle='tab'>Vorspeisen</a> </li>
<li role='presentation'> <a href='#Salate' aria-controls='Salate' role='tab' data-toggle='tab'>Salate</a> </li>
<li role='presentation'> <a href='#Suppen' aria-controls='Suppen' role='tab' data-toggle='tab'>Suppen</a> </li>
<li role='presentation'> <a href='#Nudeln' aria-controls='Nudeln' role='tab' data-toggle='tab'>Nudeln</a> </li>
<li role='presentation'> <a href='#Fisch' aria-controls='Fisch' role='tab' data-toggle='tab'>Fisch</a> </li>
<li role='presentation'> <a href='#Fleisch' aria-controls='Fleisch' role='tab' data-toggle='tab'>Fleisch</a> </li>
<li role='presentation'> <a href='#Pizza' aria-controls='Pizza' role='tab' data-toggle='tab'>Pizza</a> </li>
<li role='presentation'> <a href='#Dessert' aria-controls='Dessert' role='tab' data-toggle='tab'>Dessert</a> </li>
</ul>
<!-- Tab panes -->
<div class='tab-content'>
<div role='tabpanel' class='tab-pane fade in active' id='Vorspeisen'>
<table class='table table-striped'>
<thead>
<tr>
<th class='text-left'>Speise</th>
<th class='text-left'>Beschreibung</th>
<th class='text-right'>Preis</th>
</tr>
</thead>
<tbody>
{ListIt2Speisekarte template_summary='speisekarte' search_art='Vorspeisen' orderby='gericht_nr'}
</tbody>
</table>
</div>
<!-- eof tab Vorspeisen //-->
<div role='tabpanel' class='tab-pane fade' id='Salate'>
<table class='table table-striped'>
<thead>
<tr>
<th class='text-left'>Speise</th>
<th class='text-left'>Beschreibung</th>
<th class='text-right'>Preis</th>
</tr>
</thead>
<tbody>
{ListIt2Speisekarte template_summary='speisekarte' search_art='Salate' orderby='gericht_nr'}
</tbody>
</table>
</div>
<!-- eof tab Salate //-->
<div role='tabpanel' class='tab-pane fade' id='Suppen'>
<table class='table table-striped'>
<thead>
<tr>
<th class='text-left'>Speise</th>
<th class='text-left'>Beschreibung</th>
<th class='text-right'>Preis</th>
</tr>
</thead>
<tbody>
{ListIt2Speisekarte template_summary='speisekarte' search_art='Suppen' orderby='gericht_nr'}
</tbody>
</table>
</div>
<!-- eof tab Suppen //-->
<div role='tabpanel' class='tab-pane fade' id='Nudeln'>
<table class='table table-striped'>
<thead>
<tr>
<th class='text-left'>Speise</th>
<th class='text-left'>Beschreibung</th>
<th class='text-right'>Preis</th>
</tr>
</thead>
<tbody>
{ListIt2Speisekarte template_summary='speisekarte' search_art='Nudeln' orderby='gericht_nr'}
</tbody>
</table>
</div>
<!-- eof tab Nudeln //-->
<div role='tabpanel' class='tab-pane fade' id='Fisch'>
<table class='table table-striped'>
<thead>
<tr>
<th class='text-left'>Speise</th>
<th class='text-left'>Beschreibung</th>
<th class='text-right'>Preis</th>
</tr>
</thead>
<tbody>
{ListIt2Speisekarte template_summary='speisekarte' search_art='Fisch' orderby='gericht_nr'}
</tbody>
</table>
</div>
<!-- eof tab Fisch //-->
<div role='tabpanel' class='tab-pane fade' id='Fleisch'>
<table class='table table-striped'>
<thead>
<tr>
<th class='text-left'>Speise</th>
<th class='text-left'>Beschreibung</th>
<th class='text-right'>Preis</th>
</tr>
</thead>
<tbody>
{ListIt2Speisekarte template_summary='speisekarte' search_art='Fleisch' orderby='gericht_nr'}
</tbody>
</table>
</div>
<!-- eof tab Fleisch //-->
<div role='tabpanel' class='tab-pane fade' id='Pizza'>
<table class='table table-striped'>
<thead>
<tr>
<th class='text-left'>Speise</th>
<th class='text-left'>Beschreibung</th>
<th class='text-right'>Preis</th>
</tr>
</thead>
<tbody>
{ListIt2Speisekarte template_summary='speisekarte' search_art='Pizza' orderby='gericht_nr'}
</tbody>
</table>
<p><b>Bitte beachten Sie:</b> Die hier genannten Preise beziehen sich auf die "kleine" Pizza.<br />
Änderungswünsche und Extras ggf. gegen Aufpreis.</p>
</div>
<!-- eof tab Pizza //-->
<div role='tabpanel' class='tab-pane fade' id='Dessert'>
<table class='table table-striped'>
<thead>
<tr>
<th class='text-left'>Speise</th>
<th class='text-left'>Beschreibung</th>
<th class='text-right'>Preis</th>
</tr>
</thead>
<tbody>
{ListIt2Speisekarte template_summary='speisekarte' search_art='Dessert' orderby='gericht_nr'}
</tbody>
</table>
</div>
<!-- eof tab Salate //-->
</div>
<!-- eof tab-content //-->
</div>
<button type='button' class='btn btn-corner pull-right' data-toggle='modal' data-target='#zusatzstoffe' title='Zusatzstoffe' id='btnzusatzstoffe'><span class='fa fa-info'></span></button>
<!-- Modal -->
<div class='modal fade' id='zusatzstoffe' tabindex='-1' role='dialog' aria-labelledby='zusatzstoffeLabel'>
<div class='modal-dialog' role='document'>
<div class='modal-content corner'>
<div class='modal-header'>
<button type='button' class='close' data-dismiss='modal' aria-label='Schliessen'><span aria-hidden='true'>×</span></button>
<h4 class='modal-title' id='myModalLabel'>Kenntlichmachung der Zusatzstoffe</h4>
</div><!-- eof modal-header //-->
<div class='modal-body'>
<ol>
<li>mit Säurungsmittel Zitronensäure</li>
<li>geschwärzt</li>
<li>mit Antioxidationsmittel</li>
<li>Vorderschinken mit Nitritpökelsalz</li>
<li>mit Farbstoff Beta Carotin</li>
<li>mit Backtriebmittel im Löffelbisquit</li>
<li>mit Farbstoff</li>
<li>chininhaltig</li>
<li>koffeinhaltig</li>
<li>mit Taurin </li>
</ol>
</div><!-- eof modal-body //-->
</div><!-- eof modal-content //-->
</div><!-- eof modal-dialog //-->
</div><!-- eof #zusatzstoffe //-->
<noscript>
{ListIt2Speisekarte template_summary='speisekarte_noscript' orderby='gericht_nr'}
<div>
<i>Kenntlichmachung der Zusatzstoffe:</i>
<ol>
<li>mit Säurungsmittel Zitronensäure</li>
<li>geschwärzt</li>
<li>mit Antioxidationsmittel</li>
<li>Vorderschinken mit Nitritpökelsalz</li>
<li>mit Farbstoff Beta Carotin</li>
<li>mit Backtriebmittel im Löffelbisquit</li>
<li>mit Farbstoff</li>
<li>chininhaltig</li>
<li>koffeinhaltig</li>
<li>mit Taurin </li>
</ol>
</div>
</noscript>
Natürlich, wie es sein soll, mit <noscript> alleine schon aus Gründen der Zugänglichkeit und Barrierefreiheit.
Das <noscript>-Template ist im Grunde ganz ähnlich, lediglich wird die Tabelle im ListIt erzeugt:
[== Template/Smarty ==]
{if $items|@count > 0}
<table class='table table-striped'>
<thead>
<tr>
<th>Speise</th>
<th>Beschreibung</th>
<th>Preis</th>
</tr>
</thead>
<tbody>
<tr>
<th colspan="3">Vorspeisen</th>
</tr>
{foreach from=$items item=item}
{if $item->fielddefs.art.value == "Vorspeisen"}
<tr>
<td>{$item->title}</td>
<td>{$item->fielddefs.beschreibung.value}</td>
<td>{$item->fielddefs.preis.value|cms_escape} €</td>
</tr>
{/if}
{/foreach}
<tr>
<th colspan="3">Salate</th>
</tr>
{foreach from=$items item=item}
{if $item->fielddefs.art.value == "Salate"}
<tr>
<td>{$item->title}</td>
<td>{$item->fielddefs.beschreibung.value}</td>
<td>{$item->fielddefs.preis.value|cms_escape} €</td>
</tr>
{/if}
{/foreach}
<tr>
<th colspan="3">Suppen</th>
</tr>
{foreach from=$items item=item}
{if $item->fielddefs.art.value == "Suppen"}
<tr>
<td>{$item->title}</td>
<td>{$item->fielddefs.beschreibung.value}</td>
<td>{$item->fielddefs.preis.value|cms_escape} €</td>
</tr>
{/if}
{/foreach}
<tr>
<th colspan="3">Nudeln</th>
</tr>
{foreach from=$items item=item}
{if $item->fielddefs.art.value == "Nudeln"}
<tr>
<td>{$item->title}</td>
<td>{$item->fielddefs.beschreibung.value}</td>
<td>{$item->fielddefs.preis.value|cms_escape} €</td>
</tr>
{/if}
{/foreach}
<tr>
<th colspan="3">Fisch</th>
</tr>
{foreach from=$items item=item}
{if $item->fielddefs.art.value == "Fisch"}
<tr>
<td>{$item->title}</td>
<td>{$item->fielddefs.beschreibung.value}</td>
<td>{$item->fielddefs.preis.value|cms_escape} €</td>
</tr>
{/if}
{/foreach}
<tr>
<th colspan="3">Fleisch</th>
</tr>
{foreach from=$items item=item}
{if $item->fielddefs.art.value == "Fleisch"}
<tr>
<td>{$item->title}</td>
<td>{$item->fielddefs.beschreibung.value}</td>
<td>{$item->fielddefs.preis.value|cms_escape} €</td>
</tr>
{/if}
{/foreach}
<tr>
<th colspan="3">Pizza</th>
</tr>
{foreach from=$items item=item}
{if $item->fielddefs.art.value == "Pizza"}
<tr>
<td>{$item->title}</td>
<td>{$item->fielddefs.beschreibung.value}</td>
<td>{$item->fielddefs.preis.value|cms_escape} €</td>
</tr>
{/if}
{/foreach}
<tr>
<th colspan="3">Desserts</th>
</tr>
{foreach from=$items item=item}
{if $item->fielddefs.art.value == "Desserts"}
<tr>
<td>{$item->title}</td>
<td>{$item->fielddefs.beschreibung.value}</td>
<td>{$item->fielddefs.preis.value|cms_escape} €</td>
</tr>
{/if}
{/foreach}
</tbody>
</table>
{/if}
Nochmals vielen Dank für Eure Hilfe - dieses Forum ist der Hammer!
Offline
Seiten: 1