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

#1 10. Februar 2020 20:26

parsec
kennt CMS/ms
Registriert: 04. Oktober 2012
Beiträge: 181

[GELÖST] ListIt-Liste im Item einer anderen ListIt-Liste darstellen?

Hallo,

ich muss mich entschuldigen, ich hatte diese Frage schon mal in den Raum gestellt aber da kam leider nichts mehr, drum frag ich nochmal.

Nehmen wir mal an, ich mach mir eine ListIt-Liste mit Terminen, die ich in Items einer anderen bestehenden ListIt-Liste anzeigen will.

Bisher hat das leider nicht geklappt. Wahrscheinlich füg ich das nur falsch ein. Wenn ich zum Beispiel in einer ListIt-Liste ein Textfeld zum Einfügen für eine andere Listit-Liste vorsehe, dann komm mir auch nur als Text "{ListIt2termine}" raus. Wie muss ich das machen, das dort eben die Termine kommen und nicht nur der Tag?

Wenn ich den Tag {ListIt2termine} ins Summary Template stecke, funktioniert es, aber dann hab ich sie ja überall drin, das will ich ja nicht.

Komfortabel wär natürlich wenn man über ein Dropdown in jedem Item hätte um eine andere Liste auf Wunsch inkludieren zu könnte ohne den Tag in ein Feld kopieren zu müssen ;-).

Sicher braucht man das selten, aber ich hatte schon 3 mal den Fall wo das richtig brauchbar gewesen wär.

Gruß


"Es ist unmöglich, alles zu wissen" - Horaz

Offline

#2 11. Februar 2020 13:02

Klenkes
Server-Pate
Ort: 89428 Syrgenstein
Registriert: 17. Dezember 2010
Beiträge: 1.416

Re: [GELÖST] ListIt-Liste im Item einer anderen ListIt-Liste darstellen?

Kann man das in der Template nicht so ausgeben:

{eval var=$dein_contentblock_name}{* Dein Contentblock in dem der Listitaufruf steht *}

Offline

#3 11. Februar 2020 19:14

parsec
kennt CMS/ms
Registriert: 04. Oktober 2012
Beiträge: 181

Re: [GELÖST] ListIt-Liste im Item einer anderen ListIt-Liste darstellen?

Ich hab die Listen nicht in einem Content-Block sondern direkt auf meinen Seiten-Templates eingebunden, in Verbindung mit dem Seiten-Alias werden die ListIt-Listen automatisch eingebunden.

{$cinst = "{$smarty.ldelim}ListIt2{$page_alias}{$smarty.rdelim}"}{include file="string:$cinst" orderby="item_position"}

Ich hab schon versucht z.B. im {ListIt2startseite} Summary-Template meine Terminliste {ListIt2termine} zu platzieren . Logischerweise wird dann in jedem {ListIt2startseite}-Item die Terminliste mit dargestellt. Das heißt, NAN hatte in meinem anderen Beitrag schon recht Listit in Listit dürfte kein Problem sein. Soweit so gut. Da ich aber nun nicht in jedem {ListIt2startseite}-Item die Termine haben will, sondern nur in bestimmten, dacht ich mir ich lege z.B. im {ListIt2startseite} ein Extra-Feld Textfeld an, wo ich dann eben nur nach Bedarf einen ListIt-Tag also in dem Fall {ListIt2termine} platzieren. Das funktioniert aber nicht, das Frontend zeigt mir an dieser Stelle dann eben in Textform nur "{ListIt2termine}" . Irgendwie wundert mich das auch nicht ist ja eine Textfeld und kein Smarty-Feld. Also, wie bekomme ich einen Smarty-Tag so in mein Item das die {ListIt2termine} Liste ausgegeben wird?

Gruß


"Es ist unmöglich, alles zu wissen" - Horaz

Offline

#4 15. Februar 2020 00:37

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

Re: [GELÖST] ListIt-Liste im Item einer anderen ListIt-Liste darstellen?

Ich würds so versuchen:

{$cinst="ListIt2"|cat:$page_alias}

Daraus wird dann z.B. "ListIt2termine".
Wenn es eine derartige Liste gibt, muss man das nur noch als Modulaufruf verwenden.
Entweder mit {eval} - wäre mir aber zu kompliziert, weil man da mit dem Modifikator "cat" den kompletten Aufruf zusammenbasteln muss - oder mit Hilfe von {cms_module}:

{cms_module module="$cinst" orderby="item_position"}

Wenn es eine solche Liste nicht gibt, ist schon eine Weile her, aber schau mal hier.

Offline

#5 15. Februar 2020 11:23

parsec
kennt CMS/ms
Registriert: 04. Oktober 2012
Beiträge: 181

