[gelöst] inc Datei im Modul einbinden -> bei hok_menu_alter mit drupal_get_path schaffen!
Eingetragen von maen (547)
am 27.03.2014 - 09:00 Uhr in
am 27.03.2014 - 09:00 Uhr in
Hallo, ich versuche im menu-alter eine inc Datei aus Performance Gründen einzubinden. Code war vorher im Modul selbst und hat funktioniert.
vorher -> erfolgreich
<?php
function my_module_menu_alter(&$items) {
$items['user/reset/%/%/%'] = array(
'title' => 'Reset password',
'page callback' => 'drupal_get_form',
'page arguments' => array('my_module_user_pass_reset', 2, 3, 4),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
}
?>
jetzt habe ich den dazugehörigen code in eine inc ausgelagert wie folgt:
<?php
function my_module_menu_alter(&$items) {
$items['user/reset/%/%/%'] = array(
'title' => 'Reset password',
'page callback' => 'drupal_get_form',
'page arguments' => array('my_module_user_pass_reset', 2, 3, 4),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
'file' => 'my_module.pages.inc',
);
}
?>
Resultat:
Warning: require_once(XXX//my_module.pages.inc): failed to open stream: No such file or directory in menu_execute_active_handler() (Zeile 515 von XXX/includes/menu.inc).
Habe das aus dem user Module genommen und übeschrieben. In der info der user wurde keien inc deklariert. Cache wurde mehrfach komplett gecleared.
Weiß da einer was?
Danke vorab, Marc
- Anmelden oder Registrieren um Kommentare zu schreiben
O.k, manchaml macht schreiben
am 27.03.2014 - 09:07 Uhr
O.k, manchaml macht schreiben ja klarer: habe den file jetzt mittels:
<?php
'file' =>'sites/all/modules/custom/my_module/my_module.pages.inc',
?>
eingebunden. Finde es aber komisch dass der den kompletten root Pfad benötigt!???
Warum ist das so?
dynamischer file:
am 27.03.2014 - 09:35 Uhr
<?php
'file' =>drupal_get_path('module','my_module').'/my_module.pages.inc',
?>
funktioniert. Aber dennoch, warum brauche ich den aber im nodes.module vom core ist der nicht notwendig?
Hi
am 27.03.2014 - 09:41 Uhr
es ist deshalb so, weil der Controller (index.php) die anderen Files einbindet.
Es wird vom WebServer über URL Rewrite immer index.php ausgeführt.
Da diese im Root liegt, ist der Pfad der auch im Root.
Du kannst den Pfad im Modul dynamisch setzen mit:
'file' =>drupal_get_path('module', 'my_module').'my_module.pages.inc',
LG
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
maen schrieb Aber dennoch,
am 27.03.2014 - 09:50 Uhr
Aber dennoch, warum brauche ich den aber im nodes.module vom core ist der nicht notwendig?
Danke, aber siehe oben?
habe gerade nochmal
am 27.03.2014 - 10:59 Uhr
habe gerade nochmal nachgesehen.
Du hast Recht eigentlich benötigst man dort kein drupal_get_path.
Es ist schon merkwürdig.
Habe gesehen Du schreibst im my_module.info file ist keine inc deklariert?
Probier einmal das:
Füge ins info ein: files[] = my_module.inc
und dann im Modul 'files' => 'my_module.inc',
In meinem Modul funktioniert es so.
Evtl. hat das auch mit hook_menu_alter zu tun, dieser hook wird sehr spät ausgeführt.
(Da ist das z.B Menü schon geladen und schon evtl. Redirected)
Ich denke Du solltest eher hook_menu verwenden.
hook_menu_alter ist da um bereits vorhandene Menüs/Einträge zu ändern.
Tipp:
suche in modules nach _menu_alter
Hoffe das hilft Dir weiter
LG
PS: sorry habe gerade gesehen ist ja ein vorhandener Menüpunkt den Du ändern willst.
Allerding glaube fest daran, das nach hook_menu_alter alles das meinste schon geladen wurde und deshalb der Pfad auf Root steht.
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Jetzt hab ich es,
am 27.03.2014 - 11:11 Uhr
also das Core Modul ruft Dein Modul auf.
Dein Modul ruft hook_menu auf (hier stimmt der Pfad noch)
und macht den hook_menu_alter dem Core bekannt.
Das Core Modul weiss nun dass es später, wenn alle Module geladen sind hook_menu_alter aufrufen soll.
d.H: Der Core ruft nun die hook_menu_alter Funktion auf und nicht Dein Modul.
Daher ist der Pfad ROOT und nicht der Pfad zu Deinem Modul.
Ich bin fast 100% sicher dass es sich so verhält.
LG
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Klasse Hypothese. Danke!
am 27.03.2014 - 11:27 Uhr
Könnte stimmen. Denn wenn ich einen normalen hook_menu schreibe ist das Unsinn. Also liegt das am menu_alter und dem von Dir schön beschriebenen Ablauf. Müsste man irgendwie mal in einem manual hier festhalten!
Da falle bestimmt nicht nur ich drauf rein!
Vielen Dank für die Erklärung!