[gelöst] - hook_menu_link_alter
am 08.08.2011 - 10:16 Uhr in
Hallo,
wie kann ich per hook_menu_link_alter die Ausgabe eines existierenden Links (z.B. user/register) verhindern? Der folgende Code funktioniert nicht - Cache natürlich geleert:
function beispiel_menu_link_alter(&$item) {
if ($item['link_path'] == 'user/register') {
$item['hidden'] = 1;
}
}Vielen Dank.
Gruß
Frank
- Anmelden oder Registrieren um Kommentare zu schreiben

Soll der Tab komplett
am 08.08.2011 - 10:35 Uhr
Soll der Tab komplett deaktiviert werden, wenn ja kannst Du das entsprechend in der Administration einstellen, dass sich Benutzer nicht registrieren dürfen.
Wenn Du den Tab ausblenden möchtest, geht dies über den hook_menu_alter(). Dort steht auch der Code wie man mit disable den Eintrag deaktivieren kann oder als MENU_CALLBACK setzen kann, damit er nicht mehr ausgegeben wird, aber weiterhin verfügbar ist.
Mir geht es in diesem Fall
am 08.08.2011 - 10:54 Uhr
Mir geht es in diesem Fall nur um das Prinzip, wie ich per Modul-Programmierung einen vorhandenen Link nicht mehr anzeigen kann.
function beispiel_menu_alter(&$item) {
// Tab nicht anzeigen - funktioniert
$item['user/register']['type'] = MENU_CALLBACK;
// Aufruf verbieten - funktioniert
$item['user/register']['access callback'] = FALSE;
// Link nicht anzeigen - funktioniert nicht
$item['user/register']['disable'] = 1;
// Link nicht anzeigen - funktioniert auch nicht
$item['user/register']['hidden'] = 1;
}
Dann verwende doch das setzen
am 08.08.2011 - 11:36 Uhr
Dann verwende doch das setzen als MENU_CALLBACK, dieses blendet den Link ja entsprechend aus lässt ihn aber weiterhin im Zugriff.
Hhmm, bei mir wird der Link
am 08.08.2011 - 11:52 Uhr
Hhmm, bei mir wird der Link trotzdem angezeigt (Standard Drupal-Installation). Der Tab wird ausgeblendet.
Dann deaktivier doch einfach
am 08.08.2011 - 12:48 Uhr
Dann deaktivier doch einfach über die Administration den Menüpunkt
Wie am Anfang gesagt - ich
am 08.08.2011 - 13:01 Uhr
Wie am Anfang gesagt - ich möchte das per Code machen und es geht nicht um den Link user/register. Ich will einfach Menü-Links per Code ausschalten.
Dann pass die entsprechenden
am 08.08.2011 - 13:25 Uhr
Dann pass die entsprechenden Links im Menü doch via hook_menu_alter() an und setz diese auf MENU_CALLBACK, dann werden sie nicht mehr ausgegeben, außer Du verwendest einen manuell angelegten Menüpunkt, diesen musste Du aus der Administration entfernen oder deaktivieren (kann ich Dir aber auch nicht zu 100% bestätigen, mit dem manuellen Menüpunkten, habs noch nie getestet).
Entweder reden wir aneinander
am 08.08.2011 - 14:16 Uhr
Entweder reden wir aneinander vorbei oder ich verstehe dich nicht.
function beispiel_menu_alter(&$item) {
$item['user/register']['type'] = MENU_CALLBACK;
}
Durch diesen Code wird der Tab "Create new account" ausgeblendet. Bei einem anonymen User wird aber trotzdem, unter dem Login-Form, der Link "Create new account" weiterhin angezeigt. Den möchte ich per Code ausblenden - was aber anscheinend nicht geht. Ein Beispiel-Schnipsel für diesen Fall wäre hilfreich. Danke das du so lange durchhältst.
Jetzt weiss ich auch endlich
am 08.08.2011 - 14:38 Uhr
Jetzt weiss ich auch endlich was Du vor hast, Du möchtest aus dem Block den entsprechenden Link unter dem Formular entfernen:
<?phpfunction MODULENAME_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'user_login_block') {
// Remove "Create new account" link and override items array
// @see user_login_block()
$items = array();
$items[] = l(t('Request new password'), 'user/password', array('attributes' => array('title' => t('Request new password via e-mail.'))));
$form['links'] = array('#value' => theme('item_list', $items));
}
}
?>
Eine lange Geburt - ich werde
am 08.08.2011 - 14:51 Uhr
Eine lange Geburt - ich werde in Zukunft verständlichere Fragen stellen. Vielen Dank für deine Geduld - es funktioniert. Das die Links zu einem Form gehören war mir zwar grundsätzlich klar - aber trotzdem nicht richtig bewusst.
Gruß
Frank