web-dev-qa-db-ja.com

コアフォーラムフォームのドロップダウンが空です

D6サイトで、ユーザーがノード/追加/フォーラムにアクセスすると、ドロップダウン「フォーラム」に「選択してください」と表示されているだけで、そのメニューには何も表示されていません。

PHPエラーログまたはウォッチドッグには何もありません。

ユーザーには正しい権限があるはずです-結局のところ、フォームは表示されます。それ以外の場合(管理者の場合)は、サイト上のすべての異なるフォーラムを表示するドロップダウンが空で、フォームがないとフォームを送信できないというだけです。

私はほとんどすべてのWebが解決策を探すのを見てきましたが、成功しませんでした。この新しい洗練されたインターフェースに、正しい答えや方向を教えてくれる人がいるといいのですが。

3
Vacilando

そうです、私はあらゆる種類の非論理的なものを試しました。そのうちの1つは、フォーラムアクセスモジュール( http://drupal.org/project/forum_access )を非アクティブ化およびアンインストールすることでした。

フォームにアクセスできるため、私はする必要はありませんでしたが、とにかく、必死になってしまいました。

次に、それを再度有効にしました。すべての権限を再度設定します。

そして、うまくいきます!

しかし、これは適切な解決策ではありません。フォーラムアクセスの何かがひどく台無しにされており、理想的にはこの問題は私のような回避策ではなく根本的に解決されているはずです。

2
Vacilando

フォーラムアクセスもインストールされていると報告したので、ログインしているユーザーがWebサイトに対して定義されている少なくとも1つのフォーラムに投稿を追加できることを確認しましたか?
モジュールの目的は、各フォーラムを表示、編集、および更新できるユーザーを制御することであるため、ドロップダウンリストにデータが入力されない原因となる可能性があります。

実際、次のフックは、フォームの選択フィールドに含まれている値を変更して、フォーラム投稿が関連付けられているフォーラムを選択できるようにします。

/**
 * Implementation of hook_form_alter().
 *
 * Alter the node/comment create/edit forms and various admin forms.
 */
function forum_access_form_alter(&$form, &$form_state, $form_id) {
  //dpm($form, "form_id($form_id)");
  if (isset($form['type']['#value']) && $form['type']['#value'] .'_node_form' == $form_id) {
    module_load_include('node.inc', 'forum_access');
    _forum_access_node_form($form, $form_state);
  }
  // …
}

/**
 * Rewrite the taxonomy item on the node form.
 */
function _forum_access_node_form(&$form, &$form_state) {
  global $user;
  $vid = _forum_access_get_vid();

  if (!isset($form['taxonomy'][$vid]['#options'])) {
    return;
  }

  // True node administrators are all powerful and do NOT get their forms rewritten here.
  if (user_access('administer nodes') && empty($user->_forum_access_moderator)) {
    return;
  }

  $roles = array_keys($user->roles);
  $result = db_query("SELECT tid FROM {forum_access} WHERE rid IN (". db_placeholders($roles) .") AND grant_create = 1", $roles);
  while ($obj = db_fetch_object($result)) {
    $tids[$obj->tid] = $obj->tid;
  }

  // Also get all forums they happen to be able to moderate.
  $result = db_query("SELECT a.number AS tid FROM {acl} a INNER JOIN {acl_user} u ON a.acl_id = u.acl_id WHERE a.module = 'forum_access' AND u.uid = %d", $user->uid);
  while ($obj = db_fetch_object($result)) {
    $tids[$obj->tid] = $obj->tid;
  }

  // Ensure the forum they're trying to post to directly is allowed, otherwise
  // there will be much confusion.
  $forum_tid = arg(3);
  if (isset($forum_tid) && is_numeric($forum_tid) && !isset($tids[$forum_tid])) {
    drupal_access_denied();
    module_invoke_all('exit');
    exit;
  }
1
kiamlaluno