Page 1 of 1

CGSimpleSmarty code im editor

Posted: Mon May 24, 2010 10:30 am
by antibart
Hallo,


Ist es eiegntlich möglich, SmartyCode mit CGSimpleSmarty auch im Editor anzuwenden, nicht nur in Templates.

Also sowas zB:

Code: Select all

{if $cgsimple->get_root_alias() == 'home'}
<a href="{$parent_lang}/news-1.html">mehr...</a>
{else}
<a href="{$parent_lang}/news-2.html">mehr...</a>
{/if}
.. bislang zerschießt mir der Editor den Code (auch wenn ich in den Einstellungen "Bereinigung des Codes" deaktiviere)

Re: CGSimpleSmarty code im editor

Posted: Mon May 24, 2010 12:22 pm
by NaN
Das Problem wird dieses $cgsimple->get_root_alias() sein.
Weil diese Zeichen vom Tiny als HTML Zeichen interpretiert werden.
Das gleiche Problem hat man auch, wenn man folgendes prüfen will:

Code: Select all


{if $foo > $bar}

deshalb sollte man in solchen Fällen besser

Code: Select all


{if $foo gt $bar}

verwenden.
Wie man das nun bei Objekten macht weiß ich leider nicht.
Habe dazu auf die Schnelle auch nichts in der Smarty Doku gefunden.

In PHP 5.3 soll man ja auch so auf Objekte zugreifen können:

Code: Select all


$foo::bar();

Das soll wohl auch bereits seit Februar im SVN der aktuellsten Smarty Version enthalten sein, sodass man auch in Templates so auf Objekte zugreifen kann:

Code: Select all


{$cgsimple::get_root_alias()}

Dadurch hätte man unter anderem auch das Problem mit den WYSWYG Editoren nicht mehr.
Wann das offiziell wird bzw. wann bei CMSms die Smarty Version aktualisiert wird, weiß ich allerdings noch nicht.
(Und es würde dann definitiv nur ab PHP 5.3 funktionieren)

Das Einfachste wäre, wenn Du vor dem Inhalt im Template das Root-Alias bereits einer Variablen zuweisen würdest:

Code: Select all


{$cgsimple->get_root_alias($page_alias,'root_alias')}
{content}

und dann im Editor nur noch so prüfst:

Code: Select all


{if $root_alias == 'home'}


Re: CGSimpleSmarty code im editor

Posted: Tue May 25, 2010 7:51 am
by antibart
Vielen Dank, NaN,

ich werde das mal testen .. und ja klar: es sind immer diese ">" Zeichen, die vom Editor geschrotet werden.

Der Grund, warum ich das unbedingt im Editor und nicht im Template nutzen muss, ist, dass es sich um eine MLE-Website handelt und dieser Content einen mehrprachigen Link in einem globalen Inhaltsblock enthält, der aber auf unterschiedliche Ziele verweist. Ich brauch den Code also im globalen Inhaltsblock.... 

Re: CGSimpleSmarty code im editor

Posted: Tue May 25, 2010 9:07 pm
by cyberman
Aus diesem Grund packe ich derartige Smarty-Logik lieber ins Template ;) ...

Re: CGSimpleSmarty code im editor

Posted: Tue Jun 01, 2010 3:05 pm
by antibart
cyberman wrote: Aus diesem Grund packe ich derartige Smarty-Logik lieber ins Template ;) ...
Ich auch. Was aber ja  in diesem Fall - wie gesagt - nicht geht, da ich dann keine Übersetzungen mehr habe ;)

Re: CGSimpleSmarty code im editor

Posted: Tue Jun 01, 2010 3:44 pm
by NaN
Wie wäre es mit einem kleinen UDT?
Sozusagen als "Wrapper" für das cgsimple-Objekt?

(hab den code nicht getestet, ist nur eine Idee)

Code: Select all


$global $gCms;

if(isset($gCms->variables['cgsimple'])) {
	
	$alias = '';
	if(isset($params['alias']))
		$alias = $params['alias'];
		
	$root_alias = $gCms->variables['cgsimple']->get_root_alias($alias);
	
	if (isset($params['assign'])) {
		$gCms->smarty->assign($params['assign'], $root_alias);
		return;
	}
	else
		echo $root_alias;
}

Wenn man das Ganze unter "Erweiterungen->Benutzerdefinierte Tags" als "get_root_alias" speichert, könnte man im Editor folgendermaßen vorgehen:

Code: Select all


{get_root_alias assign="root_alias"}
{if $root_alias == 'home'}
<a href="{$parent_lang}/news-1.html">mehr...</a>
{else}
<a href="{$parent_lang}/news-2.html">mehr...</a>
{/if}


Re: CGSimpleSmarty code im editor

Posted: Wed Jun 02, 2010 10:32 am
by antibart
Das klingt schon mal sehr gut. Danke Dir. Werde das demnächst testen und mitteilen, wie es funktioniert.