AdvancedContent und CGSimpleSmarty?

Hilfe zu Modulen und Tags
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

AdvancedContent und CGSimpleSmarty?

Post by nicmare »

Ich versuche mich gerade an beiden Modulen und versuche auf einer Seite Inhalt von einer anderen Seite auszugeben:

Code: Select all

{$cgsimple->get_page_content(start)}
Laut der Hilfe ist die Syntax für get_page_content diese:

Code: Select all

Der Inhalt der festgelegten Seite ist {$cgsimple->get_page_content($alias,[$block],[$assign])}
Aber ich bekomme immer

Code: Select all

string(153) "Smarty error: [in content:content_en line 2]: syntax error: unrecognized tag: $cgsimple->get_page_content(start) (Smarty_Compiler.class.php, line 446)" string(117) "Smarty error: [in content:content_en line 2]: syntax error: unrecognized tag '' (Smarty_Compiler.class.php, line 590)" 
wieso? ich wollte dann später so eine Art automatisierte Zusammenfassung aller Unterseiten auf der Hauptseite aufschlüsseln aber scheitere schon an den elementaren Sachen :(
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: AdvancedContent und CGSimpleSmarty?

Post by nicmare »

Okay! mitlerweile habe ich herausgefunden dass das an TinyMCE liegt. Er macht mir aus -> > nervig!

aber die zweite frage bleibt trotzdem. Wie kann ich am geschicktesten die zusätzlichen Blöcke (typ text und image) der Unterseiten am besten in einer foreach schleife auflisten?

gut, habe herausgefunden dass ich die unterseite mit dem MenuManager anzeigen kann:

Code: Select all

{if $count > 0}

{foreach from=$nodelist item=node}

  <h1> {$cgsimple->get_page_title($node->alias)} </h1>
  <p> {$cgsimple->get_page_content($node->alias)} </p>

{/foreach}

{/if}
Last edited by nicmare on Mon Sep 13, 2010 10:48 am, edited 1 time in total.
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: AdvancedContent und CGSimpleSmarty?

Post by nicmare »

Nun war die nächste Herausforderung die Ausgabe zu sortieren denn aktuell wird so sortiert wie die Seite im Backend sortiert sind. Aber ich möchte zB nach Namen sortieren. Also habe ich den modifier code vom

Code: Select all

smarty forum
kopiert und die datei modifier.sortby.php in lib/smarty/plugins gespeichert.
Aber ich bekomme immer den fehler

Code: Select all

string(143) "Smarty error: [in module_db_tpl:MenuManager;categorize line 3]: [plugin] modifier 'sortby' is not implemented (core.load_plugins.php, line 124)"
Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback
wieso??
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: AdvancedContent und CGSimpleSmarty?

Post by nicmare »

ich mach dann mal weiter mit meiner "1man-show" :D
ich depp hab die datei in den falschen ordner gepackt. nun kommt wenigstens ein anderer fehler. ich habe jetzt diverse scripte ausprobiert:
diesen modifier
oder diesen
und aktuell diesen
(ist eigentlich immer der selbe)
aber ich bekomms einfach nicht zum laufen im menumanager  :'(

fehler:

Code: Select all

Fatal error: Cannot use object of type stdClass as array in /homepages/44/d35513338/htdocs/design/cmsms/lib/smarty/plugins/modifier.sortby.php(33) : runtime-created function on line 1
Last edited by nicmare on Mon Sep 13, 2010 1:43 pm, edited 1 time in total.
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: AdvancedContent und CGSimpleSmarty?

Post by nockenfell »

Nun ist eine two-men-show  ;D 8)

Wie wäre es, wenn du das Array in einem UDT sortierst und wieder zurück gibst:

In diesem Thread modifiziere ich die Array-Liste des Menümanagers. Mit was ähnlichem könntest du ev auch zum Ziel kommen:
http://forum.cmsmadesimple.org/index.ph ... 158.0.html
[this message is written with 100% recycled bits]
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: AdvancedContent und CGSimpleSmarty?

Post by nicmare »

Ja richtig. Im Grunde brauche ich die Funktionalität des MenuManagers mit mehr parametern. Und zwar sortby (content_block), sort (ascending, descending) und limit (maximale elemente). aber mit meinem unterirdischen php kenntnissen wird das nichts.  :-\ deswegen hoffe ich, es über nen modifier zu lösen
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: AdvancedContent und CGSimpleSmarty?

Post by nockenfell »

Wenn du das Menü umordnen möchtest, kommst du nicht darum herum, dich detailliert mit der Menü-Klasse auseinanderzusetzen. Im Menü hat diverses von einander Abhängigkeiten.

Die ganzen Ebenen, Reihenfolge, etc.

