Drupal更好地暴露了表单设置的最小和最大值


Drupal better exposed form set min and max values from a hook

我已经在我的Drupal 7站点上安装了'better exposed form'模块,我为商业模块目录创建了一个视图,并在JQuery上制作了一个滑块范围过滤器,这里是(对不起,该站点是俄语的,但无论如何,最重要的是一个JQueryUI滑块)http://doors.ekt0.ru/。所以,问题是,如何从钩子以编程方式设置滑块的最小和最大可能值。这是因为a想让最小和最大价格是真实的,从数据库表的产品价格。下面是我的代码:

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 array的'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键(如在代码),但它设置默认的滑块范围值,只是移动旋钮,而不是使最小和最大值。所以问题是,如何做到这一点,第二个问题是,也许,模块中有任何设置可以自动设置最小和最大值(我无法在设置中找到任何东西)。提前感谢!

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;
}