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

erstellter Menüpfad funktioniert nicht bzw. falsch [gelöst]

Eingetragen von the-sandman (36)
am 04.09.2009 - 20:18 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Hallo an alle,

ich melde mich ja relativ wenig mit meinen Problemen, da ich meist versuche diese erst einmal selbst zu beheben. Nun sitz ich aber heute schon wieder den ganzen Tag an einer relativ einfachen Sache und weiß nicht mehr weiter.

Ich habe in der hook_menu()-Funktion folgende Einträge erstellt:

$items['admin/cybernetics/exercises/manage/%cs_exercise/options'] = array
(
'title' => 'Options',
'page callback' => 'drupal_get_form',
'page arguments' => array('cs_exercise_options_form', 4),
'access arguments' => array('administer interships'),
'type' => MENU_CALLBACK,
'file' => 'cs_exercise.admin.inc',
);

$items['admin/cybernetics/exercises/manage/%cs_exercise/options/%cs_exercise_option/edit'] = array
(
'title' => 'Edit option',
'page callback' => 'drupal_get_form',
'page arguments' => array('cs_exercise_option_form', 4, 6),
'access arguments' => array('administer interships'),
'type' => MENU_CALLBACK,
'file' => 'cs_exercise.admin.inc',
);

Der erste Menüeintrag funktioniert auch so wie er soll. Wenn ich jedoch versuche eine Option zu editieren (2. Menüeintrag) komme ich einfach nicht zu der gewünschten Funktion, sonder werde immer wieder zu dem 1. Menüeintrag umgeleitet (bzw. zu seiner callback page).
Mache ich jedoch das "edit" am ende des 2. Menüpfades weg funktioniert alles auf einmal. Ich kann mir den Fehler bis jetzt noch nicht erklären. Vielleicht weiß hier einer Rat???

Das "edit" am Ende müsste auf jedenfall stehend bleiben. Ich habe auch schon mehrfach den Cache im Drupal und manuell in der Datenbank gelöscht und das komplette Modul bereits auf einer anderen Drupal-Installation getestet, jedoch immer mit dem selben falschen Ergebnis.

Vielen Dank schonmal im voraus.
LG the-sandman

‹ Aktiver Menüpunkt bei Taxonomieinhalten Denglisch im Backend ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich kann so kein Fehler

Eingetragen von Tobias Bähr (4019)
am 04.09.2009 - 20:48 Uhr

Ich kann so kein Fehler sehen.

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich leider auch nicht. Das

Eingetragen von the-sandman (36)
am 05.09.2009 - 12:03 Uhr

Ich leider auch nicht. Das macht mir die Sache relativ schwer, da ich garnicht weiß wo ich mit der Fehlersuche ansetzen soll...

LG the-sandman

  • Anmelden oder Registrieren um Kommentare zu schreiben

Naja die Funktionen sind ja

Eingetragen von Tobias Bähr (4019)
am 05.09.2009 - 12:18 Uhr

Naja die Funktionen sind ja gleich, nur die Parameter sind anders also musste die cs_exercise_option_form Funktion anschauen.

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hab ich auch schon, hab auch

Eingetragen von the-sandman (36)
am 13.09.2009 - 13:43 Uhr

Hab ich auch schon, hab auch versucht einige Testausgaben mit "drupal_set_message()" zu machen.
Das Problem ist, dass Drupal nicht mal bis zu der Funktion "cs_exercise_option_form()" kommt, geschweige denn die "cs_exercise_option_load()" (also die Load-Funktion durch den Pfad-Parameter) kommt und mir dort Testausgaben anzeigt. Der Fehler scheint schon in der Verlinkung zu liegen und die Funktionen werden nicht richtig gefunden, sehe ich das richtig? Nur wenn ich das "/edit" am Ende des Pfades weg lassen, wird auf einmal alles gefunden. Das ist echt sehr verwirrend

LG the-sandman

  • Anmelden oder Registrieren um Kommentare zu schreiben

Paste noch die fehlende

Eingetragen von Tobias Bähr (4019)
am 13.09.2009 - 13:50 Uhr

Paste noch die fehlende *_load, *_to_arg Funktionen sowie das Formular.

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ok, natürlich, hab ich voll

Eingetragen von the-sandman (36)
am 13.09.2009 - 15:28 Uhr

