Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#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:
{UDT titel="wasauchimmer"}
Und im UDT mit:
$params['titel']
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 .
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
{title assign='titel'}
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
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 .
Schon bedenklich, dass die Devs es mit ihren eigenen Regeln nicht so genau nehmen
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
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 , 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 .
Offline
Seiten: 1