Einbindung von Plugins in Joomla

Hast du Probleme oder Fragen bei der Einrichtung bestimmter Plugins ? Diese kannst du hier loswerden.
Antworten
bettes
Beiträge: 65
Registriert: 12. Mai 2008, 23:33
Kontaktdaten:

Einbindung von Plugins in Joomla

Beitrag von bettes »

Hallo zusammen,

ich habe nun nach vielen Monaten endlich mal die Zeit gefunden und Admidio auf die aktuelle Version geupdatet. Neben einigen Schwierigkeiten bei dem Update der Datenbank (-dem Forum sei Dank: Hier wurde schon einige Probleme gepostet und gelöst) habe mich um die Integration der Plugins in Joomla bemüht.

Ich möchte nun anderen Anwendern meine Erkenntnisse zum Einbinden der Plugins erläutern:

1. Damit alle Plugins auf der Joomla-Seite angezeigt werden können, müssen diese über das Joomla-Modul Wrapper auf die gewünschte Position gesetzt werden. Damit man am eigentlichen Plugin nicht zuviel umcoden muss, ist der Aufruf über eine vorgelagerte PHP-Datei sinnvoll. In der Datei efolgt so der Aufruf:

Code: Alles auswählen

	<?php
		include($_SERVER['DOCUMENT_ROOT']. "/adm_plugins/calendar/calendar.php");
	?>
Im Head-Bereich sollte man die nachfolgenden Stylesheets und Scripte wie folgt einbinden:

Code: Alles auswählen

<link rel="stylesheet" type="text/css" href="http://mitglieder.mv-mittelrode.de/adm_plugins/calendar/calendar.css" />
REM Ermöglicht die Ajax-Funktionen
<script type="text/javascript" src="http://deine_domäne.de/adm_program/libs/jquery/jquery.js"></script>
REM Nicht zwingend erforderlich
<script type="text/javascript" src="http://deine_domäne.de/adm_program/system/js/common_functions.js"></script>
REM Ermöglicht die Tooltipbox.
<script type="text/javascript" src="http://deine_domäne.de/adm_program/libs/tooltip/ajax-tooltip.js"></script> 

Bitte darauf achten, dass beim Einbinden der Scripte noch keine Admidio-Variable $_SERVER['DOCUMENT_ROOT'] definiert ist, deshalb am besten hart coden.


2. Durch das Einbinden der Plugins über joomla-Module kommt es aber bei den dargestellten Links oft zum Problem, dass die Hauptseite von Joomla verlassen. Auch wenn man Admidio mittels Component-Wrapper eingebunden hat, ist ein Ansteuern der einzelnen Admidio-Module wie z.B. dates.php so noch nicht möglich.

Dank eines Eintrages im joomlaportal-Forum gibt es aber eine Möglichkeit durch hacken des Wrapper-Modules, der Joomla-Komponente Wrapper noch zusätzliche Parameter auf den Weg zu geben:

So heißt es bei JoomlaExpert
http://www.joomlaexpert.com/index.php?o ... &Itemid=63
Pass Parameters to the Wrapper (13393 hits)
Written by Thomas Kahl
Have you ever needed to pass different parameters to your "wrapped" script?
Here is a flexible solution, which should work with all Wrapper-Items in mambo 4.5.1 & 4.5.2:

1. Make a backup of the file /components/com_wrapper/wrapper.php
2. Open the file in an editor and go to line 35.
3. Search for this text: $url = $params->def( 'url', '' );
4. Insert the following block AFTER the line:

foreach ($_GET as $key => $value) {
if ($key<>"option" && $key<>"Itemid") {
$url.=(strpos($url,"?")) ? "&" : "?";
$url.="$key=$value";
}
}
5. Save the file and test the solution in your browser.

This is for example a link to a special phpBB topic:
http://www.yourdomain.com/index.php?opt ... 110&t=3022
the corresponding URL in the Wrapper configuration is:
http://www.yourdomain.com/phpBB/viewtopic.php
the additional parameter "t" is passed to phpBB:
http://www.yourdomain.com/phpBB/viewtopic.php?t=3022
Damit kann man also dem Wrapper von aussen noch einen weiteren Parameter mitgeben.

