Joomla! Forum Schweiz wird Teil der D-A-CH Community

Nach vielen Jahren als zentrale Anlaufstelle für Fragen rund um Joomla! in der Schweiz wird das Joomla! Forum Schweiz künftig als Archiv weitergeführt.

Die Joomla!-Communities aus Deutschland, Österreich und der Schweiz arbeiten heute enger denn je zusammen. Deshalb bündeln wir künftig auch den deutschsprachigen Support und Austausch an einem gemeinsamen Ort im Joomla! D-A-CH Forum.

Für neue Fragen, Diskussionen und den Austausch mit der Community nutzt bitte ab sofort:

forum.joomla.de

Das Joomla! Forum Schweiz bleibt weiterhin bestehen und wird als Archiv im Lesemodus erhalten. Die vielen Beiträge, Lösungen und Erfahrungen aus den vergangenen Jahren bleiben damit weiterhin zugänglich und über die Suche auffindbar.

Wir bedanken uns herzlich bei allen Mitgliedern, Moderatoren und Helfern, die das Schweizer Joomla! Forum über viele Jahre mit ihrem Wissen und ihrem Engagement geprägt haben.

Wir sehen uns im Joomla! D-A-CH Forum!

Jumi

Mehr
01 März 2013 21:08 #36213 von hagu81
Jumi wurde erstellt von hagu81
Hallo. Ich habe folgendes Problem.
Ich habe Jumi installiert. Nun versuche ich ziemlich simpel in einem Jumi-Modul auf "Position-2" eine Variable zu setzten.
Die Variable habe ich auf global gesetzt.

Nun möchte ich auf einem Jumi-Modul auf "Position-7" auf die Variable zugreifen. Doch dort scheint die Variable nicht bekannt zu sein.
Wieso?

Webhosting Pakete vergleichen: Webhosting Vergleich
Website erstellen lassen www.gregorvogel.ch/website-erstellen-lassen
Willst Du dir ein neues Laptop kaufen?
Mehr
02 März 2013 13:03 #36218 von Tribal6
Tribal6 antwortete auf Jumi
Wird denn das Modul in dem die Variable gesetzt wird VOR demjenigen aufgerufen, das sie auslesen möchte?

Hast du das schon gecheckt? Weil andersrum bringts nicht viel...

Tue das, was du kannst, mit dem was du hast, da wo du bist.
Mehr
02 März 2013 15:03 #36219 von hagu81
hagu81 antwortete auf Jumi
hallo, danke für deine Antwort.

Natürlich habe ich das gecheckt. Auch eine Funktion ist nicht mehr vorhanden. In beide Richtungen nicht.

Webhosting Pakete vergleichen: Webhosting Vergleich
Website erstellen lassen www.gregorvogel.ch/website-erstellen-lassen
Willst Du dir ein neues Laptop kaufen?
Mehr
02 März 2013 18:26 #36220 von Tribal6
Tribal6 antwortete auf Jumi
Lokale Variablen als global zu deklarieren finde ich persönlich nur sub-optimal, und kann recht fehleranfällig sein. Je nach Namen kann/könnte sie mit einer schon vorhandenen gleichnamigen Variablen im globalen Namensraum kollidieren, oder auch 'später' durch eine gleichnamige Var in einem anderen Script überschrieben werden. Mindestens den Namen entsprechend zu prefixen wäre was, z.B $haguJumiVar1.