Ok, natürlich, hab ich voll vergessen.
Hier die Load-Funktionen:

<?php
function cs_exercise_load($exerc_id, $nid = NULL, $type = '')
{
  if (
$nid)
  {
    switch (
$type)
    {
      case
'intership':
       
$exercise = db_fetch_object(db_query("SELECT e.eid, e.name, e.task, e.solution, e.ordering AS default_ordering, e.required AS default_required, e.precondition AS default_precondition, e.display AS default_display, e.description, ie.default_option, ie.required, ie.ordering, ie.precondition, ie.display
                                              FROM {cs_exercises} AS e
                                                LEFT JOIN {cs_intership_exercises} AS ie ON e.eid = ie.eid AND ie.nid = %d
                                              WHERE e.eid = %d"
, $nid, $exerc_id));
       
$result = db_query("SELECT io.nid, io.oid, io.ordering, eo.name, eo.eid
                            FROM {cs_intership_options} AS io
                              LEFT JOIN {cs_exercise_options} AS eo ON io.oid = eo.oid AND nid = %d
                            WHERE eid = %d ORDER BY io.ordering, eo.name"
, $nid, $exerc_id);
      break;
      case
'class':
       
$exercise = db_fetch_object(db_query("SELECT e.eid, e.name, e.task, e.solution, e.ordering AS default_ordering, e.required AS default_required, e.precondition AS default_precondition, e.display AS default_display, e.description, ce.default_option, ce.required, ce.ordering, ce.precondition, ce.display
                                              FROM {cs_exercises} AS e
                                                LEFT JOIN {cs_class_exercises} AS ce ON e.eid = ce.eid AND ce.icid = '%s'
                                              WHERE e.eid = %d"
, $nid, $exerc_id));
       
$result = db_query("SELECT co.icid, co.oid, co.ordering, eo.name, eo.eid
                            FROM {cs_class_exercise_options} AS co
                              LEFT JOIN {cs_exercise_options} AS eo ON co.oid = eo.oid AND co.icid = '%s'
                            WHERE eo.eid = %d
                            ORDER BY co.ordering, eo.name"
, $nid, $exerc_id);
      break;
      default:
       
$exercise = db_fetch_object(db_query("SELECT *
                                              FROM {cs_exercises}
                                              WHERE eid = %d"
, $exerc_id));
       
$result = db_query("SELECT *
                            FROM {cs_exercise_options}
                            WHERE eid = %d
                            ORDER BY ordering, name"
, $exerc_id);
      break;
    }
   
    if (isset(
$exercise->default_ordering) && is_null($exercise->ordering))
    {
     
$exercise->ordering = $exercise->default_ordering;
    }
    if (isset(
$exercise->default_required) && is_null($exercise->required))
    {
     
$exercise->required = $exercise->default_required;
    }
    if (isset(
$exercise->default_precondition) && is_null($exercise->precondition))
    {
     
$exercise->precondition = $exercise->default_precondition;
    }
    if (isset(
$exercise->default_display) && is_null($exercise->display))
    {
     
$exercise->display = $exercise->default_display;
    }
  }
  else
  {
   
$exercise = db_fetch_object(db_query("SELECT *
                                          FROM {cs_exercises}
                                          WHERE eid = %d"
, $exerc_id));
   
$result = db_query("SELECT *
                        FROM {cs_exercise_options}
                        WHERE eid = %d
                        ORDER BY ordering, name"
, $exerc_id);
  }
 
  if (
$exercise)
  {
   
$exercise->options = array();
    while (
$option = db_fetch_object($result))
    {
     
$exercise->options[$option->oid] = $option;
    }
  }
  return
$exercise;
}
?>

und

<?php
function cs_exercise_option_load($oid)
{
 
drupal_set_message('Option: '. $oid);
  return
db_fetch_object(db_query("SELECT *
                                   FROM {cs_exercise_options}
                                   WHERE oid = %d"
, $oid));
}
?>

Das Formular sieht dann so aus:

