cyberman wrote:
Auch das ist kein Problem
{$content_obj} beinhaltet soweit ich weiß nur die Infos der
aktuellen Seite. D.h. man kann damit nicht prüfen, ob irgendeine
andere Seite die gerade nicht geladen ist aktiv ist oder nicht.
Inaktive Seiten werden ohnehin nicht geladen, daher macht {if $content_obj->mActive == '1'} keinen Sinn, da sobald ich auf das {$content_obj} innerhalb eines Templates zugreifen kann, mActive unmöglich einen anderen Wert haben kann als 1.
konsument wrote:
Code: Select all
{capture assign=active}{menu items="inaktive-seite"}{/capture}
{if $active->mActive == '1'}active{else}not active{/if}
Das ergibt ebenfalls keinen Sinn, da Du die komplette
Ausgabe des MenuManagers in der Variablen {$active} speicherst. Der MenüManager liefert aber keine Objekte, sondern den HTML Output eines MenuTemplates. Eigentlich müsste es eine fette Fehlermeldung geben, da {$active} kein Object mit der Eigenschaft mActive ist sondern nichts weiter enthält als
Code: Select all
<ul>
<li>
<a href="inaktive-seite">menutext</a>
</li>
</ul>
also reinen Text.
Probier mal
Code: Select all
{capture assign=active}{menu items="inaktive-seite"}{/capture}
{$active}
oder
Code: Select all
{capture assign=active}{menu items="inaktive-seite"}{/capture}
{get_template_vars}
Dann siehst Du was ich meine.
konsument wrote:
[...]
und im menu.tpl
Code: Select all
{if $this->mActive == '1'}active{else}not active{/if}
Mir scheint Du verwechselst hier gerade Smarty mit PHP. Mit {$this} kann Smarty hier nichts anfangen, da eine solche Variable im MenuTemplate nicht existiert. Wenn dann höchstens mit
Code: Select all
{foreach from=$nodelist item=$node}
{if $node->mActive}
...
{/if}
{/foreach}
Aber auch das wäre falsch, da das Objekt {$node} in diesem Falle ebenfalls keine Eigenschaft namens mActive enthält, sondern, wenn, dann nur die Eigenschaft active ($node->active).
Aber wie Du schon treffend bemerkt hast, liefert der MenuManager an seine Templates eh nur Elemente, die auch wirklich aktiv sind. D.h. mit {$node->active} wirst Du auch keinen Erfolg haben da genau wie beim {$content_obj} dieser Node im Template nur dann existiert, wenn er auch wirklich aktiv ist.
Oder anders: {$node->active} kann ebenfalls unmöglich einen anderen Wert haben als 1.
Mit Hilfe des MenuManagers oder Template Variablen wirst Du mit der Suche nach inaktiven Seiten keinen Erfolg haben, da Template Variablen immer nur dann existieren, wenn eine Seite gerendert wird. Und gerendert werden, wie bereits erläutert, nur aktive Seiten. Es gibt keine Möglichkeit dem MenuManager zu sagen, dass er bitte auch inaktive Seiten anzeigen soll. Denn sonst wäre das Deaktivieren von Seiten ja sinnlos. Denn ein Link zu einer inaktiven Seiten führt stets ins Nirvana. Wozu sich also als MenuManger die Mühe machen und Seiten, die man eh nicht verlinken kann aus der Datenbank auszulesen? Und nichts anderes ist ja die Aufgabe des MenuManagers: Eine Linkliste zu erstellen.
konsument wrote:
Wie komme ich an die deaktivierte Seite heran? ???
Du wirst um einen UDT oder ein Plugin nicht herumkommen.
Diesem Script übergibst Du einfach das Seiten-Alias oder die Seiten ID der zu prüfende Seite.
Dann werden die Eigenschaften dieser Seite aus der Datenbank ausgelesen.
Ist die Seite aktiv, liefert das Script den Wert true zurück. Anderenfalls false.
Soviel zu Theorie.
Du könntest aber auch etwas Einfacheres (um nicht zu sagen: weniger Elegantes) probieren. Das Menü aufzurufen und mittels {capture} einer Variablen zuzuweisen ist schonmal kein verkehrter Ansatz. Nur können wir mit der gelieferten Variable nichts anfangen. Allerdings liefert der MenuManager ja das {$nodelist} Objekt mit allen aktiven Seiten (wenn das Menü zusätzlich noch mit dem Parameter showall=true aufgerufen wird, dann liefert der MenuManager auch alle Seiten, die nicht im Menü sichtbar sind - das nur so am Rande). Dieses Objekt ist nach dem Menüaufruf auch im normalen Seitentemplate vorhanden. Jetzt muss man nur noch dieses Objekt durchlaufen und prüfen, ob eine ganz bestimme Seite enthalten ist. Wenn ja, dann zeige den GCB an, wenn nein ... na dann halt nicht.
Wenn Seiten-Alias und Name des GCBs übereinstimmen, dann dürfte das kein Problem sein.
Bsp:
Code: Select all
{capture assign=dummy}{menu show_all="1"}{/capture} {* die Variable dummy brauchen wir nicht weiter, aber jetzt gibt es ein neues $nodelist objekt *}
{if $count > 0}
{foreach from=$nodelist item=node}
{if $node->alias=="werbung"}
{global_content name='werbung'}
{/if}
{/foreach}
{/if}
Somit wird der globale Inhatlsblock namens "werbung" nur angezeigt, wenn es auch eine aktive Seite mit dem Alias "werbung" gibt. Da ein Seiten-Alias nur ein einziges Mal vorkommen darf, erübrigt sich ein "break" mit dem man im Falle eines Erfolges aus der {foreach} Schleife ausbrechen kann. Der GCB wird somit auch nicht mehrfach angezeigt.
Um dennoch einen Ausstieg aus der {foreach} Schleife zu ermöglichen, brauchst Du allerdings doch ein kleines Plugin:
http://www.smarty.net/forums/viewtopic. ... ight=break
PS: Ich hab das alles selber noch nicht probiert. Aber es ist jetz ca. 5 Uhr Morgens und ich hatte noch keinen Schlaf, daher überlasse ich das Dir