Besser wäre es aber, wenn du dazu die JRegistry-Klasse oder auch die User-Session verwendest. Denn für solche Dinge sind die da. Auch JRequest könnte man dazu 'missbrauchen'. Oder halt auch ein Cookie setzten und wieder auslesen, wenn's denn sein muss. Oder wenn du eine eigene Klasse oder Funktion verwendest könntest du auch statische Variablen verwenden. Oder auch eigene Konstanten definieren
Code:
if(!defined('JUMI_VAR_1') {define('JUMI_VAR_1','wert');}
denn Konstanten sind ja bekannterweise auch global 'sichtbar'. Beinhalten aber so verwendet allerding auch wiederum ein ähnliches Gefahrenpotenzial wie globale Variablen.

Wobei ich mich dabei frage, was genau du in Modul 1 definieren und nach Modul 2 schieben willst, anstelle gleich alles in Modul 2 ablaufen zu lassen.

Bei
Roger

Tue das, was du kannst, mit dem was du hast, da wo du bist.
Mehr
03 März 2013 18:03 #36225 von hagu81
hagu81 antwortete auf Jumi
Danke für deine ausführliche Antwort.

Es ist mir klar, dass ich mich auf die Namensvergabe der Variable achten muss.
Ich möchte in einem Modul, welches ich als erstes aufrufe, eine Verbindung zu einer Datenbank herstellen.
In Modulen, welche ich später aufrufe, möchte ich die Daten aus der Datenbank ausgeben.

Das ganze soll ohne allzugrossen Aufwand entstehen. Es wird auch nur für interne Zwecke verwendet. Sicherheit steht da nicht an erster Stelle.

Joomla mit Jumi scheint mir da eine Lösung zu sein, um sowas schnell zu bewerkstelligen.

Ich finde es aber merkwürdig, dass weder eine Variable, noch eine Funktion oder eine Klasse im nächsten Modul vorhanden ist.

Webhosting Pakete vergleichen: Webhosting Vergleich
Website erstellen lassen www.gregorvogel.ch/website-erstellen-lassen
Willst Du dir ein neues Laptop kaufen?
Mehr
03 März 2013 23:52 #36226 von hagu81
hagu81 antwortete auf Jumi
Ich habe das gerade mit Joomla 2.5.8 getestet.
Da funktionieren globale Variablen problemlos.
Wieso aber nicht unter Joomla 3?

Webhosting Pakete vergleichen: Webhosting Vergleich
Website erstellen lassen www.gregorvogel.ch/website-erstellen-lassen
Willst Du dir ein neues Laptop kaufen?
Mehr
04 März 2013 12:43 #36228 von Tribal6
Tribal6 antwortete auf Jumi
Weil wie schon erwähnt, lokale Variablen als global setzen unzuverlässig ist. Du siehts es ja. Das hab ich bisher noch nie irgendwo verwendet, und werde das auch nie tun. Das ist noch aus der Zeit, als PHP weniger Objekt-Orientiert war, und gilt schon länger als 'bad' oder 'poor' practice.

Da gibt es seit PHP5 und insbesondere im Joomla-Framework geeignetere und weitaus bessere Möglichkeiten. Ein paar hab ich dir aufgezählt. Und eine vergessen:
Den eingebauten Caching-Mechanismus von Joomla (JCache), der z.B. von fast allen Core-Modulen genutzt wird. Ermöglicht ein Session unabhängiges Caching.

Ein Beispiel:
Die Daten in die Usersession schreiben. Ist simpel, und ein Caching (Lebensdauer der Session) ist auch gleich mit dabei:

Datengenerierung:
Code:
$sessionData = JFactory::getApplication()->getUserState('mod_meinmodul.daten', false); if(false === $sessionData) { // Noch keine Daten vorhanden: generieren und in Session schreiben $dbDaten = [DATEN]; $jsonData = json_decode($dbDaten); JFactory::getApplication()->setUserState('mod_meinmodul.daten', $jasonData); }

Daten wieder auslesen:
Code:
$jsonDaten = JFactory::getApplication()->getUserState('mod_meinmodul.daten', json_decode(array()); $dbDaten = json_encode($jasonDaten);

Tue das, was du kannst, mit dem was du hast, da wo du bist.
Mehr
05 März 2013 19:26 #36234 von hagu81
hagu81 antwortete auf Jumi
Besten Dank für dein Beispiel.
Doch auch das funktioniert leider nicht.

Modul auf 'position-2'
Code:
<?php $sessionData = JFactory::getApplication()->getUserState('mod_jumi.daten', false); if(false === $sessionData) { // Noch keine Daten vorhanden: generieren und in Session schreiben $dbDaten = 'Hallo Welt!'; $jsonData = json_decode($dbDaten); JFactory::getApplication()->setUserState('mod_jumi.daten', $jasonData); } ?>

Modul auf 'position-7'
Code:
<? $jsonDaten = JFactory::getApplication()->getUserState('mod_jumi.daten', json_decode(array()); $dbDaten = json_encode($jasonDaten); ?>

Was mache ich falsch?

Webhosting Pakete vergleichen: Webhosting Vergleich
Website erstellen lassen www.gregorvogel.ch/website-erstellen-lassen
Willst Du dir ein neues Laptop kaufen?
Mehr
05 März 2013 22:27 #36235 von Tribal6
Tribal6 antwortete auf Jumi
Du nix. Ich schon:
Es haben sich da zwei Fehler eingeschlichen. Damit müsste es gehen:
Code:
<?php $app = JFactory::getApplication(); $sessionData = $app->getUserState('mod_jumi.daten', false); if(false === $sessionData) { // Noch keine Daten vorhanden: // generieren und in Session schreiben $dbDaten = 'Hallo Welt!'; $jsonData = json_encode($dbDaten); $app->setUserState('mod_jumi.daten', $jsonData); } ?>
und
Code:
<?php $jsonDaten = JFactory::getApplication()->getUserState('mod_jumi.daten', json_encode(array())); $dbDaten = json_decode($jsonDaten); echo $dbDaten; ?>

Ich habe mir die Jumi-Module mal geholt und installiert. Der Code wird da mit eval() ausgeführt, jedenfalls in der Version für 2.5. Und dieses eval() hat auch so seine Besonderheiten, was den Namensraum von Variablen betrifft.
php.net/manual/de/function.eval.php

Ob das mit dem JSON-String nötig ist, und welchen default-Wert die Session-Daten haben sollten, musst du wissen, je nach Datengrösse, -Struktur und -Art, und Code für die Auswertung/Anzeige.

Mir viel noch was auf:
Die Module haben ja auch ein Caching. Würd ich ausschalten, wenn du das so wie oben mit der User-Session verwendest. Tipp zum testen: eine neue Session im Frontend gibt's immer jeweils beim Ausloggen.

Tue das, was du kannst, mit dem was du hast, da wo du bist.
Moderatoren: pascaleadiheutschi.chTribal6RePaoDragonlordChris Hoefliger
Powered by Kunena Forum

Joomla! Verband Schweiz - Mitglied werden