0

我在我的 Drupal 7 站点上安装了“更好的公开表单”模块,我为商务模块目录创建了一个视图,并在 JQuery 上制作了一个滑块范围过滤器,这里是(抱歉,该站点是俄语,但无论如何,必不可少的是一个 JQueryUI 滑块)http://doors.ekt0.ru/。所以,问题是,如何通过钩子以编程方式设置滑块的最小和最大可能值。这是因为希望从带有产品价格的数据库表中使最小和最大价格成为真实的。这是我的代码:

function zen_form_views_exposed_form_alter(&$form, $form_state) {

  $minmax = db_query('SELECT MIN(`commerce_price_amount`) AS `min`, MAX(`commerce_price_amount`) AS `max` FROM `field_data_commerce_price`')->fetchAssoc();

  $form['commerce_price_amount']['min']['#value'] = $minmax['min'];
  $form['commerce_price_amount']['max']['#value'] = $minmax['max'];
}

这是 $form 数组的 'commerce_price_amount' 键的内容:

[commerce_price_amount] => Array (
      [#tree] => 1
      [min] => Array (
           [#type] => textfield
           [#title] => 
           [#size] => 30
           [#default_value] => 
      )
      [max] => Array (
           [#type] => textfield
           [#title] => And
           [#size] => 30
           [#default_value] => 
      )
)

所以,正如我们在这里看到的,唯一看起来像我需要的数组键是#default_value,但它实际上不是那个,它不会对表单进行任何可见的更改,我还尝试了#value 键(如代码),但它设置了默认的滑块范围值,只是移动旋钮,而不是制作最小值和最大值。所以问题是,如何做到这一点,第二个问题是,模块中可能有任何设置可以自动设置最小值和最大值(我无法在设置中找到任何内容)。提前致谢!

4

1 回答 1

0

BEF 模块将这些选项添加为 javascript 选项,因此您可以使用 hook_js_alter() 覆盖它。

/**
 * Implements hook_js_alter().
 */
function MODULE_js_alter(&$javascript) {
  $settings = $javascript['settings']['data'];

  foreach ($settings as $key => $value) {
    if (isset($settings[$key]['better_exposed_filters']['slider_options']['commerce_price_amount']['max'])) {
      $settings[$key]['better_exposed_filters']['slider_options']['commerce_price_amount']['max'] = 1000;
    }
  }

  $javascript['settings']['data'] = $settings;
}
于 2014-09-29T12:05:10.530 回答