Page 1 of 1

extra seitenattr. löst error aus

Posted: Fri Jul 31, 2009 8:28 am
by florian
hallo zusammen

vorweg: ich bin nicht der geübteste cmsms-user und stehe daher wegen einer kleinigkeit an...

wenn ich im template mit "{$content_obj->GetPropertyValue('extra1')}" das extra1 attribut auslesen will, kann smarty den code nicht mehr compilieren.

ich habe etwas gelesen von "loadprops=1" aber konnte es leider nicht implementieren, dass es funktioniert. kann mir irgendwer n tipp geben, von was der error ausgelöst wird, oder wie ich loadprops einfügen muss um die attribute auslesen zu können?

besten dank schon einmal an alle!

grüsse flo

Re: extra seitenattr. löst error aus

Posted: Fri Jul 31, 2009 9:29 am
by florian
lösung gefunden:

alle attribute einer seite über den UDT "get_content_props" auslesen:

call im template:
z.B: alert('{get_content_props fields="extra1"}');

see: UDT description

UDT:

Code: Select all

global $gCms;
$db =& $gCms->GetDb();
$content_id = $gCms->variables['pageinfo']->content_id;
$fields = array();
$separator = '<br />';
$result = array();

if( isset($params['content_id']) ) {
        $content_id = trim($params['content_id']);
}

if( isset($params['fields']) ) {
        $fields = explode(',',trim($params['fields']));
}

if( isset($params['separator']) ) {
        $separator= $params['separator'];
}

$i=0;
$query = "SELECT prop_name,content FROM ".cms_db_prefix()."content_props WHERE content_id=".$content_id;
if(!empty($fields)) {
        $query .= " AND (";
        foreach($fields as $f)
        {
                $i++;
                $query .= "prop_name='".$f."'";
                if($i<count($fields))
                        $query .= " OR ";
        }
        $query .= ")";
}
$dbresult = $db->Execute($query);
while($dbresult && $row = $dbresult->FetchRow()) {
        $result[$row['prop_name']]['fieldname'] = $row['prop_name'];
        $result[$row['prop_name']]['data'] = $row['content'];
}

// assign vars to smarty
if( isset($params['assign']) ) {
        $smarty->assign(trim($params['assign']), $result);
}
// or just print out the result
else {
       $i=0;
        foreach($result as $res) {
                $i++;
                echo $res['data'];
                if($i<count($result))
                        echo $separator;
        }
}
grüsse flo

Re: extra seitenattr. löst error aus

Posted: Fri Jul 31, 2009 10:44 am
by cyberman
florian wrote: wenn ich im template mit "{$content_obj->GetPropertyValue('extra1')}" das extra1 attribut auslesen will, kann smarty den code nicht mehr compilieren.
Warum willst du das über einen extra udt machen?

Smarty kennt die Variable bereits, unter {$node->extra1} - wäre also doppelt gemoppelt ;).
ich habe etwas gelesen von "loadprops=1" aber konnte es leider nicht implementieren, dass es funktioniert. kann mir irgendwer n tipp geben, von was der error ausgelöst wird, oder wie ich loadprops einfügen muss um die attribute auslesen zu können?
Yep, ist seit der 1.6 etwas anders - du musst dem Aufruf des MenuManagers "loadprops=1" hinzufügen.

Re: extra seitenattr. löst error aus

Posted: Fri Jul 31, 2009 11:33 am
by florian
danke cyberman für deine antwort.

mit "doppelt gemoppelt" hast du schon recht, aber ich brauche das extra1 als "gallery_constructor" im template (ich greife auf den namen einer datenbank zu welcher im extra1 seht). den menumanager wird dabei nicht aufgerufen.

Re: extra seitenattr. löst error aus

Posted: Fri Jul 31, 2009 11:42 am
by cyberman
Ich geh mal davon aus, dass du grundsätzlich auf der Seite den MenüManager drauf hast.

Dann könntest auch du den $node->extra1 der aktuellen Seite einer separaten Smarty-Variable zuweisen, die dann unabhängig von einem MenüManager-Aufruf zur Verfügung steht und sparst den zusätzlichen UDT.