3. Das Plugin muss man dann an den entsprechenden Stellen anpassen:

Für das Modul calender.php habe ich dazu folgende Änderungen vorgenommen:

Zeile 307:

Code: Alles auswählen

            if($ter_anzahl >> 0)
            {
                if($i <= 9)
                {
                    $plg_link = "http://www.deine_domäne.de/index.php?option=com_wrapper&Itemid=170&view=wrapper?date=$jahr$monat". "0". $i;
					$plg_link_target = "_top";
                }
                else
                {
                    $plg_link = "http://www.deine_domäne.de/index.php?option=com_wrapper&Itemid=170&view=wrapper?date=$jahr$monat$i";
					$plg_link_target = "_top";
                }
            }
An dieser Stelle muss der Aufruf mit target=_top erfolgen, da sonst der Link die Seite im iframe des Modules aufruft.
sowie neue Zeile 401:

Code: Alles auswählen

    if($i == $heute OR $i == $ter_aktuell OR $i == $geb_aktuell)
    {
        if($i != $ter_aktuell && $i == $geb_aktuell)
        {
            $plg_link = "#";
			$plg_link_target = "_self";
        }
        if($i == $ter_aktuell || $i == $geb_aktuell)
        {
            if($plg_ajaxbox == 1)
Die Geburtstage werden für nicht angemeldete User nicht verlinkt, das Plugin codiert dafür die betreffende aufrufende PHP-Datei. Damit in diesem Falle aber nicht die vorgeschaltete Datei für das Modul Wrapper als _top augerufen wird, sondern im betreffenden Modul-iframe erfolgt deshalb der Wechsel auf _self


4. Die Umstellung funktioniert auch mit bei Einsatz einer Komponente SEO bzw. SEF für suchmaschinenfreundliche URL. Hier ist dann die durch die SEF-Komponente übersetzte Adresse einzugeben.

Fakt ist, das durch diese Codierungen aus den jeweiligen Plugins durch Angabe der Parameter ?date=YYMMDD über den Joomla-Wrapper der jeweilige Termin an das jeweilige Admidio-Modul weitergereicht wird. Und das wichtigste daran ist: Die Hauptseiten von joomla werden nicht verlassen. Alles bleibt im Contentbereich von Joomla. Nachteilig ist dabei, dass sowohl in joomla als auch in admidio bei den Modulen ein Hack angewendet wurde.

Die nächsten Schritte:
Natürlich könnte man die Angabe der URL für die Joomla-Seite in die Config auslagern. Aber dies stellt nur einen nächsten Schritt dar. Vielleicht kann ja der jeweilige Plugin-Autor hier eine Erweiterung basteln. Danke schon mal an dieser Stelle.
Ich habe an dieser Stelle damit begonnen die Original-Komponente von Joomla als neue Komponente aufzusetzen. Damit würde dann der Core wieder korrekt sein und man läuft nicht in die Updatefalle. Ich werde hierzu später noch mal berichten.

Auf bald

Bettes
Hardy
Beiträge: 53
Registriert: 5. Feb 2007, 10:41
Kontaktdaten:

Beitrag von Hardy »

Hallo bettes,

vielen Dank für diesen tollen Beitrag. So etwas suche ich schon lange. Leider bin ich nicht so fit, was die Programmierung angeht. Ich kann vorhandenes anpassen und auch einiges herleiten, daher habe ich mich eben auch anhand Deiner Beschreibung mal daran gewagt.

Soweit hat das auch funktioniert. Ich musste zwar etwas öfter nachlesen und kombinieren, aber der Kalender wird in Joomla angezeigt.

Leider klappt das irgendwie aber mit dem Link aus dem Kalender in die Termine bzw. den ausgewählten Termin nicht. Funktioniert das denn bei Dir?

Ich habe wohl irgendwo einen Denkfehler, oder etwas vergessen. :?

Der Kalender ist ja mittels Wrapper in die Joomlaseiten integriert. Wenn ich auf einen Termin klicke, wird meins Wissen der link richtig zusammengesetzt, aber der ausgewählte Termin wird nicht angezeigt. Stattdessen erscheint eine Meldung: Die URL ist ungültig und kann nicht geladen werden.

Der Link sieht wie folgt aus: http://meine.domain.de/cms/index.php?op ... e=20100703

Itemid51 ist der Wrapper des Kalenders.

Da die Einträge im Kalender die Termine im Modul Dates von Admidio öffnen, habe ich auch schon einen weiteren Wrapper angelegt, der das Modul Dates öffnet und das ausgewählte Datum ergänzt, aber das funktioniert auch nicht. Statt des Datums erscheinen dann alle Termine, bzw. seltsamer Weise kommt manchmal die Anmeldeseite von Admidio.

Vielleicht hast Du ja noch eine Idee. Ich hoffe Du verstehst meine leihenhafte Beschreibung.

Danke
Viele Grüße Hardy
bettes
Beiträge: 65
Registriert: 12. Mai 2008, 23:33
Kontaktdaten:

Beitrag von bettes »

Hallo Hardy,

hast Du mal den Link ohne die Parameterübergabe getestet. Also ob der Aufruf
http://meine.domain.de/cms/index.php?op ... ew=wrapper auch funktioniert. Nach der Darstellung würde Dein Joomla im Unterverzeichnis meine.domain.de/cms installiert sein. Der Link muss auf die Joomla-Installation angepasst werden.

Dass Problem, mit der Anzeige aller Termine habe ich allerdings zur Zeit auch. Nach Ursache habe ich aber noch nicht geforscht. Aber ich habe momentan die Vermutung, dass hier ein Update der Joomla-Dateien die Ursache ist. Denn auch bei dem Aufruf aus der Dates-Liste kommt nur eine Liste aller Termine. Ich muss hier mal bei etwas mehr Zeit wieder die wrapper.php von Joomla prüfen und ggfs. anpassen.

Auf jeden Fall solltest Du mal den Pfad zu der "Wrapper-Seite" prüfen. Der scheint mir etwas unplausibel.

Gruß
Bettes
Benutzeravatar
fasse
Administrator
Beiträge: 6182
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Hallo zusammen,

bin gerade auch noch mal über diesen Beitrag gestolpert und dabei ist mir aufgefallen, dass wir hier garnicht erwähnt haben, dass dieser gute Beitrag mittlerweile mit Bettes Unterstützung bei uns in der Hilfe gelandet ist:
http://www.admidio.org/dokuwiki/doku.ph ... _einbinden

Hier kann er auch gerne weiter ergänzt werden.

An dieser Stelle noch einmal ein verspätetes Dankeschön an Bettes für die gute Arbeit.

Fasse
Hardy
Beiträge: 53
Registriert: 5. Feb 2007, 10:41
Kontaktdaten:

Beitrag von Hardy »

Hallo bettes,

danke für die schnelle Antwort.
Also Du hast schon recht, mein Joomla ist im Unterordner /CMS installiert, von daher ist der Link doch richtig. (das sollte doch eigentlich kein Problem darstellen, oder?) :cry: (ist nur ein Testsystem auf dem noch andere Installationen laufen/getestet werden)

In der config.php des Calendar Plugins von Admidio kann man die "Prefix-Url für den Aufruf in Joomla" eintragen. Wenn ich da den Wrapper vom CalendarPlugin nehme, dann bekomme ich die Fehlermeldung: Die URL ist ungültig und kann nicht geladen werden.
Prefix: $plg_link_url = 'http://meine.domain.de/cms/index.php?op ... &Itemid=50';

Nehme ich den Wrapper vom AdmidioModul Dates, dann funktioniert zwar der Link, aber ich muss mich jedes Mal in Admidio neu anmelden.
Prefix: $plg_link_url = 'http://hardyhome.dnsalias.org/form/inde ... &Itemid=46';
Nach der Anmeldung funktioniert der Link aus dem CalendarPlugin 1x ohne Anmeldung, zeigt aber nur alle kommenden Termine und nicht nur den ausgewählten, obwohl der Parameter mit dem Datum im Link übergeben wird.

Wird ein weiteres Datum aus dem CalendarPlugin ausgewählt, kommt erneut die Anmeldeseite von Admidio. Irgendwie vergisst er die aktuell angemeldete Sitzung.
Setze ich den Haken bei "angemeldet bleiben" werden statt dem CalendarPlugin nur noch php Fehler angezeigt.

Im Admidio theme_modern funktioniert alles prima aus dem CalendarPlugin, auch die einzelnen Termine werden richtig angezeigt. Es scheint wohl doch nicht so einfach mit der Integration in Joomla
Schade eigentlich, das hat so erfolgversprechend angefangen.

Naja, vielleicht brauche ich erst mal bischen Abstand und finde dann einen dummen Flüchtigkeitsfehler. Nochmals Danke für Deine Mühe, vielleicht fällt Dir ja noch was ein.

Gruß Hardy

PS. Ich hatte zuerst Version 2.1.8 und dann upgedatet auf 2.1.10, aber Fehler war genau gleich, am Update kanns wohl nicht liegen.
Hardy
Beiträge: 53
Registriert: 5. Feb 2007, 10:41
Kontaktdaten:

Beitrag von Hardy »

Hallo zusammen,

ich habe jetzt mal wieder Zeit gehabt zu testen und bei einem 2. Projekt ist mir jetzt der Fehler aufgefallen.

Im Link fehlte ein &
http://meine.domain.de/cms/index.php?op ... ew=wrapper? &date=20100703

Habe daraufhin noch einmal die config.php und die calendar.php überprüft und das & in der config.php im Link-Präfix ergänzt.
Jetzt tuts einwandfrei.

Habe inzwischen auch das Plugin sidebar_dates angepasst. (die config.php und sidebar_dates.php)
Vielleicht könnte man auch das zukünftig mit aufnehmen damit man nicht in die "Updatefalle" tappt.


Folgendes habe ich im Plugin Sidebar_dates ergänzt/geändert:
In der config.php:

neue Zeilen 32, 33und 34 eingefügt:

32 // Angabe der Prefix-Url für den Aufruf in Joomla
33 // wenn keine Angabe erfolgt dann wird die Standard-URL von Admidio verwendet
34 $plg_link_url = ' ';

Zeile 34 könnte so aussehen: $plg_link_url = 'cms/index.php?option=com_wrapper&view=wrapper&Itemid=55 ';
Je nach dem, ob Admidio und Joomla auf der selben Domain liegen, oder nicht. Und welche Itemid der Admidiokalender im Wrapper_Modul von Joomla bekommen hat.


In der sidebar_dates.php wurde folgendes geändert/ergänzt:

Zeile 66 bis 70 neu eingefügt:

66 // eingefügt für Joomla:
67 if(isset($plg_link_url) == false || ($plg_link_url) =='')
68 {
69 $plg_link_url = $g_root_path.'/adm_program/modules/dates/dates.php?id=';
70 }


Zeile 141 wurde wie folgt geändert:

$g_root_path. '/adm_program/modules/dates/dates.php?id='. wurde entfert und durch
. $plg_link_url. ' &id='. ersetzt, so dass die Zeile jetzt so aussieht:

141 echo $plg_html_end_date. '<br /><a class="'. $plg_link_class. '" href="'. $plg_link_url. ' &id='. $plg_date->getValue("dat_id"). '" target="'. $plg_link_target. '">';


Zeile 171 wurde wie folgt geändert:

$g_root_path. '/adm_program/modules/dates/dates.php" target="'. wurde entfernt und durch:
$plg_link_url. '" target="'. ersetzt so dass die Zeile dann wie folgt aussieht:

171 echo '<a class="'. $plg_link_class. '" href="'. $plg_link_url. '" target="'. $plg_link_target. '">Alle Termine</a>';


So, das wars mal fürs erste.

Gute Nacht
:shock:
Antworten