【问题标题】:hook_form_alter is not fired off on page refresh页面刷新时不会触发 hook_form_alter
【发布时间】:2020-04-25 03:58:02
【问题描述】:

我已经制作了一个 Drupal7 模块,我正在尝试加载 hook_form_alter 中的值。 保存后它可以工作,但是当我刷新页面时它会空白。 为了向您展示问题,我在 hook_form_alter 中打印了时间并且它没有更新。 任何想法为什么我刷新页面时它没有显示新的时间戳?

<?php

function bank_info_menu() {
  $items = array();
  $items['bank-info'] = [
      'title' => 'My Banking Info',
      'page callback' => 'drupal_get_form',
      'page arguments' => array('bank_info_form'),
      'access callback' => 'bank_info_check_role',
      'type' => MENU_NORMAL_ITEM,
  ];

  return $items;
}

function bank_info_form($form, &$form_state) {
  $form['bank_account_number'] = array(
    '#type' => 'textfield',
    '#title' => t('Bank Account Number'),
    '#default_value' => '',
    '#maxlength' => 20,
  );

  return $form;
}

function bank_info_form_submit($form, &$form_state) {
  global $user;
  $obj = entity_metadata_wrapper('user', $user);
  if(array_key_exists('bank_account_number', $form_state['values'])){
    $obj->bank_account_number = $form_state['values']['bank_account_number'];
  }
  $obj->save();
  drupal_set_message('Saved banking information successfully.');
}


function bank_info_form_alter(&$form, &$form_state, $form_id){
  if ($form['#id'] == 'bank-info-form') {
    echo date("h:i:sa");
  }
}

【问题讨论】:

  • 您是否尝试添加 $form_state['rebuild'] = true; ? ,为什么每次都需要开火?也许还有另一个为什么要实现你想要的?
  • @Fky 成功了!精彩的。我是 Drupal 的新手。我要做的是制作一个显示和查看当前值的表单。
  • 太棒了,我很高兴看到这个 ;)

标签: drupal-7


【解决方案1】:

该代码有一个缺点。它在 'if' 子句中使用 $form['#id'] 。 $form['#id'] 通常用于表单的 'id' 属性,在某些情况下可能会有所不同。改用 $form_id 变量。

if ($form_id == 'bank_info_form') {
  echo date("h:i:sa");
}

【讨论】:

  • 谢谢。我这样做了,但我遇到的问题是页面正在被缓存。我需要删除此表单的缓存或关闭此特定表单的缓存,但我不知道该怎么做。
  • 好吧。表单本身不会在页面刷新时从缓存中检索。表单提交时表单缓存触发。所以更可能的原因是在页面缓存中。要禁用页面缓存,您可以在代码中调用 drupal_page_is_cacheable(false)。但是,据我所知,此表单仅适用于登录用户,因此正常的 drupal 页面缓存也不应该触发。问题的根源可能在于浏览器或代理服务器缓存(需要检查缓存标头发送您的网络服务器)或某些网络服务器缓存机制。或者一些为登录用户缓存页面的模块。
  • 感谢@Eugene。 drupal_page_is_cacheable 没有修复它。注意,当我在浏览器的url末尾添加一个随机参数时,它显示的是真实的新数据。
猜你喜欢
  • 1970-01-01
  • 2019-07-29
  • 1970-01-01
  • 2015-04-20
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多