drupal 8、私はカスタムコンテンツタイプ "Question"でフォームを変更しようとしています。フォームにはID "node-question-form"があります。
モジュールをセットアップし、hook_FORM_ID_alter()を追加しようとしましたが、呼び出されません。最も単純なフックでも機能しません。例えば:
function constellator_form_alter(&$form, &$form_state, $form_id){ echo "alter the form"; exit; }
ここで、「constellator」はモジュール名です。
私は朝から立ち往生しており、何の効果もありません。
おかげでガウラヴ・メーラ
これは、私がプロジェクトからプルし、モジュール名を持つように変更した実際の例です。
これを.moduleファイルの先頭に追加します。
use Drupal\Core\Form\FormStateInterface;
次にこれをコピーします
/**
* Implements hook_form_alter().
*/
function constellator_form_alter(&$form, FormStateInterface $form_state, $form_id) {
// Adding custom validation for the welcome page type field.
if ($form_id == 'node_article_edit_form' || $form_id == 'node_article_form') {
// Do some stuff.
}
}
おそらく、あなたがしていないことは、Drupalキャッシュをクリアしてフックを登録することです。「すべてのキャッシュをクリア」をクリックすることができます。あるいは、drushコマンドラインユーティリティをインストールして、 「drush cr」を使用します。
カスタムテーマを設定した場合、名前空間の要件を追加せずに、theme_name.themeファイルのhook_form_form_id_alter()
を使用してフォームを簡単に変更できます。
function bootstrap_ga_form_user_login_form_alter(&$form, &$form_state, $form_id) {
global $base_url;
$form['#validate'][] = '_bootstrap_ga_form_user_login_form_validate';
}
ユーザーのログインフォームにカスタム検証を追加しました。 bootstrap_gaはカスタムテーマの名前です。
カスタムモジュールでこれを試してください
以下の名前空間を使用する
use Drupal\node\Entity\Node;
use Drupal\Core\Form\FormStateInterface;
特定のノードにこのhook_form_alterを使用します
//constellator_form_node_question_form_alter
function modulename_form_Form_ID_form_alter(&$form, &$form_state, $form_id){
//echo <pre>; print_r($form); die;
}
そして、このフックは、特定のノードフォームIDを編集するために使用されます