Hallo ...
Ich bin Joomla Anfänger und habe mich immer davor gescheut, Joomla zu nutzen, weil es mir zu unprofessionell erschien.
Eine Auftrag zwang mich nun dazu, mich mit Joomla auseinanderzusetzen. Am Anfang war ich positiv überrascht, da mir die Struktur des Programms doch mehr und mehr gefiel.
Dann begann das Chaos mit Konflikten einiger Module ... immer iweder gab es Fehler und unerwünschte Effekte: mal ist es Mootools, was in Joomla selbst als alte Version drinsteckt, dann ist es jQuery welches von vielen Modulen genutzt wird .. wie zum Beispiel Superfischmenu. Aber auch mit internen Funktionen gab es dann Probleme: die Lightbox die durch das einbinden der modal.js erst möglich ist, ist (glaube ich) auch nur mit jQuery möglich. Ich habe dann die Slimbox gefunden, und diese in den CORE (behavior.php) versucht einzubinden.
auch war es notwendig diese Datei zu bearbeiten, um Mootools auf die aktuelle Version zu bekommen. Das Problem ist wohl, dass das Backend Mootools 1.1 benötigt.:
PHP-Code:
if ($debug || $konkcheck) {
JHTML::script('mootools-uncompressed.js', 'media/system/js/', false);
} else if ($mainframe->getClientId()==1) {
JHTML::script('mootools.js', 'media/system/js/', false);
} else {
JHTML::script('mootools-1.2.4-core.js', 'media/system/js/', false);
JHTML::script('mootools-1.2.4.4-more.js', 'media/system/js/', false);
}
Slimbox habe ich so in die behavior.php eingefügt:
Bin mir aber sicher, dass die Parameter noch angepasst werden müssen, weil diese noch aus der Kopie von der funktion "modal" ein überbleibsel sind.
vorher müssen natürlich noch die slimbox.js und slimbox.css in die jeweiligen Ordner des media-Ordners kopiert und angepasst werden.
PHP-Code:
function slimbox($selector='a.modal', $params = array())
{
static $slimbox;
static $included;
$document =& JFactory::getDocument();
// Load the necessary files if they haven't yet been loaded
if (!isset($included)) {
// Load the javascript and css
JHTML::script('slimbox.js');
JHTML::stylesheet('slimbox.css');
$included = true;
}
if (!isset($slimbox)) {
$slimbox = array();
}
$sig = md5(serialize(array($selector,$params)));
if (isset($slimbox[$sig]) && ($slimbox[$sig])) {
return;
}
// Setup options object
$opt['ajaxOptions'] = (isset($params['ajaxOptions']) && (is_array($params['ajaxOptions']))) ? $params['ajaxOptions'] : null;
$opt['size'] = (isset($params['size']) && (is_array($params['size']))) ? $params['size'] : null;
$opt['onOpen'] = (isset($params['onOpen'])) ? $params['onOpen'] : null;
$opt['onClose'] = (isset($params['onClose'])) ? $params['onClose'] : null;
$opt['onUpdate'] = (isset($params['onUpdate'])) ? $params['onUpdate'] : null;
$opt['onResize'] = (isset($params['onResize'])) ? $params['onResize'] : null;
$opt['onMove'] = (isset($params['onMove'])) ? $params['onMove'] : null;
$opt['onShow'] = (isset($params['onShow'])) ? $params['onShow'] : null;
$opt['onHide'] = (isset($params['onHide'])) ? $params['onHide'] : null;
$options = JHTMLBehavior::_getJSObject($opt);
// Attach modal behavior to document
$document->addScriptDeclaration("
window.addEvent(\"domready\", function() {
if (!/android|iphone|ipod|series60|symbian|windows ce|blackberry/i.test(navigator.userAgent)) {
$$(\"a\").filter(function(el) {
return el.href && !el.href.indexOf(\"http://www.flickr.com/photos/\") && el.firstChild && el.firstChild.src;
}).slimbox({
loop: true,
initialWidth: 1024,
initialHeight: 768,
overlayOpacity: 0.6,
overlayFadeDuration: 200,
resizeDuration: 1000,
resizeTransition: Fx.Transitions.Elastic.easeOut,
counterText: \"This is image <strong>{x}</strong> on a total of <strong>{y}</strong> in this fabulous Flickr image gallery\",
previousKeys: [37, 80, 16],
nextKeys: [39, 78, 17],
}, function(el) {
return [el.firstChild.src.replace(/_[mts]\.(\w+)$/, \".$1\"),
(el.title || el.firstChild.alt) + '<br />Visit the <a href=\"' + el.href + '\">Flickr page</a> for this picture.'];
});
}
try {
_gat._getTracker(\"UA-760577-1\")._trackPageview();
} catch(e) {}
});");
// Set static array
$slimbox[$sig] = true;
return;
}
in der componente musste ich dann die componentendatei anpassen, da ich es nicht geschafft habe die componente von "com_seminar" in meinem Template zu überschreiben.
nun kann man mit dem PHP-Befehl
PHP-Code:
JHTML::_('behavior.slimbox');
das einbinden der slimbox.js und slimbox.css in den header auslösen ... analog habe ich dies dann entfernt:
PHP-Code:
JHTML::_('behavior.modal');
****************************************
Wirklich zufrieden bin ich mit Joomla nicht, da es keine Lösung für die vielen Konflikte anbietet. Man muss erst selbst herrausfinden was JavaScript ist ... was Bibliotheken (Mootools, jQuery, Prototype) sind und welche Probleme es in diesen Blibliotheken gibt ...
Ich würde mich freuen, wenn Joomla die einzelnen Bibliotheken selbst erkennt, vielleicht kapselt und selbst die Konflikte vermeidet oder wenigstens verständlich bekanntgibt.
Gruß,
Grille.
Lesezeichen