Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Themes & Theming ›

Gelöst: jQuery-Problem

Eingetragen von hermanns (90)
am 25.02.2008 - 16:00 Uhr in
  • Themes & Theming
  • Drupal 5.x oder neuer

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

‹ Usernode Hintergrund wechseln [gelöst] Framework-Modul ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

PHP/JS Mix

Eingetragen von stBorchert (6003)
am 25.02.2008 - 17:03 Uhr

Moin!
Nur ganz kurz und ohne mal wirklich detaillierter über den Code geschaut zu haben:

hermanns schrieb

node.tpl.php

  if (Drupal.jsEnabled) {

"Drupal.jsEnabled" ist kein php-Konstrukt, sondern gehört in den Javascript-Teil.

hth,

Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also die *.js Dateien binde

Eingetragen von witzel (163)
am 25.02.2008 - 17: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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke schonmal!

Eingetragen von hermanns (90)
am 25.02.2008 - 17: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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Es muss $function() heißen,

Eingetragen von Alexander Langer (3416)
am 25.02.2008 - 17:58 Uhr

Es muss $function() heißen, nicht function() .

--
"Look, Ma, I'm dead!"
Cell, Stephen King

  • Anmelden oder Registrieren um Kommentare zu schreiben

Fehler?

Eingetragen von stBorchert (6003)
am 26.02.2008 - 14:50 Uhr
hermanns schrieb

...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?

hermanns schrieb

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.

hermanns schrieb

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:

Alexander-Langer schrieb

Es muss $function() heißen, nicht function().

Wie kommst Du denn auf soetwas?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Läuft!

Eingetragen von hermanns (90)
am 26.02.2008 - 15: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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Endlösung

Eingetragen von hermanns (90)
am 04.06.2008 - 14: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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

drupal_get_path() und der IIS

Eingetragen von quiptime (4972)
am 12.12.2008 - 13: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

Zitat:

<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.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

@hermanns, ... die Art eines Script Kiddy.

Eingetragen von quiptime (4972)
am 12.12.2008 - 13: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.

XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 2 Tagen 23 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 3 Tagen 15 Stunden
  • melde mich mal wieder, da ich
    vor 8 Wochen 19 Stunden
  • Hey danke
    vor 8 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 8 Wochen 2 Tagen
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 4 Tagen
  • In der entsprechenden View
    vor 9 Wochen 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 4 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 11 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association