Page 1 of 1

[gelöst ]Parameter zwischen index.tpl und entries.tpl

Posted: Tue Sep 29, 2015 11:46 am
by reinhardl
Hallo,
ich habe in der index.tpl einen Aufruf wie folgt:

Code: Select all

{if $startpagerow.thedesign =='design1'}
   {serendipity_fetchPrintEntries limit="0,3"  entryprops="ep_EntryPicture != ’’" category=$startpagerow.kategorie noCache=false fetchDrafts=false full=false use_footer=false template="entries_3boxes.tpl"} 
{/if}
in der Datei entries_3boxes.tpl benötige ich aber nun den Inhalt aus $startpagerow.thedesign.
Also wollte ich dieses mit folgender Funktion in der config.inc.php realisieren:

Code: Select all

function smarty_function_global($params, &$smarty) {
  global $serendipity;
   if (isset($params['put']))
     $serendipity[$params['put']] = $params['value']; 
	 
  if(isset($params['get'])
    return $globals[$params['get']]; 	    
}
$serendipity['smarty']->registerPlugin('function', 'global', 'smarty_function_global'); 


in den .tpl Dateien wollte ich dann über

Code: Select all

	
{global put=foo value="hallo"}
{global get=foo}
zugreifen. Funktioniert aber nicht. Irgendwie ist die return Zeile falsch oder funzt das grundsätzlich nicht?

Danke
Reinhard

Re: Parameter zwischen index.tpl und entries.tpl

Posted: Tue Sep 29, 2015 2:36 pm
by Timbalu
Da fehlte zumindest eine Klammer und auch das $globals war zumindest unnötig.
Auch scheint das put foo var zum globalen Serendipity array unsinnig... wie willst du wo später darauf zugreifen?
Meinst du also eher das hier?

Code: Select all

function smarty_function_global($params, Smarty_Internal_Template $template) {
    if (isset($params['put'])) {
         // assign variable to template object scope
         $template->assign($params['put'], $params['value']);
    }

    if (isset($params['get'])) {
        return $params['get'];
    }
}

Code: Select all

{global put='foo' value='hallo'}
{if isset($foo)}{$foo}{/if}
{global get='foo'}
(Ohne mich mit dem eigentlichen Sinn und Zweck und der Namensgebung näher beschäftigt zu haben)

Re: Parameter zwischen index.tpl und entries.tpl

Posted: Tue Sep 29, 2015 4:46 pm
by reinhardl
hmmm

wenn ich die Funktion in der index.tpl aufrufe

Code: Select all

{global put='foo' value='hallo'}
{if isset($foo)}{$foo}{/if}
{global get='foo'}
hat foo den wert "hallo"

Die index ruft
{include file='include/include_content3box.tpl'}
auf.
In der include_content3box.tpl hat foo auch den Wert "hallo"

In include_content3box.tpl der wird entries_3boxes.tpl mittels serendipity_fetchPrintEntries aufgerufen:

Code: Select all

{serendipity_fetchPrintEntries limit="0,3"  entryprops="ep_EntryPicture != ’’" category=$startpagerow.kategorie noCache=false fetchDrafts=false full=false use_footer=false template="entries_3boxes.tpl"} 
in der entries_3boxes.tpl ist foo leer

Re: Parameter zwischen index.tpl und entries.tpl

Posted: Tue Sep 29, 2015 5:36 pm
by Timbalu
reinhardl wrote:hat foo den wert "hallo"
aber das wolltest du doch... du hattest put foo als $serendipity['foo'] mit dem value "hallo" definiert, oder? (Nur, dass das wahrscheinlich nie wirklich gearbeitet hätte..)
Ich verstehe immer noch nicht wirklich worauf das alles hinausläuft.
reinhardl wrote:In der include_content3box.tpl hat foo auch den Wert "hallo" ... [aber] ... in der entries_3boxes.tpl ist foo leer
Das liegt daran, dass das ein völlig anderer scope ist.
Du könntest es also dort vielleicht mit scoping versuchen

Code: Select all

Example 7.13. {assign} a global variable

A global variable is seen by all templates.


{assign var=foo value="bar" scope="global"}
{assign "foo" "bar" scope="global"} {* short-hand *}
und das vor dem {serendipity_fetchPrintEntries ...}

[gelöst} Re: Parameter zwischen index.tpl und entries.tpl

Posted: Tue Sep 29, 2015 6:24 pm
by reinhardl
{assign var=foo value="bar" scope="global"}

funktioniert auch. Hattes es ohne scope ausprobiert und deshalb die funktion schreiben wollen. Meine Unwissenheit ....

Danke!!

Re: Parameter zwischen index.tpl und entries.tpl

Posted: Tue Sep 29, 2015 6:32 pm
by Timbalu
Es gäbe auch noch scope="parent", scope="root" und wie gezeigt scope="global" als letzte Steigerung. Vielleicht testest du mal durch, ob nicht auch schon ein vorheriger scope level ausreicht, und berichtetst hier davon.

Re: [gelöst ]Parameter zwischen index.tpl und entries.tpl

Posted: Wed Sep 30, 2015 10:46 am
by reinhardl
habs ausprobiert

parent funktionierte nicht!
root und global funktionieren

Code: Select all

{assign var=textlaenge value=$startpagerow.truncated_qty scope="root"}
{if $startpagerow.thedesign =='design1'}
   {serendipity_fetchPrintEntries limit="0,3"  entryprops="ep_EntryPicture != ’’" category=$startpagerow.kategorie noCache=false fetchDrafts=false full=false use_footer=false template="entries_3boxes.tpl"} 
{/if}
ich nehme dann mal root

Re: [gelöst ]Parameter zwischen index.tpl und entries.tpl

Posted: Wed Sep 30, 2015 10:54 am
by Timbalu
Ja, besser!

Bei

Code: Select all

entryprops="ep_EntryPicture != ’’"
solltest du wirklich einfache (echte) single quotes verwenden, sonst kann das eventuell schiefgehen, siehe

Code: Select all

entryprops="ep_EntryPicture != ''"
Es ist wichtig einen guten Editor (wie zB Notepad++) zu nehmen, sonst baut man sich so leicht Fehler ein.