Drupal лучше раскрывает форму, устанавливает минимальные и максимальные значения из хука

Я установил на свой сайт Drupal 7 модуль 'better visible form', создал представление для каталога модулей коммерции и сделал фильтр диапазонов ползунков на 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'];
}

а вот содержимое ключа commerce_price_amount массива $form:

[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 (как на код), но он устанавливает значения диапазона ползунка по умолчанию, просто перемещая ручки, не делая минимальные и максимальные значения. Итак, вопрос в том, как это сделать, и второй вопрос в том, что, возможно, в модуле есть какие-либо настройки для автоматической установки этих минимальных и максимальных значений (мне не удалось ничего найти в настройках). Заранее спасибо!


person Yuriy Dyachkov    schedule 20.05.2014    source источник


Ответы (1)


Модуль 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;
}
person Sándor Juhász    schedule 29.09.2014