1

Drupal API の初心者である私が背景について説明している間、どうかご容赦ください。

ユーザーがカスタム ノード作成リンクをクリックしたときに 2 つの個別の応答を作成するために、以下のコードを試しています。デフォルトでは、ユーザーがノードを作成する際の通常の手順を実行できるページが開きます。私のモジュールが行うことは、ユーザーが特定の権限を持っているかどうかを確認し、ノードの作成を続行できるようにするか、アクセス拒否ページをスローすることです。

function mymodule_menu_alter(&$items) {  
  $items["node/add/page/%"]['access callback'] = 'mymodule_access_callback';
}

function mymodule_access_callback(){
  if( user_access('open sesame') ){
    drupal_set_message("successfully intecepting new node creation");
    return true;
  }
  return false;
}

ノード/追加/ページは正常にブロックされますが、どちらの場合もブロックされます。if ステートメントは、ユーザーが特定の権限を持っているかどうかを判断し、その中に return true を追加したため、次のエラーが発生しました。

致命的なエラー: require_once() [function.require]: /var/www/vhosts/mysite.co.uk/httpdocs/includes/menu で必要な '/node.pages.inc' (include_path='.:') を開けませんでした.inc 347 行目

初心者として、適切なユーザーのアクセス拒否ページを回避するために何をする必要があるのか​​ わかりません.

4

1 に答える 1

0

これを試して:

function mymodule_menu_alter(&$items) {  
  $items["node/add/page/%"]['access callback'] = 'mymodule_access_callback';
  $items["node/add/page/%"]['file'] = drupal_get_path('module', 'node') . '/node.pages.inc';
}

編集

上記の 2 行目を次のように変更してみてください。

$items["node/add/page"]['file'] = drupal_get_path('module', 'node') . '/node.pages.inc';

定義しているパスの親アイテムのファイル パスを明示的に設定しようとしています。

また、これはばかげた言い方かもしれませんが、変更をhook_menu_alter()行うたびに、Drupal のキャッシュをクリアして、変更が反映されるようにします。

于 2011-12-02T16:06:23.060 に答える