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

Hilfe zu Modulen und Tags
Post Reply
konsument
Forum Members
Forum Members
Posts: 137
Joined: Thu Oct 26, 2006 9:20 am

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

Post 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
Last edited by konsument on Wed Mar 17, 2010 2:54 pm, edited 1 time in total.
cyberman

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

Post by cyberman »

Warum machst du nicht eine Abfrage auf den Seiten-Alias?

Code: Select all

{if $page_alias == 'werbung'}
User avatar
lollipop27
Forum Members
Forum Members
Posts: 237
Joined: Wed Sep 12, 2007 4:09 pm

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

Post 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.
cyberman

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

Post 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'}
konsument
Forum Members
Forum Members
Posts: 137
Joined: Thu Oct 26, 2006 9:20 am

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

Post 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?  ???
NaN

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

Post 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 ;)
Last edited by NaN on Wed Mar 17, 2010 4:20 am, edited 1 time in total.
cyberman

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

Post 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
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

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

Post 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?
konsument
Forum Members
Forum Members
Posts: 137
Joined: Thu Oct 26, 2006 9:20 am

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

Post 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
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

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

Post by nicmare »

jetzt möchte ich aber noch nen link zu der schulhomepage sehen :D
konsument
Forum Members
Forum Members
Posts: 137
Joined: Thu Oct 26, 2006 9:20 am

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

Post by konsument »

nicmare wrote: jetzt möchte ich aber noch nen link zu der schulhomepage sehen :D
Der ist lieider noch streng geheim  :P  :)
Post Reply

Return to “Module und Tags”