Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 23. Mai 2013 07:28
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
[GELÖST] Mit "getchildren" in die Tiefe gehen
Hi,
sorry für den fast schon esoterischen Titel ... Ich möchte gerne auf der Startseite zufällige Seiten aus den Hauptrubriken anzeigen lassen. Dafür habe ich sowohl CGSimpleSmarty als auch die ToolBox ausprobiert:
[== Smarty ==]
CGSimpleSmarty:
{$cgsimple->get_children('alias',0,'cg_children')}
{assign var=cg_randomindex value=$cg_children|@array_rand}
{$cgsimple->get_page_title($cg_children.$cg_randomindex.alias, 'cg_title')}
{$cgsimple->get_page_content($cg_children.$cg_randomindex.alias,'content_en', 'cg_content')}
<h1>{eval var=$cg_title}</h1>
{eval var=$cg_content}
ToolBox:
{tbtools::getChildren('alias','','tb_children')}
{assign var=tb_randomindex value=$tb_children|@array_rand}
<h1>{$tb_children.$tb_randomindex.title}</h1>
{tbtools::getPageContent($tb_children.$tb_randomindex.alias,'content_en','tb_content')}{eval var=$tb_content}
Beide funktionieren grundsätzlich - aber beide nehmen sich immer nur die erste untergeordnete Ebene des jeweiligen Alias vor. Ich möchte aber gerne bis zu den Ur-Ur-Enkeln gehen. Dazu habe ich leider nichts gefunden.
Sicher ginge das mit Hilfe des MenuManagers oder ContentDump (wenn er unter 1.11.6 noch läuft) - aber bei beiden habe ich das Gefühl, dass sie zu viel Performance verbrauchen.
Das führt mich zur zweiten Frage:
Welche der beiden o.g. Lösungen ist voraussichtlich performanter? Ich persönlich würde die ToolBox vorziehen, da diese eh schon installiert ist und ich CGSimpleSmarty eigentlich nur für diesen Zweck installiert habe.
Offline
#2 23. Mai 2013 09:22
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] Mit "getchildren" in die Tiefe gehen
Welche der beiden o.g. Lösungen ist voraussichtlich performanter?
Das kann man nicht allein vom Smarty-Code ablesen. Der nimmt sich bei beiden nicht viel. Dazu muss man den PHP-Code der beiden Module untersuchen.
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. Mai 2013 09:24
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
Re: [GELÖST] Mit "getchildren" in die Tiefe gehen
Welche der beiden o.g. Lösungen ist voraussichtlich performanter?
Das kann man nicht allein vom Smarty-Code ablesen. Der nimmt sich bei beiden nicht viel. Dazu muss man den PHP-Code der beiden Module untersuchen.
Ok, hätte ja sein können, dass schon jemand Erfahrung damit hat. Aber ich tendiere eh zur ToolBox. Von CG's Modulen hört man nicht gerade die besten Dinge ...
Offline
#4 23. Mai 2013 17:08
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Mit "getchildren" in die Tiefe gehen
Die Toolbox und CGSimpleSmarty sind in diesem Bereich fast identisch. Beide greifen direkt auf die Content-API vom CMSMS zu.
Wenn du weitere Subebenen willst, müsstest du dir eine andere Funktion bauen.
Ich skizziere dazu folgenden Weg (für detailliertes fehlt mir im Moment die Zeit)
{* Seitenhierarchy mit IDs holen *}
{tbGetPageHierarchy output="id" assign="alleseiten"}
{* Liste in Array umwandeln --> Trenner kontrollieren *}
{assign var="alleseitenarray" value=","|explode:$alleseiten}
{assign var=randomindex value=$alleseitenarray|@array_rand}
{tbtools::getPageContent($randomindex ,'content_en','tb_content')}
{eval var=$tb_content}
Alles ungetestet, dürfte aber in etwa in der Richtung funktionieren.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#5 23. Mai 2013 19:29
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
Re: [GELÖST] Mit "getchildren" in die Tiefe gehen
Hi,
danke für den Hinweis, wie die Module arbeiten. Dann fliegt CGSimpleSmarty erst mal raus.
Mit dem Code von Dir hat es (fast) geklappt - der Trenner ist "|" statt ",", aber darauf hast Du ja hingewiesen:
[== Smarty ==]
{* Seitenhierarchy mit IDs holen *}
{tbGetPageHierarchy output='id' assign='alleseiten'}
{* Liste in Array umwandeln *}
{assign var='alleseitenarray' value='|'|explode:$alleseiten}
{* Zufällige Seiten-ID festlegen *}
{assign var=randomindex value=$alleseitenarray|@array_rand}
{* Titel der zufälligen Seiten-ID holen und ausgeben *}
{tbtools::getPageTitle($randomindex ,'tb_title')}
<h1>{eval var=$tb_title}</h1>
{* Inhalt der zufälligen Seiten-ID holen und ausgeben *}
{tbtools::getPageContent($randomindex ,'content_en','tb_content')}
{eval var=$tb_content}
Allerdings werden so wirklich alle Seiten (auch interne Verlinkungen ohne Inhalt) zufällig ausgegeben.
Leider habe ich keine Möglichkeit gefunden, eine Start-ID oder Start-Alias anzugeben. Ich habe auch keine Idee, wie ich das evtl. durch Abfragen steuern kann, da die ID's ja willkürlich über die die jeweiligen Parents verteilt sind.
Cool wäre ein Parameter "start_element" für "tbGetPageHierarchy", ähnlich wie im MenuManager. Mit dem könnte man das sicher auch umsetzen, aber der verbraucht ja sicherlich mehr Ressourcen - wurde ja hier des öfteren diskutiert.
Offline
#6 29. Mai 2013 13:42
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
Re: [GELÖST] Mit "getchildren" in die Tiefe gehen
Mit frischem Kopf habe ich etwas gefunden:
[== SMARTY ==]
{* Alle Untergeordneten Seiten eines Alias ziehen und per Zufall einen Index bestimmen *}
{tbtools::getChildren("alias","","tb_children")}
{assign var=tb_randomindex value=$tb_children|@array_rand}
{* Fragen, ob diese Seite weitere Untergeordnete Seiten hat *}
{tbtools::hasChildren($tb_children.$tb_randomindex.alias,"hasChildren_level_2")}
{if $hasChildren_level_2}
{* Wenn ja, diese Seiten ziehen und wieder per Zufall eine davon bestimmen *}
{tbtools::getChildren($tb_children.$tb_randomindex.alias,"","tb_children")}
{assign var=tb_randomindex value=$tb_children|@array_rand}
{else}
{* Keine Anweisung, da es nur um die Zuweisung der Variablen geht *}
{/if}
{* Aufgrund der selben Variablen muss der Inhalt nur einmal ausserhalb der if/else-Abfrage aufgeführt werden *}
{$tb_children.$tb_randomindex.title}
{* Inhaltsblock ziehen - geht mit jedem Block, auch in Verbindung mit Typen des AC-Moduls *}
{tbtools::getPageContent($tb_children.$tb_randomindex.alias,'content_en','tb_content')}
{eval var=$tb_content}
Das funktioniert soweit und ist noch erweiterbar auf weitere Ebenen (werde ich evtl. auch noch benötigen ...).
Offline
Seiten: 1