特定のコンテンツタイプalwaysに親の本/ページがあることを確認したいと思います。
JavaScriptで、bookモジュールなどを変更して、これを行う方法はありますか?
はい、book.moduleを変更せずにそれを行うことができます。 (Drupalファイルの変更は決して良い考えではありません。)
次のようなコードを含むカスタムモジュールを作成できます。
/**
* Implements hook_BASE_FORM_ID_alter().
*/
function mymodule_form_node_form_alter(&$form, &$form_state, $form_id) {
if (!empty($form['book']['bid'])) {
$form['book']['bid']['#element_validate'][] = 'mymodule_book_validate';
}
}
/**
* Form validation handler for book_form_node_form_alter().
*/
function mymodule_book_validate($element, $form_state) {
// Check other conditions you need to check.
if ($element['#value'] == 0) {
form_error($element, t('You must select a book.'));
}
}
私が書いたコードでは、エラーを報告する前に他の条件をチェックできます。たとえば、書籍を管理する権限を持つユーザーが、書籍を書籍ページに割り当てないようにすることができます。また、ノードのタイトル、ブックページを作成しているユーザーに割り当てられている権限、ノードの本文として使用されているテキスト内のキーワードの存在など、他の条件を確認することもできます。
編集:確認すると、この質問はD7固有のものであることがわかります。私のコードスニペットに微妙な問題がある可能性があります。基本的に同じである必要があります。
何かが起こってはならない場合、私はそれを絶対に選択しないことを好む。
すべての本のページをデフォルトで新しい本にする場合:
/**
* Implementation of hook_form_FORM_ID_alter() for node_form.
*/
function mymodule_form_node_form_alter(&$form, &$form_state) {
if (book_type_is_allowed($form['#node']->type)) {
// Remove the "none" option.
unset($form['book']['bid']['#options'][0]);
}
}
完了したら、そのままにするか、$form['book']['bid']['#default_value']
明示的に新しい本、または指定した本の入札価格。 noneを削除した後のセレクターの最初のオプションであるため、それはおそらく自然に新しい本を作成することになります。