Smarty in User-defined-Tag ausführen

Diskussionen zur Smarty-Template-Engine
Post Reply
medicus
Forum Members
Forum Members
Posts: 10
Joined: Tue Sep 09, 2008 2:17 pm

Smarty in User-defined-Tag ausführen

Post by medicus »

Hallo Leute,
da ich aus der Doku nicht schlau geworden bin post ichs mal hier.

Ich würde gern in einem UDT auf das $node Element des Menü-Managers zugreifen.
Gwünschte Funktion: Falls eine dritte Menüebene existiert, soll der dazugehörige Parent ausgegeben werden.
( Die Kinder integrier ich ins Template über {menu start_level="3" template=""} )

Mein bescheidener Ansatz:

Code: Select all

if ($node->depth = 3) {
  echo "$node->parent";
}
Vielleicht kann mir jemand auf die Sprünge helfen.
Grüße
Last edited by medicus on Tue Aug 11, 2009 11:42 am, edited 1 time in total.
cyberman

Re: Smarty in User-defined-Tag ausführen

Post by cyberman »

Das sind ja gleich zwei Fragen in einem :).

1. Wie greife ich in PHP auf Smarty-Variablen zu?

http://smarty.net/manual/de/api.get.template.vars.php

2. Dein Ansatz

echo $node->parent wird nicht funktionieren da $node->parent allenfalls true ist und nicht den Menütext des Parents enthält.

Allerdings sollte dir das CGSimpleSmarty-Modul weiterhelfen können, damit kannst du auch auf den parent zugreifen.

Falls du nicht weiterkommst, einfach hier fragen :) ...
medicus
Forum Members
Forum Members
Posts: 10
Joined: Tue Sep 09, 2008 2:17 pm

Re: Smarty in User-defined-Tag ausführen

Post by medicus »

cyberman wrote: Falls du nicht weiterkommst, einfach hier fragen :) ...
Das ist leider der Fall. Da ich leider bisher wenig mit PHP gearbeitet hab und Smarty auch neu ist, bin ich mir deren Funktionsumfang nicht wirklich bewusst.

$node bietet mir (aus meiner Sicht) leider keine verwertbare Eigenschaft für diese wohl primitive Aufgabe.

Wie könnte man, sobald ein Link im Menü auf zweiter Ebene (1.1) angeklickt wird UND über Kinder verfügt (1.1.2) etwas HTML-Code ausgeben?

Meine Idee war ein User-Defined-Tag, der schlussendlich im Markuptemplate platziert wird. Nur is mir das offenbar zu hoch.
Kann mir jemand helfen?
Last edited by medicus on Tue Aug 11, 2009 5:36 pm, edited 1 time in total.
cyberman

Re: Smarty in User-defined-Tag ausführen

Post by cyberman »

Die Frage ist, was genau du ausgeben möchtest (Text, Menü, Grafik, ...?).

Weiter oben hattest du von einem Menü in der dritten Ebene gesprochen ... für eine derartige Anwendung enthält das mitgelieferte Template "Top simple navigation + left subnavigation + 1 column" ein Beispiel (für die erste und die zweite Ebene - die erste Ebene als Top-Menü und die zweite Ebene in der linken Sidebar).
medicus
Forum Members
Forum Members
Posts: 10
Joined: Tue Sep 09, 2008 2:17 pm

Re: Smarty in User-defined-Tag ausführen

Post by medicus »

Die Frage ist, was genau du ausgeben möchtest (Text, Menü, Grafik, ...?).
Einfacher Text.
Es ist so gedacht, dass die dritte Ebene in der Sidebar geöffnet wird (das is mit {menu start_level="3"..} gelöst).
Dieser dritten Ebene soll als Überschrift der jeweilige Parent dienen.
Ich weiß bis heute nicht wie ich das am besten löse... hab aber mittlerweile einfach das Menü umstrukturiert.


Allerdings bin ich heute auf ein neues Problem gestoßen :(

Und zwar möchte ich in einem UD-Tag Parameter übergeben wies bei den vielen tollen Modulen üblich ist.

Als Aufruf im Quellcode z.B. {import page="adress"}

Ich dachte an sowas im UD-Tag:

$smarty->assign('page', $adress);

Geht das?
Und wenn ja, wie handle ich das dann im UD-Tag?
z.B. so?

if ( $smarty->get_template_vars('page'); ) {
    Blablabla ..? 
}
cyberman

Re: Smarty in User-defined-Tag ausführen

Post by cyberman »

medicus wrote: Es ist so gedacht, dass die dritte Ebene in der Sidebar geöffnet wird (das is mit {menu start_level="3"..} gelöst).
Dieser dritten Ebene soll als Überschrift der jeweilige Parent dienen.
Ich weiß bis heute nicht wie ich das am besten löse... hab aber mittlerweile einfach das Menü umstrukturiert.
Du könntest evtl. auch im Menü-Template für die erste und zweite Ebene den Menü-Text des aktiven Menü-Eintrags einer separaten Smarty-Variablen zuweisen und diese Variable dann im Menü-Template der dritten Ebene als Überschrift verwenden.

Hier mal der (zu ergänzende) Ausschnitt aus dem Menü-Template für die 1. und 2. Ebene

Code: Select all

{if $node->current == true}
<li class="currentpage"><h3><dfn>Current page is {$node->hierarchy}: </dfn>{$node->menutext}</h3>

   {assign var="sub3header" value=$node->menutext}
Im Menü-Template für die 3. Ebene fügst du an passender Stelle nur noch {$sub3header} ein.
Und zwar möchte ich in einem UD-Tag Parameter übergeben wies bei den vielen tollen Modulen üblich ist.
Evtl. hilft dir das etwas weiter

http://wiki.cmsmadesimple.org/index.php ... ed_Tags/de
NaN

Re: Smarty in User-defined-Tag ausführen

Post by NaN »

Ich verstehe leider immer noch nicht genau was Du vorhast.
Wie soll das ganze von statten gehen?
Rufst Du Deinen UDT im News-Template auf oder im Seiten-Template?
Welche Parameter werden an den UDT übergeben?
Was soll der UDT zurückgeben?

Soll der UDT nur Newseinträge mit einem bestimmen Extrafeld ausgeben?
Ist es das?
Oder soll er die Extrafelder zurückgeben?
Die sind normalerweise schon im News-Template verfügbar.
Wie sieht denn Deine Datenbankabfrage bisher aus?
NaN

Re: Smarty in User-defined-Tag ausführen

Post by NaN »

Lightstoner wrote: Hat sich heut morgen erledigt. Bin per Zufal auf die lösung gestossen.
Die da wäre?
Post Reply

Return to “Smarty-Tipps und -Tricks”