Re: [GELÖST] ListIt-Liste im Item einer anderen ListIt-Liste darstellen?

Danke,
zunächst mal danke für jede Antwort. Nur wenn ich mir die Antworten so ansehe, bin ich mir nicht sicher, ob mein Problem richtig verstanden wurde. Vor allem NAN der ältere Beitrag worauf du verwiesen hast, war ja auch von mir, das funktioniert wunderbar aber das ist nicht mein aktuelles Anliegen.

Auch verstehe ich die bisherigen Antworten nicht ganz. Drum entschuldigt bitte alle, dass ich das nochmal ganz genau aufliste. Am besten 1:1 zu meinem aktuellen Projekt.

Es handelt sich um die Seite einer Realschule.


1. Ich habe für den Content jeder Seite, eine eigene ListIt-Liste angelegt. Diese werden über den Pagealias automatisch inkludiert. Also für die Startseite die {ListIt2startseite} für die Seite Eltern {ListIt2eltern}, für Seite Schüler {ListIt2schueler}, , für die Seite Geschichte {ListIt2geschichte}, für die Seite Veranstaltungen {ListIt2veranstaltungen}  usw. das funktioniert wunderbar mit folgenden Code auf meinem "default" Seiten-Template.

{$cinst = "{$smarty.ldelim}ListIt2{$page_alias}{$smarty.rdelim}"}{include file="string:$cinst" orderby="item_position"}

2. Die Summary-Templates all dieser Listen sind gleich, in etwa so aufgebaut.