Re: extra seitenattr. löst error aus

Posted: Fri Jul 31, 2009 11:57 am
by florian
aber wieso ist dies überhaupt so? ich meine, dass die attribute doch nicht nur im menumanager gebraucht werden. dann muss ich zwangsläufig einen menumanager implementieren, damit ich von den site-attr. gebrauch machen kann (ausser mit dem UDT)... gibt es dafür einen grund? wieso wurde das "loadprops='1'" überhaupt eingeführt :-S das ist mir rätselhaft.

Re: extra seitenattr. löst error aus

Posted: Fri Jul 31, 2009 12:13 pm
by cyberman
florian wrote: aber wieso ist dies überhaupt so? ich meine, dass die attribute doch nicht nur im menumanager gebraucht werden.
Dafür sind sie aber primär vorgesehen.
dann muss ich zwangsläufig einen menumanager implementieren, damit ich von den site-attr. gebrauch machen kann (ausser mit dem UDT)... gibt es dafür einen grund?
Im Prinzip ja. Der MenüManager stellt die Daten für Smarty (=die verwendete Template-Engine) bereit und nur dann können diese Daten in Templates verwendet werden.

Allerdings werden für ein paar dieser Daten bereits Tags mitgeliefert, die einzelne Felder abfragen wie zum Beispiel {title} oder {menu_text}.
wieso wurde das "loadprops='1'" überhaupt eingeführt
Aus Performance-Gründen - ein Standardmenü benötigt die zusätzlichen Felder nicht unbedingt.

Re: extra seitenattr. löst error aus

Posted: Fri Jul 31, 2009 2:49 pm
by NaN
florian wrote: den menumanager wird dabei nicht aufgerufen.
Doch wird er.
Irgendwie muss ja das Seitenmenü zustande kommen.
Der Menü-Tag {menu ... } und der Modul-Aufruf {cms_module module="MenuManager" ... } ist im Prinzip genau dasselbe
Oder hast Du etwa gar kein Menü auf der Seite?

Brauchst Du nur das Extra-Attribut der aktuellen Seite oder aller Seiten?

florian wrote: wenn ich im template mit "{$content_obj->GetPropertyValue('extra1')}" das extra1 attribut auslesen will, kann smarty den code nicht mehr compilieren.
Und was genau meinst Du damit?
Kommt da eine Fehlermeldung?
Wie sieht die aus?

Die meiner Meinung nach beste Lösung ist die, die Cyberman vorgeschlagen hat.
Das Menü mit "loadprops=1" aufrufen und das Menü-Template so anpassen, dass das Extrafeld eines Menüpunktes einer Template-Variablen zugewiesen wird.

Bsp. (simple_navigation):
{if $count > 0}

{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string="" times=$node->depth-$node->prevdepth}
{elseif $node->depth prevdepth}
{repeat string="" times=$node->prevdepth-$node->depth}

{elseif $node->index > 0}
{/if}

{if $node->current == true}
Current page is {$node->hierarchy}: {$node->menutext}

{if isset($node->extra1) && $node->extra1 != ''}
  {assign var="extra1" value=$node->extra1}
{/if}

{elseif $node->parent == true}
url}"{if $node->accesskey != ''} accesskey="{$node->accesskey}"{/if}{if $node->tabindex != ''} tabindex="{$node->tabindex}"{/if}{if $node->titleattribute != ''} title="{$node->titleattribute}"{/if}>{$node->hierarchy}: {$node->menutext}

{elseif $node->type == 'sectionheader'}
{$node->menutext}

{elseif $node->type == 'separator'}


{else}
url}"{if $node->accesskey != ''} accesskey="{$node->accesskey}"{/if}{if $node->tabindex != ''} tabindex="{$node->tabindex}"{/if}{if $node->titleattribute != ''} title="{$node->titleattribute}"{/if}{if $node->target != ''} target="{$node->target}"{/if}>{$node->hierarchy}: {$node->menutext}

{/if}

{/foreach}
{repeat string="" times=$node->depth-1}

{/if}
Somit hast Du im Template eine Variable namens {$extra1}.