Drupal覆盖现有选项列表值

时间:2011-12-01 05:32:39

标签: php drupal-7

目前,entityreference不支持过滤(通过像引用这样的视图)。我必须通过hook_form_alter手动过滤选项列表的返回结果。

$new_options = array(1 => 'One', 2 => 'Two', 3 => 'Three'); // while old values without filtering results in 10 items
$form['field_entityreference'][$lang]['#options'] = $new_options;

这在前端工作正常,但是当我通过dsm($ form);查看时,旧的值仍然存在。

几次尝试无济于事:

   if ($old_options = $form['field_entityreference'][$lang]['#options']) {
     foreach ($old_options as $key => $old_option) {
       unset($form['field_entityreference'][$lang]['#options'][$key]);
     }
  }

甚至unset($form['field_entityreference'][$lang]['#options']); 使用array_diff_key,旧选项仍然保留在那里。

前端很好,只显示了新的选项,但是我需要从源中排除不需要的选项,因为当未完全删除时,规则总是计算为true,这是意外的。

如何删除延迟的旧值,以便即使在后端也只保留新值?

尚未提供有用的功能:http://drupal.org/node/1085704。 任何提示都将非常感激。感谢

1 个答案:

答案 0 :(得分:0)

抱歉打扰。这是dsm()放置的问题。其实一切都很好。问题是dsm();总是放在任何覆盖之前,drupal仍然读取旧的值。放置dsm();在覆盖显示预期结果后,真是一场斗争:)。规则是另一个故事。