Gelöst: jQuery-Problem

am 25.02.2008 - 17:00 Uhr in
Hallo Drupaler,
bin langsam etwas verzweifelt. Hier kurz das Problem:
Ich möchte eine Liste mit Bildern mit einem Plug-In für jQuery überblenden lassen. Das Einbinden der verlinkten jQuery-Datei bekomme ich noch hin, allerdings der 2te Schritt das Aufrufen der Funktion funktioniert einfach nicht.
Denn ich bekomme folgende Fehlermeldung:
Parse error: syntax error, unexpected '(', expecting T_VARIABLE or '$' in /mnt/web5/23/21/5284521/htdocs/drupal/includes/common.inc(1352) : eval()'d code on line 2
Hier der Code in den anderen Daten:
node.tpl.php
<?php
if (Drupal.jsEnabled) {
$path = drupal_get_path('module', 'innerfade');
drupal_add_js($path . 'js/jquery.innerfade.js');
}
?>
und noch im Content (also über das CMS eingegeben)
<?php drupal_add_js(
$(document).ready( function() {
$('#fade').innerfade({
speed: 'slow',
timeout: 4000,
type: 'sequence',
containerheight: '220px' }); }); );
?>
Interessant finde ich auch, dass es nirgends ein einfach verständliches Tutorial zum Thema "jQuery-Einbindung" gibt. Naja vielen Dank schonmal.
Dirk
- Anmelden oder Registrieren um Kommentare zu schreiben
PHP/JS Mix
am 25.02.2008 - 18:03 Uhr
Moin!
Nur ganz kurz und ohne mal wirklich detaillierter über den Code geschaut zu haben:
node.tpl.php
if (Drupal.jsEnabled) {
"Drupal.jsEnabled" ist kein php-Konstrukt, sondern gehört in den Javascript-Teil.
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Also die *.js Dateien binde
am 25.02.2008 - 18:07 Uhr
Also die *.js Dateien binde ich so in meine page.tpl ein:
<script type="text/javascript" src="<?php print drupal_get_path('theme','zen') . '/js/interface.js'; ?>"></script>
Die spezielle Funktion schreibe ich dann in den content, und alles funktioniert super.
Danke schonmal!
am 25.02.2008 - 18:28 Uhr
Danke Danke, aber das Problem liegt, denke ich, an anderer Stelle. Die JS-Datei wird ohne Probleme eingebunden. Doch die neue Anweisung bzw. die 2 Anweisung die sich auf die jQuery und innerfade.js bezieht, wird nicht erkannt und ich bekomme eine Fehlermeldung ausgegeben.
Auch der Hinweis auf dem Mischmasch aus PHP und JS kann ich nachvollziehen, jedoch bleibt das Problem bestehen, wenn diese Zeile ausgenommen wird.
Wie gesagt, ich denke er erkennt diese Anwendung trotz drupal_add_js nicht als jQuery.
creatin g GmbH | optimiertes Kommunikationsdesign
http://www.creatin-g.de (Website) | http://twitter.com/creatin_g (twitter)
Es muss $function() heißen,
am 25.02.2008 - 18:58 Uhr
Es muss $function() heißen, nicht function() .
--
"Look, Ma, I'm dead!"
Cell, Stephen King
Suchmaschinenoptimierung (SEO) & Drupal
Fehler?
am 26.02.2008 - 15:50 Uhr
...Doch die neue Anweisung bzw. die 2 Anweisung die sich auf die jQuery und innerfade.js bezieht, wird nicht erkannt und ich bekomme eine Fehlermeldung ausgegeben.
Aha. Und welche?
Auch der Hinweis auf dem Mischmasch aus PHP und JS kann ich nachvollziehen, jedoch bleibt das Problem bestehen, wenn diese Zeile ausgenommen wird.
<?php
if (Drupal.jsEnabled) {
$path = drupal_get_path('module', 'innerfade');
drupal_add_js($path . 'js/jquery.innerfade.js');
}
?>
"Drupal.jsEnabled" ist JavaScript-Code und hat nichts in Deinem php-Code zu suchen. Du wirst wahrscheinlich auch in Deinen log-Dateien (so denn welche geschrieben werden) einen Fehler finden, der Dir sagt, dass das Objekt "Drupal" und speziell das Attribut "jsEnabled" dieses Objektes nicht gefunden werden kann.
Wie gesagt, ich denke er erkennt diese Anwendung trotz drupal_add_js nicht als jQuery.
Naja, bei genauerem Hinsehen vermisse ich da Anführungszeichen. Der Code sollte also so aussehen:
<?php
drupal_add_js("
$(function() {
$('#fade').innerfade({
speed: 'slow',
timeout: 4000,
type: 'sequence',
containerheight: '220px'
});
");
?>
Ich habs mal ein klein wenig angepasst, nicht erschrecken :-).
hth,
Stefan
PS:
Es muss $function() heißen, nicht function().
Wie kommst Du denn auf soetwas?
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Läuft!
am 26.02.2008 - 16:22 Uhr
Sorry, meld mich etwas verspätet. Gestern hab ichs noch zum laufen bekommen.
Hier der Code:
<script type="text/javascript">
$(document).ready( function(){ $('#fade').innerfade({ speed: 'slow', timeout: 4000, type: 'sequence', containerheight: '180px' }); })</script>
Also vielen Dank für deine Anpassungen, Stefan. Ich vermute mal, dass irgendein Problem vorliegt, wenn ich den PHP-Code im Content aufrufe, denn auch mit deinen Korrekturen funktioniert es leider nicht. Daher mein Umweg über das direkt implementierte Javascript. Die etwas unsaubere Schreibweise musste ich wählen, da ansonsten immer wieder ein Fehler auftritt, dass eine Klammer fehlt. Soweit der letzte Stand.
Also für alle dies Interessiert, den Code oben plus das jQuery-Plug-In = eine wunderbar Slideshow, die sich optimal verändern läßt. Übrigens auch für Teaser oder News-Ticker bestens geeignet.
Nochmals Vielen Dank.
Dirk
creatin g GmbH | optimiertes Kommunikationsdesign
http://www.creatin-g.de (Website) | http://twitter.com/creatin_g (twitter)
Endlösung
am 04.06.2008 - 15:34 Uhr
Endlich! Es läuft wie ich mir das vorgestellt hab. Hier der Code
<?php
drupal_add_js ('misc/jquery.innerfade.js');
$myjs = "$(document).ready( function(){
$('#fade').innerfade({
speed: 'slow',
timeout: 4000,
type: 'sequence',
containerheight: '332px'
});
});";
drupal_add_js($myjs, 'inline');
?>
Nun einfach eine Liste mit der ID "fade" versehen und die Bilder als Listenelemente laden, fertig! Das Plugin gibts hier: Link
__
Nur Kritik bringt einen weiter.
creatin g GmbH | optimiertes Kommunikationsdesign
http://www.creatin-g.de (Website) | http://twitter.com/creatin_g (twitter)
drupal_get_path() und der IIS
am 12.12.2008 - 14:31 Uhr
Die Verwendung von drupal_get_path() um einen Pfad zu einem Theme abzubilden sollte man bei Problemen mit path_to_theme() ersetzen.
Ein Problem mit drupal_get_path() kann eintreten wenn die Drupalsite auf einem IIS laeuft. Der IIS hat mit dieser Funktion offensichtlich Probleme den Pfad darzustellen. Mit path_to_theme() klappt es ohne Probleme.
PS
Das IIS Problem habe ich erst vor wenigen Tagen selbst erlebt.
Nun kann es vermutlich auch an der Konfiguration des IIS liegen wenn es bei der Verwendung von drupal_get_path() Probleme gibt. Die Konfiguration des IIS habe ich nicht hinterfragt.
PS PS
ACHTUNG
Um Javascript Dateien einzulinken sollte man NICHT dies hier
<script type="text/javascript" src="<?php print drupal_get_path('theme','zen') . '/js/interface.js'; ?>"></script>
praktizieren!!!
Besser ist die Verwendung der Funktion drupal_add_js(). Damit die JS Datei in der "template.php" einlinken. Beispiel:
<?php
drupal_add_js(path_to_theme() . '/js/interface.js', 'theme', 'footer');
?>
Der Grund fuer die Verwendung der Funktion drupal_add_js() ergibt sich hauptsaechlich dadurch das man viele Moeglichkeiten hat die Art und Weise wie die JS Datei eingelinkt wird beim Funktionsaufruf durch die verschiedenen Funktionsparameter zu steuern.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
@hermanns, ... die Art eines Script Kiddy.
am 12.12.2008 - 14:46 Uhr
@hermanns,
es funktioniert. Prima.
<?php
drupal_add_js
('misc/jquery.innerfade.js');
$myjs = "$(document).ready( function(){
$('#fade').innerfade({
speed: 'slow',
timeout: 4000,
type: 'sequence',
containerheight: '332px'
});
});";
drupal_add_js($myjs, 'inline');
?>
Aber Schlussendlich ist die Vorgehensweise wie Du die Aufgabe gelöst hast mit der eines Script Kiddy zu vergleichen.
Wieso?
1.
Es ist keine gute Idee ein zusätzliches jQuerty Plugin in den Core-Ordner /misc zu kopieren.
Besser ist ein Ordner im Theme.
2.
Ich bin mir sehr sicher das Dein jQuery Code NICHT erfordert das er inline platziert wird.
Besser, allgemein bekannt und empfohlen ist es wann immer möglich JS Code in externe Datei zu verlagern.
3.
JS Code als Inline Code ist aus Performancegründen immer das Schlechteste was man seiner/einer Website antun kann.
Besser ist es nach Pkt. 2 vorzugehen.
Dabei sollte man prüfen ob es zwingende Gründe gibt das die JS Datei im Header gelinkt wird. Wenn dem nicht ist dann sollte man sie im Footer linken.
Das ist dann das Beste hinsichtlich Performance was man seiner/einer Website antun kann.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.