web-dev-qa-db-ja.com

node_form_alterによるリビジョンチェックボックスに基づいて、リビジョンログメッセージを必須にする方法を教えてください。

私の目標は、作成/編集ノードで「Create new revision」がチェックされている場合に「revision log message」を必須にすることです。

create new revision」フィールドに基づいて、可視および必須のマークを追加できます。

function hook_form_node_form_alter(&$form, &$form_state, $form_id) {

  $form['revision_information']['log']['#states'] = [
    'required' => [
      ':input[name="revision"]' => ['checked' => TRUE],
    ],
    'visible'  => [
      ':input[name="revision"]' => ['checked' => TRUE],
    ],
  ];
}

必要に応じて「改訂ログメッセージ」も作成できます。

function hook_form_node_form_alter(&$form, &$form_state, $form_id) {

  $form['revision_information']['log']['#required'] = [
    'required' => [
      ':input[name="revision"]' => ['checked' => TRUE],
    ],
  ];
}

しかし、「新しいリビジョンを作成」チェックボックスに基づいてフィールドを必須にする方法がわかりません。

PS:これを簡単にしたいと思います "Enforce revision log message "モジュールを使用したくありません。

//更新1:カスタムフックの検証が必要であり、それを検索する

2
CocoSkin

何時間も検索した結果、答えが見つかりました。基本的に、リビジョンログのカスタムフック検証を追加するだけです。以下のコードを参照してください。

function MYMODULENAME_form_node_form_alter(&$form, &$form_state, $form_id) {
    // change revision log status based on revision checkbox
    $form['revision_information']['log']['#states'] = array(
        'required' => array(
          ':input[name="revision"]' => array('checked' => TRUE),
        ),
        'visible' => array(
          ':input[name="revision"]' => array('checked' => TRUE),
        ),
    );
}
function MYMODULENAME_node_validate($node, $form, &$form_state) {
    // add revision log validation
    if (empty($form_state['values']['log']) && ($form_state['values']['revision'])) {
        form_set_error('log', 'Revision log message cannot be empty!');
    }
}

これが必要なリビジョンログメッセージを必要とする人に役立つことを願っています。

0
CocoSkin