web-dev-qa-db-ja.com

Drupal 7ノードのオーサリング情報に複数の著者を含める

多くの人がデータを提供できるCMSを持っています。したがって、ノードに貢献した人は誰でも署名するに値するので、新しいデータを追加したり、既存のデータをモデレートしたりして、ノードのデータに貢献したすべてのユーザーを含めます。現在、コンテンツを作成する最初の人だけが正当な著者になります。

どうすればこれを達成できますか?

私はググったが、あまり助けを得ることができなかった。私ができる最も近い これが見つかりました 、これはまだ答えられていません。 エンティティ参照モジュール を確認しましたが、ユーザーが既存のノードを編集するたびに作成者を自動入力することができませんでした。

自動修正を有効にしています。つまり、貢献したノードの各作成者の情報を入手しています。しかし、どのようにして各著者を改訂情報から引き出し、各記事の最後にすべての著者と寄稿者のコレクションを素敵な方法で表示するのでしょうか。

私が解決策を見つけるのを手伝ってください、私はPHPプログラミングに精通していません。

ありがとうございます。それでは、お元気で、
ラジパワンG

4

私は次の手順でこれを達成しました:

  1. ルールモジュールエンティティリファレンスモジュール をダウンロードして有効にします。
  2. 「Foo」というフィールドをコンテンツタイプに追加します。フィールドタイプ:エンティティ参照。ターゲットタイプ:ユーザー。
  3. 新しいルールを作成します。
    1. イベントを追加:「コンテンツを保存する前に」
    2. 追加条件:データ比較。パラメータ:比較するデータ:[node:type]、データ値:bar(「bar」=コンテンツタイプの名前)
    3. アクションの追加:リストにアイテムを追加します。リスト:[node:field-foo]、追加するアイテム:[site:current-user]

これで、コンテンツが保存されるたびに、コンテンツを保存したユーザーがそのページの編集者のリストに追加されます。

4
beth

次に、wiki_pageというコンテンツタイプのタスクを実行するカスタム.moduleを示します。コンテンツタイプには、field_editorsと呼ばれる複数値のテキストフィールドがあります。 field_editorsを表示モードにすると、リストが表示されます。ビューの作業は必要ありません。

_/** * @file * Keep track of the users who have edited a wiki page. * * @todo Check whether the page content has changed. */_

/** * Implements hook_form_FORM_alter(). */ function cyco_remember_editors_form_wiki_page_node_form_alter( &$form, $form_state ) { $form['#submit'][] = '_cyco_remember_editors_wiki_submit'; $form['field_editors']['#access'] = FALSE; }

/** * Add current user to list of editors if not already there. */ function _cyco_remember_editors_wiki_submit( $form, &$form_state ) { global $user; //Editor is current user. $editor_name = $user->name; //Flag to show whether the editor is already in the list. $editor_in_list = FALSE; $language = $form['#entity']->language; $num_editors = 0; //Are any editors listed? if ( isset($form['#entity']->field_editors[$language][0]['value']) ) { //Yes - see whether the current editor is already in the list. $current_values = $form['#entity']->field_editors[$language]; $num_editors = sizeof( $current_values ); for( $index = 0; $index < $num_editors; $index ++ ) { if ( $current_values[$index]['value'] == $editor_name ) { //Editor is already listed. $editor_in_list = TRUE; break; } } } if ( ! $editor_in_list ) { //Current editor is not in the list. Add him/her. $form_state['values']['field_editors'][$language][$num_editors]['value'] = $editor_name; } }

1
user2588008