Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

jQuery: dynamisch erstellter Link führt zu Fehlermeldung [gelöst]

Eingetragen von raffi (21)
am 17.02.2012 - 07:57 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Hallo,
ich habe das oben beschriebene Problem. Um es zu konkretisieren: Ich habe ein Modul geschrieben in dem ersteinmal nur ein Link statisch vorhanden ist.

function add_rde_server_menu () {
$items = array();
 
  $items['add-rde-server-mainpage'] = array (
  'title' => 'RDE-Server',
  'page callback' => 'add_rde_server_dialog_page',
'access arguments' => array('access rde server dialog'),
  'type' => MENU_NORMAL_ITEM,
  );

$items['add-rde-server-mainpage/add-rde-server-dialog'] = array (
'title' => 'add-rde-server-dialog',
'page callback' => 'add_rde_server_dialog',
'access arguments' => array('access rde server dialog'),
'type' => MENU_CALLBACK,
);

$items['add-rde-server-mainpage/edit-rde-server-dialog'] = array (
'title' => 'edit-rde-server-dialog',
'page callback' => 'edit_rde_server_dialog',
'access arguments' => array('access rde server dialog'),
'type' => MENU_CALLBACK,
);
 
  return $items;
}
function add_rde_server_dialog_page () {

$output = '<div id="contentBlock_rde_server"><p>'.l('RDE-Server erstellen', 'add-rde-server-mainpage/add-rde-server-dialog', $options = array('attributes' => array('class' => 'add-rde-server-dialog'))).'</p></div>';

return $output;
}

Statisch ist hierbei der Link mit dem Pfad add-rde-server-mainpage/add-rde-server-dialog, welcher ordnungsgemäß funktioniert. Der andere Link wird dann innerhalb der Seite erst angelegt, sobald ein Eintrag, über ein Formular, hinzugefügt wurde.

...
$('.edit-rde-server-dialog').click(function () {
// var $changeValue = $(this).attr('id');
// alert($changeValue);
$edit_dialog.dialog('open');
return false;
        });

function appendContent () {
var $name = $('#bezeichnung_rde_server').val();
var $descr = $('#beschreibung_rde_server').val();
$('#rde_server tbody').append('<tr>'+
'<td id="rde_server_'+$counter+'">'+$name+'</td>'+
'<td id="descr_rde_server_'+$counter+'">'+$descr+'</td>'+
'<td><a id="edit-rde-server-'+$counter+'" href="/drupal/add-rde-server-mainpage/edit-rde-server-dialog">Bearbeiten</a></td>'+ // hier wird der link erzeugt
'</tr>'
);

}
...

Der Link wird ordnungsgemäß angelegt, und der Pfad ist wie angegeben add-rde-server-mainpage/edit-rde-server-dialog. Allerdings führt der Klick auf den Link zu einer weißen Seite und Drupal notiert dazu die Fehlermeldung:
call_user_func_array() expects parameter 1 to be a valid callback, function 'edit_rde_server_dialog' not found or invalid function name in C:\xampp\htdocs\drupal\includes\menu.inc in Zeile 349..

Liegt es an der dynaimschen Erzeugung des Links, die ja quasi nich über die l-Funktion sondern direkt über jQuery erfolgt? Wenn ja, wie kann ich das Problem lösen?

Danke

‹ Nodes (Status) mittles hook_node_load ändern. jQuery: durch Drupal Behaviors Fehlverhalten auf Seite ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

selber Fehler bei Modul "Case Tracker"

Eingetragen von Frank Ralf (2135)
am 17.02.2012 - 08:59 Uhr

Dieselbe Fehlermeldung kommt auch hier in ganz anderem Zusammenhang, vielleicht hilft das, die Fehlerquelle einzukreisen: Modul "Case Tracker": "Cannot add cases and projects".

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo,danke für den Link.

Eingetragen von raffi (21)
am 17.02.2012 - 10:21 Uhr

Hallo,
danke für den Link. Allerdings wird ja dort eine Neuinstallation vorgeschlagen, dieser möchte ich vorerst mal aus dem Weg gehen.
Hab mir jetzt nochmal die Zeile in der menu.inc angeschaut. In der Fehlermeldung kritisiert er ja den ersten Parameter, welcher in diesem Falle $router_item['page_callback'] ist, also der page callback (richtig!?).
Nun habe ich mal den page callback in der module-Datei herausgenommen:

...
$items['add-rde-server-mainpage/edit-rde-server-dialog'] = array (
'title' => 'edit-rde-server-dialog',
'access arguments' => array('access rde server dialog'),
'type' => MENU_CALLBACK,
);
...

Damit springt er zumindest mal auf eine neue Seite mit dem gewünschten Inhalt, beim Klicken auf den Link. Allerdings sollte sich im Optimalfall ein Fenster öffnen, eben der jQuery UI-Dialog. Ich weis auf der anderen Seite aber auch nicht, was ich in die page callback-Methode in der module-Datei eintragen söllte, könnte, müsste.

EDIT:
Habe gerade gemerkt, dass ich noch einen grundlegenden Fehler eingebaut hatte, der aber das eigentliche Problem nicht löst:
Linkerzeugung

