Page 1 of 1

[gelöst] Prüfen ob eine Seite "aktiv" ist

Posted: Tue Mar 16, 2010 2:53 pm
by konsument
Hallo Leute,

habe bereits im Englischen Forum gepostet, aber keine Hilfe gefunden.

Ist es möglich zu prüfen ob eine Seite aktiviert ist oder nicht?

Hintergrund:

Ich habe drei GCB´s, wovon einer, wir nennen diesen mal "Werbung", nur angezeigt werden soll, wenn auch die Seite "Werbung" aktiv ist. Also aktiv nicht im Sinne von aktiver Menüpunkt.

Gibt es vielleicht noch die Möglichkeit meine Menüs nach dem Menütitel "Werbung" zu durchsuchen und darüber ne Bedingung zu formulieren?

Hilfe wär echt super!

Grüße

Re: Prüfen ob eine Seite "aktiv" ist

Posted: Tue Mar 16, 2010 5:43 pm
by cyberman
Warum machst du nicht eine Abfrage auf den Seiten-Alias?

Code: Select all

{if $page_alias == 'werbung'}

Re: Prüfen ob eine Seite "aktiv" ist

Posted: Tue Mar 16, 2010 6:08 pm
by lollipop27
cyberman wrote: Warum machst du nicht eine Abfrage auf den Seiten-Alias?

Code: Select all

{if $page_alias == 'werbung'}
So wie ich das verstehe, willst du nicht wissen, ob das die aktuelle seite ist, sondern ob sie generell aktiv und nicht "disabled" ist.

Wieso lässt du nicht die Sitemap via {menu} raus, schreibst sie in eine Variable und überprüfst ob deine Seite in der Sitemap vorhanden ist...
Ist vielleicht nicht das einfachste, aber müsste funktionieren.

Re: Prüfen ob eine Seite "aktiv" ist

Posted: Tue Mar 16, 2010 9:49 pm
by cyberman
lollipop27 wrote: So wie ich das verstehe, willst du nicht wissen, ob das die aktuelle seite ist, sondern ob sie generell aktiv und nicht "disabled" ist.
Auch das ist kein Problem

Code: Select all

{if $content_obj->mActive == '1'}

Re: Prüfen ob eine Seite "aktiv" ist

Posted: Wed Mar 17, 2010 1:21 am
by konsument
cyberman wrote: Auch das ist kein Problem

Code: Select all

{if $content_obj->mActive == '1'}
hmm..

hab jetzt schon stundenlang herumexperimentiert, aber mir will es einfach nicht gelingen an die deaktivierte Seite zu kommen.

Habe es zum einen im Template direkt versucht:

Code: Select all

{capture assign=active}{menu items="inaktive-seite"}{/capture}
{if $active->mActive == '1'}active{else}not active{/if}
und im menu.tpl

Code: Select all

{if $this->mActive == '1'}active{else}not active{/if}
Im Menu Template verliere ich jegliche Information zum Node sobald er deaktiviert ist und im Template selbst passiert gar nichts - egal ob aktiv oder nicht.

Wie komme ich an die deaktivierte Seite heran?  ???

Re: Prüfen ob eine Seite "aktiv" ist

Posted: Wed Mar 17, 2010 3:32 am
by NaN
cyberman wrote:
Auch das ist kein Problem

Code: Select all

{if $content_obj->mActive == '1'}
{$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 ;)

Re: Prüfen ob eine Seite "aktiv" ist

Posted: Wed Mar 17, 2010 11:05 am
by cyberman
NaN wrote: {$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.
So richtig hab ich eh nicht verstanden, was du mit einer inaktiven Seite willst  ::) ... ansonsten fiele mir noch Nhacks Allround Tool ein

http://dev.cmsmadesimple.org/projects/contentdump
http://wiki.cmsmadesimple.org/index.php ... ntent_dump

Re: Prüfen ob eine Seite "aktiv" ist

Posted: Wed Mar 17, 2010 12:43 pm
by nicmare
also ich glaube er meint NICHT den status von der Seite bzw den Button. Sonst ergibt das keinen sinn.
Er möchte doch lediglich einen GCB (Werbung) dann ausgeben, wenn auf der jeweiligen Seite tatsächlich Werbung gewünscht ist. UNd das möglichst automatisiert. Was hat das mit nem deaktivieren Menüpunkt zu tun?
Es sollte also reichen, im Template eine Bedingung einzubauen die prüft, ob (bsp im pageattribut1) nen Wert "Werbung" vorliegt. Wenn ja, dann soll der GCB geladen werden.
oder?

Re: Prüfen ob eine Seite "aktiv" ist

Posted: Wed Mar 17, 2010 2:53 pm
by konsument
NaN wrote:

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}

Klapp ganz ausgezeichnet! Bin echt sprachlos! Vielen Dank für eure Mühen. Das ist mehr Support als ich wirklich ertragen kann  :D
cyberman wrote: So richtig hab ich eh nicht verstanden, was du mit einer inaktiven Seite willst..
Dann erkläre ich es nochmal schnell  ;D

Ich habe eine Seite die heißt "Stundenplan" (das mit der "Werbung" war nur ein Beispiel).
Die Site selbst, hat ca. 1500 Seiten, wovon 10 jeweils 150 Editoren zugewiesen sind. Jeder Editor verwaltet quasi eine 10 Seiten starke "Site" in der Site. Nun ist es so, dass jeder die Seite "Stundenplan" hat, wobei der Eine oder Andere diesen aber nicht benötigt. Da der Stundenplan im Layout allerdings noch über ein GCB für alle im Template angeteasert wird, habe ich nach dieser Lösung gesucht.

Hach, ich bin begeistert! Ich liebe euch :D

Re: [gelöst] Prüfen ob eine Seite "aktiv" ist

Posted: Wed Mar 17, 2010 3:17 pm
by nicmare
jetzt möchte ich aber noch nen link zu der schulhomepage sehen :D

Re: [gelöst] Prüfen ob eine Seite "aktiv" ist

Posted: Thu Mar 18, 2010 2:49 am
by konsument
nicmare wrote: jetzt möchte ich aber noch nen link zu der schulhomepage sehen :D
Der ist lieider noch streng geheim  :P  :)