【问题标题】:How to add form alter hook in drupal 8如何在 drupal 8 中添加表单更改挂钩
【发布时间】:2017-08-03 13:45:16
【问题描述】:

我对 drupal 8 非常陌生,我正在尝试更改自定义内容类型“问题”下的表单。该表单的 id 为“node-question-form”。

我已经设置了一个模块并尝试添加 hook_FORM_ID_alter() 但它从未被调用。即使是最简单的钩子也不起作用。例如:

function constellator_form_alter(&$form, &$form_state, $form_id){
     echo "alter the form"; exit;
}

其中“星座”是模块名称。

我从早上开始就被困住了,没有什么对我有用,任何帮助都将不胜感激。

干杯

【问题讨论】:

  • 这个模块启用了吗?

标签: drupal-8


【解决方案1】:

hook_form_alter() 和 hook_FORM_ID_alter() 在创建表单时和在屏幕上显示之前被调用。
这些函数写在 .module 文件中。
在写完任何钩子函数后清除缓存。这让 Drupal 明白已经声明了这样一个函数。
如果使用 drush 版本 8,请使用 drush cr,否则单击 Manage->Drupal 8 logo->Flush all Caches 以清除缓存。 现在您可以检查是否正在调用该函数。 最好的检查方法是安装开发模块,启用它。与 Devel 一起安装了 Kint。也从管理 UI 启用 Kint。 完成后,您可以通过以下方式检查钩子是否被调用:

function constellator_form_alter(&$form, &$form_state, $form_id){
     kint($form);
}

这将打印页面中所有表单的所有表单变量。 如果您想定位页面中的特定表单,例如。你形成,节点问题形式,输入:

function node_question_form_form_alter(&$form, &$form_state, $form_id){
     kint($form);
}

使用回显,您可以通过查看页面的源代码,然后使用某些搜索选项搜索您回显的文本,轻松确认是否正在调用该函数浏览器,例如,Ctrl+f(如果是 Google Chrome)。

【讨论】:

  • 活的真棒,真的很有帮助。
【解决方案2】:

如果你想改变排序选项和/或方向(ASC / DESC),你可以使用这个例子(用 Drupal 9 测试)。 在这里,我根据用户在暴露的过滤器中设置的“排序方式”强制排序方向。 (如果用户想按相关性排序,我们将 order 设置为 ASC,如果用户想按日期排序,我们将 order 设置为 DESC 以首先有最新的内容。

/**
* Force sorting direction for search by date
*
*/
function MYTHEME_form_alter(&$form, &$form_state, $form_id)
{
    if (!$form_id == 'views_exposed_form"' || !$form['#id'] == 'views-exposed-form-search-custom-page-1') {
        return;
    }

    $user_input = $form_state->getUserInput();
    if (empty($user_input['sort_by'])) {
        return;
    }

    if ($user_input['sort_by'] == 'relevance') {
        $user_input['sort_order'] = 'ASC';
    } elseif ($user_input['sort_by'] == 'created') {
        $user_input['sort_order'] = 'DESC';
    }
    
    $form_state->setUserInput($user_input);
}

请注意,“views-exposed-form-search-custom-page-1”是我的表单的 id, "relevance" 和 "created" 是在 drupal admin 中设置的排序字段标识符。

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2019-06-16
    • 1970-01-01
    相关资源
    最近更新 更多