{if $items|@count > 0}
{foreach from=$items item=item}
{if $item->fielddefs.headline!= ''}<h2>{$item->fielddefs.headline.value}{eval var=$ListIt2termine}</h2>{/if}
{if $item->fielddefs.subline!= ''}<h3>{$item->fielddefs.subline.value}</h3>{/if}
{if {$item->fielddefs.text!=''}{$item->fielddefs.text.value}{/if}
{if $item->fielddefs.bild!= ''}<img src="/uploads/{$item->fielddefs.bild.value}"/>{/if}
{/foreach}
{/if}

3. Jeder der Listen hat schon mehrere Einträge/Items

4. Nun habe ich eine Liste Termine angelegt {ListIt2termine}. Dort sind bereits alle wichtigen  Termine der nächsten Zeit eingetragen. Bitte hier beachten! Es gibt keine eigene Seite "Termine", und die will ich auch nicht!

5. Mir stellte sich nun die Frage, ob ich nun diese Termine-Liste {ListIt2termine}, in ganz bestimmten Einträge/Items einer anderen ListIt-Liste wie z.B. Veranstaltungen {ListIt2veranstaltungen} inkludieren kann.

6. Ich versuchte zunächst im Summary-Template der {ListIt2veranstaltungen} das {ListIt2termine} zu platzieren. Also...

{if $items|@count > 0}
{foreach from=$items item=item}
{if $item->fielddefs.headline!= ''}<h2>{$item->fielddefs.headline.value}</h2>{/if}
{if $item->fielddefs.subline!= ''}<h3>{$item->fielddefs.subline.value}</h3>{/if}
{if {$item->fielddefs.text!=''}{$item->fielddefs.text.value}{/if}
{if $item->fielddefs.bild!= ''}<img src="/uploads/{$item->fielddefs.bild.value}"/>{/if}
{ListIt2termine}
{/foreach}
{/if}

7. Das funktionier schon mal. Nur jetzt hab ich natürlich in jedem Eintrag/Item von {ListIt2veranstaltungen} die Termine drin. Ist ja logisch, aber ich will das nicht in jedem Eintrag stehen haben, sondern nur in bestimmten. Ich geh gleich einen Schritt weiter. Nicht nur in bestimmten Einträgen/Items in {ListIt2veranstaltungen} sondern vielleicht auch mal eine andere Liste inkludieren.

8. Ich versuchte in {ListIt2veranstaltungen} ein Extrafeld für ListIt-Listen anzulegen und probierte es zunächst mit einem Textfeld. Dort würde man nach Wunsch eine Liste platzieren können oder auch nicht. Ich legte dort in einem einzelnen Eintrag/Item von Veranstaltungen den Tag {ListIt2termine}. Das funktionierte leider nicht, auf der Webseite im Fontend, im besagten Eintrag, wurden nicht die Termine angezeigt, sondern nur der Tag selbst.

Nochmal die Frage, wie kann ich eine X-beliebige ListIt-Liste, in ein einzelnes Eintrag/Item einer anderen Liste platzieren und zwar so, dass ich das als End-User im Backend auf Wunsch machen kann. Eine Auswahlmöglichkeit mittels Dropdown wo alle Listen automatisch drin sind wär natürlich ne Wucht. Das automatische auslesen wurde hier schon mal bearbeitet.

https://www.cms-1.org/forum/viewtopic.php?id=4543

Oder gleich jede angelegte Listit-Liste mit Checkbox an und abwählbar, dann könnte man nach belieben gleich mehrere andere Listen einfügen. Mir ist schon klar, dass man das nicht übertreiben darf, aber wenn die Listen nur immer 10-15 Einträge haben, dürfte das doch von der Performance her, kein Problem darstellen.

Ich hoff das wurde richtig Verstanden, noch genauer kann ich es leider nicht mehr beschreiben.

Ich bin für jede Lösung dankbar.

Gruß an Alle

Beitrag geändert von parsec (15. Februar 2020 11:54)


"Es ist unmöglich, alles zu wissen" - Horaz

Offline

#6 15. Februar 2020 18:42

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

Re: [GELÖST] ListIt-Liste im Item einer anderen ListIt-Liste darstellen?

Dann habe ich Dein Anliegen falsch verstanden.

6. Ich versuchte zunächst im Summary-Template der {ListIt2veranstaltungen} das {ListIt2termine} zu platzieren.
[...]
7. Das funktionier schon mal. Nur jetzt hab ich natürlich in jedem Eintrag/Item von {ListIt2veranstaltungen} die Termine drin [...] aber ich will das nicht in jedem Eintrag stehen haben, sondern nur in bestimmten.

Also wenn ich Dich jetzt richtig verstehe, willst Du Artikel von ListIt2-Instanzen mit anderen ListIt2Instanzen verknüpfen.

Finde leider das Modul ListIt2 nirgends mehr zum Download. Kann das also nicht nachstellen bzw. nur mit LISE probieren. Erstell doch mal ein Feld vom Typ Dropdown. Da kannst Du doch alle zu verknüpfenden Listen eintragen und dann für jeden Artikel auswählen.
Und im Template kannst Du dann einfach den dort ausgewählten Eintrag als Parameter an {cms_module module="..."} übergeben.

Im Template musst Du nur wissen, welches Feld für diese Listen zuständig ist. Das kannst Du ja über einen entsprechenden Namen des Feldes herausfinden. Also gib dem Dropdown als Alias einen aussagekräftigen Namen wie z.B.  "linked_list". Und dann im Template z.B. einfach so prüfen:

{foreach from=$item->fielddefs item=fielddef}
	{if $fielddef.alias == 'linked_list'}
		{cms_module module="$fielddef.value" ... }
	{/if}
{/foreach}

(Nicht 1:1 kopieren! Ist für LISE. Aber ich denke bei ListIt dürfte das ähnlich sein.)

Offline

#7 15. Februar 2020 21:59

parsec
kennt CMS/ms
Registriert: 04. Oktober 2012
Beiträge: 181

Re: [GELÖST] ListIt-Liste im Item einer anderen ListIt-Liste darstellen?

Hallo,

zunächst mal danke für die Antwort! Ich weiß ich soll das nicht 1:1 kopieren, aber ich wüsste nicht was ich sonst machen soll. So gut bin ich nicht. Ich hab deinen Code trotzdem mal in das Startseiten also {ListIt2startseite} Summary Template eingebaut und Ein Dropdown-Extrafeld Alias "liste" angelegt. Dort hab ich meinen {ListIt2termine} Tag eingebaut.

Die Liste wird nicht angezeigt, aber wenn ich den Quellcode der Seite anschaue sehe ich an der Stelle folgendes...

<!-- {ListIt2termine}.value is not a plugin module -->

Vielleicht kannst du ja Rückschlüsse ziehen.


"Es ist unmöglich, alles zu wissen" - Horaz

Offline

#8 16. Februar 2020 14:26

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

Re: [GELÖST] ListIt-Liste im Item einer anderen ListIt-Liste darstellen?

Dort hab ich meinen {ListIt2termine} Tag eingebaut.

Du sollst da nicht den Tag, sondern nur "ListIt2termine" (ohne Klammern) eintragen.
Also z.B.

(die erste Zeile ist dafür gedacht, dass auch ein leerer Wert im Dropdown erstellt wird)
Achte darauf, dass Du hier beim Bearbeiten eines Artikels nicht dieselbe ListIt-Instanz auswählst, deren Artikel Du gerade bearbeitest. Sonst gibt's u.U. endlos Rekursion.*

Und dann mit {cms_module module=$fielddef.value} aufrufen.
(ohne Anführungszeichen - mein Fehler)

Ich habe inzwischen auch ListIt2 installiert (hatte vergessen, dass es im Forge offiziell ListItExtended heißt) und getestet. Läuft.

Im default Details Template steht z.B. innerhalb einer {foreach}-Schleife sowas:

	{if $fielddef.value && $fielddef.type != 'Categories'}
		{if $fielddef.type == 'SelectFile' || $fielddef.type == 'FileUpload'}
			{$fielddef.name}: <a href="{$fielddef->GetImagePath(true)}/{$fielddef.value}">{$fielddef.value}</a><br />
		{elseif $fielddef.type == 'SelectDateTime'}
			{$fielddef.name}: {$fielddef.value|cms_date_format}<br />
		{else}
			{$fielddef.name}: {$fielddef.value}<br />
		{/if}
	{/if}

Daraus machst Du z.B.

	{if $fielddef.value && $fielddef.type != 'Categories'}
		{if $fielddef.type == 'SelectFile' || $fielddef.type == 'FileUpload'}
			{$fielddef.name}: <a href="{$fielddef->GetImagePath(true)}/{$fielddef.value}">{$fielddef.value}</a><br />
		{elseif $fielddef.type == 'SelectDateTime'}
			{$fielddef.name}: {$fielddef.value|cms_date_format}<br />

		{elseif $fielddef.alias == 'linked_list' && $fielddef.value != ''}
			{cms_module module=$fielddef.value ... [weitere parameter]}

		{else}
			{$fielddef.name}: {$fielddef.value}<br />
		{/if}
	{/if}

* Man kann natürlich auch mit module_custom arbeiten und das Dropdown mit Hilfe eines Plugins dynamisch erstellen, sodass man die Instanzen nicht von Hand eintragen muss. Dabei kann man dann auch das Problem mit der Rekursion umgehen und die aktuelle Instanz herausfiltern. Dazu war der Link zu dem alten Beitrag gedacht, weil da ein Plugin für das Auslesen aller ListIt instanzen drin vorkam. Aber das machen wir erst, wenn die Grundidee funktioniert.

Offline

#9 16. Februar 2020 15:27

parsec
kennt CMS/ms
Registriert: 04. Oktober 2012
Beiträge: 181

Re: [GELÖST] ListIt-Liste im Item einer anderen ListIt-Liste darstellen?

Ich dacht es mir schon, das es nur ein kleiner Fehler sein kann, sonst hätte es gar nichts angezeigt.

Ich hab die Klammern aus meinem Dropdown raus. Das funktioniert schon mal super, kann Listit-Instanzen die ich im Dropdown Eintrage abrufen, wunderbar. Check!

Ich hätte auch schon mal die "function.get_listit_instances.php" mit Funktion vom alten Beitrag, auf meiner aktuellen Seite zum laufen gebracht. Check!

Obwohl ich noch nicht so fit auf komplexeren Dingen bin, hab ich mir das mit der endlos Rekursion schon gedacht, wusste nur nicht wie man das professionell nennt wink

Beitrag geändert von parsec (16. Februar 2020 15:40)


"Es ist unmöglich, alles zu wissen" - Horaz

Offline

#10 18. Februar 2020 17:22

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

Re: [GELÖST] ListIt-Liste im Item einer anderen ListIt-Liste darstellen?

Hab mich gerade daran versucht, das Dropdown automatisch mit allen Li-Instanzen (außer der aktuellen) zu befüllen. Das ist bei ListIt mit custom_content leider nicht so einfach, wie ich mir das gedacht hatte. Das müsste man nämlich für alle Instanzen einzeln machen. Da wäre es einfacher, im Frontend zu prüfen, ob hier dieselbe ListIt Instanz nocheinmal ausgeführt werden soll und diese dann einfach zu überspringen.

Ideal wäre, wenn ListIt ein solches Dropdown von Haus aus als eigenen Feldtypen mitbringen würde. Man könnte ein Modul erstellen, welches diesen Typen bereitstellt, um nicht am Core von ListIt rumzufummeln, aber das wäre a) ein Modul mehr, welches aber b) Funktionen bereitstellt, die von ListIt selber kommen - das ist widersinnig.

PS: In LISE gibt es übrigens bereits einen solchen FeldTypen "LISE Instanz".

Offline

#11 19. Februar 2020 20:09

parsec
kennt CMS/ms
Registriert: 04. Oktober 2012
Beiträge: 181

Re: [GELÖST] ListIt-Liste im Item einer anderen ListIt-Liste darstellen?

Ok, trotzdem danke! Werde mich eh schön langsam an CMSMS2 ranwagen, dann schau ich mir das LISE mal genauer an.


"Es ist unmöglich, alles zu wissen" - Horaz

Offline