0

ユーザーがノードを作成する前に確認したいことがいくつかあります。したがって、ユーザーがノード/追加/提案にアクセスした場合、そのユーザーがアクセスできるかどうかを確認したいので、モジュールを作成しました。

function proposals_menu() {

    $items['node/add/proposal'] = array(
        'title' => t('Proposal'),
        'access callback' => 'proposals_access',
    );

    return $items;
}

function proposals_access() {
    $cond1;
    $cond2;
    ...

    return cond1 && cond2 && ....;
}

[コンテンツの追加]->[提案]をクリックすると、空白のページが表示されます。私は何が欠けていますか?

4

2 に答える 2

1

hook_menu_alter()既存のメニュー項目を上書きするには、の代わりに使用する必要がありますhook_menu()。例えば

function proposals_menu_alter(&$items) {
  $items['node/add/proposal']['access callback'] = 'some_function';
}

しかしhook_node_access()、(名前が示すように)ノードアクセスのチェックに使用するのが望ましいものもあります。例えば

function proposals_node_access($node, $op, $account) {
  $type = is_string($node) ? $node : $node->type;

  if ($type == 'proposal' && $op == 'create') {
    if ($allow_access) {
      return NODE_ACCESS_ALLOW;
    }
    else {
      return NODE_ACCESS_DENY;
    }
  }
  return NODE_ACCESS_IGNORE;
}

$allow_accessアクセスチェックを入力するとします。フックに渡されたオブジェクトを使用して$account、そのユーザーオブジェクトに対する操作を確認してください。現在ログインしているユーザーに依存しないでください。常に同じになるとは限りません。

于 2013-01-18T16:48:11.140 に答える
0

作成しているパスをレンダリングする方法をdrupalに指示していないため、空白のページが表示されます。そのためには、アイテムにページコールバックを追加する必要があります。hook_menuのドキュメントで指定されているように、この関数は、ユーザーがパスにアクセスしたときにページを表示するために呼び出されます。

 ...
$items['node/add/proposal'] = array(
        ...
        'page callback' => 'proposals_display_function'
    );
 ...
于 2013-01-18T13:55:13.873 に答える