Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 03. Februar 2014 19:22

simonson
kennt CMS/ms
Ort: Wien
Registriert: 07. März 2012
Beiträge: 192

Variable definieren und an UDT übergeben

Hallo Gemeinde,
ich rufe eine Fotogalerie mit
<div class="mygallery" title="Q_2010"></div>
funktioniert soweit gut.

Habe einen UDT, der im prinzip das gleiche tut:

echo '<div align="center" style="background-color:#FFF;">'.'<br />';
echo '<table width="auto">'.'<tr>'.'<td>'; 
echo '<div  class="mygallery"  title="Q_2010">'.'</div>';
echo '</td>'.'</tr>'.'</table>'; 
echo '</div>';

Nun möchte ich gerne den UDT mit der Übergabe der Variablen "titel" aufrufen,
damit ich mit unterschiedlichen UDT's verschieden Galerieformate aufrufen kann.
Habe dazu bisher leider keine erfolgreiche Lösung gefunden.
Könnt ihr helfen?

P.S.: könnte ich auch {title} (aus dem Template) irgendwie übergeben?

Dank vorab!


mfg
simonson

CMSMS 1.12     Apache/2.4.6 (Linux/SUSE) - PHP 5.4.20 - MySQL 5.0.95 - W7 ultimate - FF 38.0.1

Offline

#2 03. Februar 2014 21:02

Klenkes
Server-Pate
Ort: 89428 Syrgenstein
Registriert: 17. Dezember 2010
Beiträge: 1.437

Re: Variable definieren und an UDT übergeben

Du musst gar nichts spezielles machen.

Einfach im Aufruf:

Und im UDT mit:

darauf zugreifen.

Offline

#3 04. Februar 2014 23:16

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: Variable definieren und an UDT übergeben

{title} kennt einen Parameter assign, und auf Smarty-Variablen kannst du via PHP so zugreifen

http://www.smarty.net/docs/en/api.get.template.vars.tpl

wobei das allerdings quasi von hinten durch die Brust ins Auge gezielt wäre tongue .

Auf den Titel kannst du auch so zugreifen

	$gCms = cmsms();
	$contentobj = $gCms->variables['content_obj'];
        $title = cms_htmlentities($contentobj->Name());

Offline

#4 04. Februar 2014 00:42

simonson
kennt CMS/ms
Ort: Wien
Registriert: 07. März 2012
Beiträge: 192

Re: Variable definieren und an UDT übergeben

@Klenkes
babyleicht - wenn man's weiß ;-) Vielen Dank!

@cyberman
komme leider mit deinen Vorschlägen nicht klar.
wie geht das mit assign?
php wird ja nicht mehr unterstützt muss ich dann "getTemplateVars" in einen UDT packen?
der code-schnipsel muss aj wohl in einen UDT?


mfg
simonson

CMSMS 1.12     Apache/2.4.6 (Linux/SUSE) - PHP 5.4.20 - MySQL 5.0.95 - W7 ultimate - FF 38.0.1

Offline

#5 05. Februar 2014 11:50

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: Variable definieren und an UDT übergeben

Gemeint war folgendes - du kannst natürlich von PHP aus auf jede beliebige Smarty-Variable zugreifen. Hier mal anhand des Beispiels des Titels

Zuweisung der Ausgabe an eine Variable

Diese Variable stünde dir dann unter {$titel} zur Verfügung. Via PHP kannst du dann so auf diese Variable zugreifen

$titel = $smarty->getTemplateVars('titel');

Natürlich muss das ganze dann in einen UDT rein.

Dies ist jedoch wie gesagt doppelt gemoppelt und schlecht für die Performance

-> PHP liefert einen Wert an Smarty
-> du weist den Wert einer Smarty-Variablen zu
-> diesen Wert liest du via PHP wieder aus

Daher ist es performanter, das in meinem Vorposting genannte Snippet (stammt aus dem title-Plugin) direkt in den UDT einzubauen.

Offline

#6 05. Februar 2014 13:00

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: Variable definieren und an UDT übergeben

cyberman schrieb:

Auf den Titel kannst du auch so zugreifen

	$gCms = cmsms();
	$contentobj = $gCms->variables['content_obj'];
        $title = cms_htmlentities($contentobj->Name());

Würde ich so besser nicht machen. Dürfte in einer Fehlermeldung enden. $gCms->variables ist eine interne Variable.

Wenn es um den Titel der aktuellen Seite geht, dann holt man sich die Variable {$content_obj} im UDT am besten mit Hilfe der Klasse "cms_utils".

$title = cms_htmlentities(cms_utils::get_current_content()->Name());

Das wäre derzeit der offizielle Weg.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#7 05. Februar 2014 13:30

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: Variable definieren und an UDT übergeben

Das wäre derzeit der offizielle Weg.

Hmm, dies würde aber im Umkehrschluss bedeuten, dass der title Tag (von genau da stammt das Snippet)  einen inoffiziellen/illegale Zugriff verwendet und nach den Forge Regeln sofort aus dem aktuellen Release zu entfernen wäre cool .

Schon bedenklich, dass die Devs es mit ihren eigenen Regeln nicht so genau nehmen roll

Offline

#8 05. Februar 2014 14:57

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: Variable definieren und an UDT übergeben

Naja, aber {title} ist doch ein Core-Plugin. Sonst müsste nach Deiner Logik auch ca. 90% des gesamten Core-Codes aus dem Forge fliegen, weil dort ständig auf interne Variablen zugegriffen wird roll 

Die Devs können in ihrem Code doch machen, was sie wollen. Nur eben Dritte sollten sich an die Regeln halten und die offiziellen Schnittstellen nutzen, damit der Code stabil bleibt, für den Fall, dass die Devs etwas ändern.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#9 06. Februar 2014 03:22

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: Variable definieren und an UDT übergeben

Natürlich können sie das  tongue , nur macht es Dritten das Einarbeiten unnötig schwer ...

Offline

#10 06. Februar 2014 20:29

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: Variable definieren und an UDT übergeben

nur macht es Dritten das Einarbeiten unnötig schwer ...

Warum?
Ob man im Code wühlt und guckt wie andere es machen, oder ob man API Docs studiert ... wäre mir egal.
Die Sache ist doch die, sollten die Devs entscheiden irgendeine interne Variable umzubenennen, dann funktionieren alle PHP Schnipsel nicht mehr, die darauf zugreifen.
Hat man aber eine öffentliche API-Funktion, die diese Variable zurückgibt, dann ist es wurscht, wie die Variable heißt. Ich muss den eigentlichen Namen einer Variable nicht kennen, wenn es eine Methode dafür gibt, um sich den Wert dieser Variable zu holen.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#11 07. Februar 2014 05:03

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: Variable definieren und an UDT übergeben

Damit hast du natürlich recht. Stimme dir da vollkommen zu.

Bin halt nur von mir als PHP Laie ausgegangen.

Wenn mein Auto nicht anspringt, schau ich natürlich als erstes in den Motorraum. Bei PHP sind's eben die  Sourcen. Und für einen Lerneffekt hielte ich es (für mich persönlich) besser, wenn die Core Sourcen Vorbild wären und sich an den propagierten offiziellen Weg hielten.

Beim Auto hab ich ja auch nicht permanent das Handbuch dabei cool .

Offline