function appendContent () {
var $name = $('#bezeichnung_rde_server').val();
var $descr = $('#beschreibung_rde_server').val();
$('#rde_server tbody').append('<tr>'+
'<td id="rde_server_'+$counter+'">'+$name+'</td>'+
'<td id="descr_rde_server_'+$counter+'">'+$descr+'</td>'+
'<td><a class="edit-rde-server-dialog" id="edit-rde-server-'+$counter+'" href="/drupal/add-rde-server-mainpage/edit-rde-server-dialog">Bearbeiten</a></td>'+ // hier hatte natürlich das Attribut class gefehlt
'</tr>'
);

}

// jetzt ist der Aufruf zumindest theoretisch überhaupt möglich, da vorher der link nur mit einem id-Attribut erzeugt wurde
$('.edit-rde-server-dialog').click(function () {
var $changeValue = $(this).attr('id');
alert($changeValue);
$edit_dialog.dialog('open');
return false;
});

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo.Nach langer Recherche

Eingetragen von raffi (21)
am 22.02.2012 - 11:54 Uhr

Hallo.
Nach langer Recherche und einigen Testveränderungen, weis ich zumindest, warum Drupal das Fehlen der Methode beklagt. Ich hatte den Link so angelegt, das er dem DOM nicht registriert wurde.
Ich musste also mit den Behaviors arbeiten.
Inzwischen steht der folgende Quelltext in meinem JS-file (gekürzt):

// $Id: add_rde_server.js $

(function ($) {
$(document).ready(function () {
//Drupal.behaviors.add_rde_server = function (context) {

var $counter = 0;

// Aufbau des Eingabeformulars im erscheinenden Dialog
var $add_form = '<form>'+
'<p><b>Name: </b><br /><input type="text" id="bezeichnung_rde_server" name="name" size="30" maxlength="50" /></p>'+
'<p><b>Beschreibung: </b><br /><textarea id="beschreibung_rde_server" name="beschreibung" rows="10" cols="100" /></p>'+
'</form>';

// Tabelle, welche den erstellten Inhalt anzeigt
var $contentTable = '<p><table id="rde_server" class="ui-widget ui-widget-content">'+
'<thead>'+
'<tr class="ui-widget-header">'+
'<th>Name</th>'+
'<th>Beschreibung</th>'+
'<th></th>'+
'</tr>'+
'</thead>'+
'<tbody>'+
'</tbody>'+
'</table></p>';

// Inhaltstabelle an Abschnitt mit id contentBlock_rde_server anhängen
$('#contentBlock_rde_server').append($contentTable);

// Eigenschaften des Dialogfensters und Bestimmung der Funktionsweise beim Betätigen der Buttons
var $add_dialog = $('<div></div>').html($add_form).dialog({
modal: true,
width: 750,
height: 450,
title: 'RDE-Server erstellen',
autoOpen: false,
buttons: {
'OK': function () {
var $value_exists = new Boolean();
$value_exists = validateAndSubmit();
if ($value_exists) {
$(this).dialog('close');
clearForm();
}
else {
$('#bezeichnung_rde_server').attr('style', 'border-color: red;');
}
},
'Close': function () {
$(this).dialog('close');
clearForm();
}
}
});

// Aufruf des Hinzufügen-Dialogs beim Klick auf Link der Klasse add-rde-server-dialog
$('.add-rde-server-dialog'/*, context*/).click(function () {
$add_dialog.dialog('open');
return false;
});

function validateAndSubmit () {
var $val = new Boolean();
$val = validate();
if ($val == true) {
insertInDB();
appendContent();
Drupal.attachBehaviors();
$counter++;
return true;
}
else if ($val == false) {
return false;
}
}

function appendContent () {
var $name = $('#bezeichnung_rde_server').val();
var $descr = $('#beschreibung_rde_server').val();
/*
$('#rde_server tbody').append('<tr>'+
'<td id="rde_server_'+$counter+'">'+$name+'</td>'+
'<td id="descr_rde_server_'+$counter+'">'+$descr+'</td>'+
'<td><a class="edit-rde-server-dialog" id="edit-rde-server-'+$counter+'" href="/drupal/add-rde-server-mainpage/edit-rde-server-dialog">Bearbeiten</a></td>'+
'</tr>'
);
*/
Drupal.behaviors.append = function () {
$('#rde_server tbody').append('<tr>'+
'<td id="rde_server_'+$counter+'">'+$name+'</td>'+
'<td id="descr_rde_server_'+$counter+'">'+$descr+'</td>'+
'<td><a class="edit-rde-server-dialog" id="edit-rde-server-'+$counter+'" href="/drupal/add-rde-server-mainpage/edit-rde-server-dialog">Bearbeiten</a></td>'+
'</tr>'
)
}
}
});
})(jQuery);

Allerdings führt das ganze zu den selben Problemen wie weiter oben bereits beschrieben (WSOD und Fehlermeldung). Allerdings habe ich keine Ahnung, warum scheinbar das Drupal.attachBehaviors überhaupt keine Wirkung hat.

MfG

  • Anmelden oder Registrieren um Kommentare zu schreiben

Fortsetzung unter:

Eingetragen von Frank Ralf (2135)
am 24.02.2012 - 09:38 Uhr

"jQuery: durch Drupal Behaviors Fehlverhalten auf Seite" ;-)

  • 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 11 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 3 Tagen 3 Stunden
  • melde mich mal wieder, da ich
    vor 8 Wochen 7 Stunden
  • Hey danke
    vor 8 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 8 Wochen 1 Tag
  • 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 3 Tagen
  • In der entsprechenden View
    vor 9 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 3 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 17 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