<?php
function cs_exercise_option_form($form_state, $exercise, $option = NULL)
{
 
// If we got a bunk exercise, kick out an error message.
 
if (empty($exercise))
  {
   
drupal_set_message(t('There is no exercise with that ID.'), 'error');
   
drupal_goto('admin/cybernetics/exercises/manage');
  }
  if (!empty(
$option))
  {
   
$form['oid'] = array
    (
     
'#type' => 'hidden',
     
'#value' => $option->oid
   
);
   
drupal_set_title(t('Edit option: %name', array('%name' => $option->name)));
  }
  else
  {
   
drupal_set_title(t('Options for %name', array('%name' => $exercise->name)));
  }
 
 
$form['eid'] = array
  (
   
'#type' => 'hidden',
   
'#value' => $exercise->eid,
  );
 
$form['name'] = array
  (
   
'#type' => 'textfield',
   
'#title' => t('Name'),
   
'#description' => t('This name will appear to groups on intership forms.'),
   
'#default_value' => $option->name,
   
'#required' => TRUE,
   
'#weight' => 0,
  );
 
// Loading all implementations of the function hook_admin_display_features and add additonal features to the input field.
 
$cs_exerciseClass = new cs_exercise($exercise);
 
$cs_exerciseClass->additions['#printout'] = array('no_history');
 
$form['exercise'] = array
  (
   
'#prefix' => '<div id="cs-exercise-solution-wrapper'. $cs_exerciseClass->eid .'" class="attach-wrapper">',
   
'#suffix' => '</div>',
   
$cs_exerciseClass->eid => $cs_exerciseClass->get_input('admin_display_features'),
  );
 
$form['ordering'] = array
  (
   
'#type' => 'weight',
   
'#title' => t('Order'),
   
'#description' => t('Options will be listed sorted by this value and then by their name.<br />May be overridden at the intership level.'),
   
'#default_value' => isset($option->ordering) ? $option->ordering : 0,
   
'#weight' => 4,
  );
 
$form['submit'] = array
  (
   
'#type' => 'submit',
   
'#value' => t('Submit'),
   
'#suffix' => l(t('Cancel'), 'admin/cybernetics/exercises/manage/'. $exercise->eid .'/options'),
   
'#weight' => 10,
  );

  return
$form;
}
?>

Die Klasse "$cs_exerciseClass" und alle damit verbundenen Funktionen laufen einwandfrei, aber zum Testen wurde diese auch schon rausgenommen.

Ich wäre so unendlich dankbar, wenn der Fehler endlich gefunden werden würde und ich das Projekt demnöchst abschließen könnte um es der Community zur Verfügung zu stellen.

LG the-sandman

  • Anmelden oder Registrieren um Kommentare zu schreiben

Maximale Pfadtiefe von 7?

Eingetragen von the-sandman (36)
am 18.09.2009 - 13:31 Uhr

Nach weiteren zahlreichen Stunden und Tagen der Fehlersuche habe ich eventuell die Ursache des Fehlers gefunden. Anhand folgender Quelle scheint mir nur eine Maximale Menü-Pfadtiefe von 7 Elementen möglich:

http://api.drupal.org/api/constant/MENU_MAX_PARTS/6

Gehe ich richtig in dieser Annahme bzw. kann mir jemand meine Vermutung bestätigen?

LG the-sandman

  • Anmelden oder Registrieren um Kommentare zu schreiben

Soweit ich gelesen habe ist

Eingetragen von wla (9461)
am 18.09.2009 - 14:03 Uhr

Soweit ich gelesen habe ist die maximale Menütiefe 9.

Sorry, habe gerade Metütiefe und Pfad verwechselt.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

maximale Pfadtiefe von 7!!!

Eingetragen von the-sandman (36)
am 18.09.2009 - 14:19 Uhr

Ich habe nun das Menü zu dem beschriebenen Problem entsprechend umgestellt und siehe da, es funktioniert auf einmal alles so, wie es soll...

Also ganz wichtig, Drupal 6.x hat eine maximale Pfadtiefe von 7!!!

LG the-sandman

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • 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?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 2 Tagen
  • Hey danke
    vor 2 Wochen 3 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 4 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 1 Tag
  • Da scheint die Terminologie
    vor 3 Wochen 1 Tag
  • Kannst doch auch alles direkt
    vor 3 Wochen 6 Tagen
  • In der entsprechenden View
    vor 3 Wochen 6 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 6 Tagen
  • gelöst
    vor 6 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20456

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» 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 12 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