Mit dem Beispiel von mir solltest du hier zumindest eine Grundlage haben wie dies in etwa aussieht.
[this message is written with 100% recycled bits]
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: AdvancedContent und CGSimpleSmarty?

Post by nicmare »

aber wozu? ich hab das doch fast geschafft. mit dem modifier kann ich theoretisch verschachtelt sortieren und egal ob auf- oder abwärts. irgendwas überseh ich da nur:
modifier.sortby.php

Code: Select all

<?php
#
# sorts an array of named arrays by the supplied fields
#   code by dholmes at jccc d0t net
#   taken from http://au.php.net/function.uasort
# modified by cablehead, messju and pscs at http://www.phpinsider.com/smarty-forum

function array_sort_by_fields(&$data, $sortby){
      static $sort_funcs = array();

    if (empty($sort_funcs[$sortby]))
    {
        $code = "\$c=0;";
        foreach (split(',', $sortby) as $key)
        {
           $d = '1';
              if (substr($key, 0, 1) == '-')
              {
                 $d = '-1';
                 $key = substr($key, 1);
              }
              if (substr($key, 0, 1) == '#')
              {
                 $key = substr($key, 1);
               $code .= "if ( ( \$c = (\$a['$key'] - \$b['$key'])) != 0 ) return $d * \$c;\n";
              }
              else
              {
               $code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return $d * \$c;\n";
            }
        }
        $code .= 'return $c;';
        $sort_func = $sort_funcs[$sortby] = create_function('$a, $b', $code);
    }
    else
    {
        $sort_func = $sort_funcs[$sortby];
    }
    uasort($data, $sort_func);
}

#
# Modifier: sortby - allows arrays of named arrays to be sorted by a given field
#
function smarty_modifier_sortby($arrData,$sortfields) {
   array_sort_by_fields($arrData,$sortfields);
   return $arrData;
}
?> 
menumanager template "summary"

Code: Select all

{if $count > 0}
{foreach from=$nodelist|@sortby:"-id" item=node}

  <h1> {$cgsimple->get_page_title($node->alias)} </h1>
  <p> {$cgsimple->get_page_content($node->alias)} </p>

{/foreach}

{/if}
menuaufruf

Code: Select all

{menu template="summary" childrenof="leistungen"}
auszug array {$nodelist|print_r}:

Code: Select all

stdClass Object
(
    [id] => 30
    [pagetitle] => Logodesign
    [url] => http://www.domain.de/cmsms/leistungen/logo.html
    [accesskey] => 
    [type] => content2
    [tabindex] => 
    [titleattribute] => 
    [modified] => 2010-09-08 11:43:57
    [created] => 2010-09-08 11:37:01
    [hierarchy] => 3.1
    [depth] => 1
    [prevdepth] => 1
    [haschildren] => 
    [menutext] => Logodesign
    [raw_menutext] => Logodesign
    [target] => 
    [index] => 0
    [alias] => logo
    [parent] => 
    [extra1] => 
    [extra2] => 
    [extra3] => 
    [current] => 
)
stdClass Object
(
    [id] => 28
    [pagetitle] => Printdesign
    [url] => http://www.domain.de/cmsms/leistungen/print.html
    [accesskey] => 
    [type] => content2
    [tabindex] => 
    [titleattribute] => 
    [modified] => 2010-09-08 11:43:40
    [created] => 2010-09-08 11:34:24
    [hierarchy] => 3.2
    [depth] => 1
    [prevdepth] => 1
    [haschildren] => 
    [menutext] => Printdesign
    [raw_menutext] => Printdesign
    [target] => 
    [index] => 1
    [alias] => print
    [parent] => 
    [extra1] => 
    [extra2] => 
    [extra3] => 
    [current] => 
)
Last edited by nicmare on Mon Sep 13, 2010 2:17 pm, edited 1 time in total.
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: AdvancedContent und CGSimpleSmarty?

Post by nockenfell »

Hast du noch immer das Problem mit dem StdClass?

Wandle die StdClass in deiner Funktion in ein Array um:

Code: Select all

function smarty_modifier_sortby($arrData,$sortfields) {
  $array = array();
  $array = $arrData;
   array_sort_by_fields($arrData,$sortfields);
   return $arrData;
}
falls das nicht funktioniert:

Code: Select all

function smarty_modifier_sortby($arrData,$sortfields) {
  $array = array();
   foreach ($arrData as $data) {
   $array[] = $data;
}
   array_sort_by_fields($arrData,$sortfields);
   return $arrData;
}
[this message is written with 100% recycled bits]
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: AdvancedContent und CGSimpleSmarty?

Post by nicmare »

ja. richtig nervig. verschwendet schon meinen ganzen tag… wobei dein snippet die fehlermeldung auch nicht geändert hat:
Fatal error: Cannot use object of type stdClass as array in /homepages/44/d35513338/htdocs/design/cmsms/lib/smarty/plugins/modifier.sortby.php(33) : runtime-created function on line 1
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: AdvancedContent und CGSimpleSmarty?

