Wie füge ich einem von einer Ansicht definierten Pfad die Funktion "Zugriffsrückruf" hinzu?

7

Ich verwende Drupal 7, Views 3 und hook_menu_alter

function MYMODULE_menu_alter(&$items){
  $items['client/place/%'] = array(
    'access callback' => 'custom_function',
  );   
}

Um die Sichtbarkeit der Ansicht (Zugriff) zu überschreiben und auch die Caches zu leeren, aber dies scheint nicht zu funktionieren. Kann jemand etwas Licht darauf geben, wie dies gelöst werden kann. Ist dies der richtige Weg, um den durch eine Ansicht definierten Pfad zu überschreiben?

Danke im Voraus

Mauricio
quelle
1
Ich denke, Sie haben dort vielleicht einen Tippfehler gemacht. Ihre Frage lautet "Zugriffsrückruf", während Ihr Beispielcode den "Seitenrückruf" festlegt.
Marcvangend
Du hast recht. Ich habe es gerade aktualisiert
Mauricio

Antworten:

9

Erinnerung: Mit dem Modul "Ansichten" können Sie den Zugriff über die Benutzeroberfläche von Ansichten festlegen

Wenn Sie Ihre eigene Logik erstellen möchten; So sollte Ihr Code aussehen:

function MYMODULE_menu_alter(&$items){
  $items['client/place/%']['access callback'] = 'MYMODULE_custom_callback'; 
}

function MYMODULE_custom_callback(){ 
  $isValid = false;

  /* your logic */

  return $isValid;
}

Stellen Sie sicher, dass Ihr Modul nach dem Views-Modul aufgerufen wird. Normalerweise beträgt das Gewicht des Views-Moduls 10; Ihr Modul sollte also 11 oder mehr sein.

Vergessen Sie auch nicht, Ihren Cache zu leeren.

Aboodred1
quelle
1
Hallo danke. Es klappt. Ich benötige mehr als pro Rolle oder Berechtigungsfilter (wie über die Benutzeroberfläche von Ansichten). Ich habe nach einem Weg gesucht, um herauszufinden, welches Gewichtsmodul ist. Hier sind einige Methoden: http://drupal.org/node/110238 .
Mauricio
Gern geschehen, ich bin froh, dass es für Sie funktioniert hat.
Aboodred1
5
Es ist auch möglich, hook_module_implements_alterIhre hook_menu_alterImplementierung nach Ansichten zu verschieben und dann die Menüelemente anzuzeigen, die Ansichten hinzugefügt haben. Funktioniert ungefähr so ​​wie das Festlegen des Modulgewichts, außer dass Sie kein explizites Gewicht für Ihr Modul festlegen müssen.
Thirdender
Ich musste% views_arg anstelle von% verwenden, damit es für mich funktioniert. Also so:$items['user/%views_arg/posts']['access callback'] = 'MYMODULE_custom_access_callback';
Jphelan