Post by nockenfell »

Okay, dann müssen wir das StdClass Object aufbrechen. Ich habe das ganze mit einem UDT getestet und es funktioniert bei mir. (Lieber UDT, da dies keine Datei irgendwo in den Tiefen des Standards ist, welche ich sonst nicht zur Verfügung habe.

Menütemplate:

Code: Select all

{sortArray nodelist=$nodelist sort="-id" assign="newnodelist"}
{foreach from=$nodelist item=node}

   <h1> {$cgsimple->get_page_title($node->alias)} </h1>
  <p> {$cgsimple->get_page_content($node->alias)} </p>
  
{/foreach}


Folgenden UDT habe ich erstellt "sortArray":

Code: Select all

global $gCms;

function array_sort_by_fields(&$data, $sortby){
      static $sort_funcs = array();

    if (empty($sort_funcs[$sortby]))
    {
        $code = "\$c=0;";
        foreach (split(',', $sortby) as $key)
        {
           $d = '1';
              if (substr($key, 0, 1) == '-')
              {
                 $d = '-1';
                 $key = substr($key, 1);
              }
              if (substr($key, 0, 1) == '#')
              {
                 $key = substr($key, 1);
               $code .= "if ( ( \$c = (\$a['$key'] - \$b['$key'])) != 0 ) return $d * \$c;\n";
              }
              else
              {
               $code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return $d * \$c;\n";
            }
        }
        $code .= 'return $c;';
        $sort_func = $sort_funcs[$sortby] = create_function('$a, $b', $code);
    }
    else
    {
        $sort_func = $sort_funcs[$sortby];
    }
    uasort($data, $sort_func);
}

if (!isset($params['nodelist'])) {
	echo "UDT-feuShowMenu - Nodeliste des Menüs fehlt!";
	return;
}




// Schreiben welche Seiten sichtbar sind
$modnodelist = array();
foreach($params['nodelist'] as $node) {
      $array = array();
     foreach($node as $key => $value) {
         
         $array[$key] = $value;
 
	
}
$modnodelist[] = $array;
}

//print_r($modnodelist);



array_sort_by_fields($modnodelist, $params['sort']);


// Assign des Rückgabewertes
if(isset($params['assign'])) 
	$smarty->assign(trim($params['assign']), $modnodelist );
else
	return $modnodelist;

Möglicherweise geht dies auch mit dem Modifier von vorher:

Code: Select all

function smarty_modifier_sortby($arrData,$sortfields) {
 $modnodelist = array();
foreach($arrData as $node) {
      $array = array();
     foreach($node as $key => $value) {
         
         $array[$key] = $value;
 
	
}
$modnodelist[] = $array;
}
   array_sort_by_fields($modnodelist,$sortfields);
   return $modnodelist;
}
[this message is written with 100% recycled bits]
cyberman

Re: AdvancedContent und CGSimpleSmarty?

Post by cyberman »

Für deine Aufgabe ließe sich möglicherweise auch der tag {content_dump} verwenden / modifizieren - ergo 2 Module weniger ... damit könntest du einiges an Performance gut machen.
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: AdvancedContent und CGSimpleSmarty?

Post by nicmare »

cyberman wrote: Für deine Aufgabe ließe sich möglicherweise auch der tag {content_dump} verwenden / modifizieren - ergo 2 Module weniger ... damit könntest du einiges an Performance gut machen.
ich habs grad zum ersten mal ausprobiert und es klappt auf anhieb  ::)
ich werde damit noch mal bissl rumprobiern! hier ist ja glücklicherweise die doku angenehm umfangreich. was mir aber auf anhieb auffällt: man kann nur laut doku nach folgenden elementen sortieren:
id, title, created, modified, owner, hierarchy (default), id_hierarchy, lasteditor, active, show (show in menu)
Ich habe aber weitere content blöcke nach denen ich sortieren will. was nun?
cyberman

Re: AdvancedContent und CGSimpleSmarty?

Post by cyberman »

Das dachte ich mir schon ;), daher
cyberman wrote: Für deine Aufgabe ließe sich möglicherweise ... modifizieren
Aber so, wie ich Nils kenne, ist er für Verbesserungsvorschläge offen ...
Last edited by cyberman on Mon Sep 13, 2010 7:04 pm, edited 1 time in total.
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am

Re: AdvancedContent und CGSimpleSmarty?

Post by nicmare »

joa, zeit wird denn laut forge:
Notice: This project is marked as stale. This means that it may work fine, but it has no file releases or repository commits in over a year. Use your own discretion when using this project.
:D
Post Reply

Return to “Module und Tags”