1. Главная
  2. Блоги
  3. Блог SplasH

Значения ключей параметра #options после сохранения формы

Главные вкладки

Возник следующий вопрос. Я создаю форму, например:

<?php
$form
['blabla'] = array(
'#type' => 'checkboxes',
'#options' => array(
'a' => 'blabla1',
'b' => 'blabla2',
),
'#default_value' => variable_get('blabla',''),
);
?>

потом возвращаю её через<?php system_settings_form($form); ?>

но variable_get('blabla','') мне возвращает такой массив:

<?php
array(
'a' => 'a',
'b' => 'b'
)
?>

Короче, значение ключа теряется. А мне оно надо. Вопрос - как вернуть потерянное значение?

Комментарии

Аватар пользователя olk olk 2 марта 2011 в 20:53

Ну тогда как вариант хранить options отдельно, что нибудь типа

<?php function _get_myoptions($key = '') {
$a = array('a' = > 'blabla1','b' = > 'blabla2');
if (empty(
$key)) {
return
$a;
}
else {
return
$a[$key];
}
}
для формы
....
'#options' => _get_myoptions(),
...
а если надо получить значение по ключу, то соответственно
$my_blabla
= '';
$key = variable_get('blabla','')
if(!empty(
$key)) {
$my_blabla = _get_myoptions($key);
}
?>
Аватар пользователя SplasH SplasH 2 марта 2011 в 20:57

Это понятно Smile Просто у меня получение значения ключа - операция не ахти быстрая, она делает несколько запросов к базе, бегает по массивам и прочее) Поэтому я и не хотел повторять её при необходимости получить значение ключа. Но, видимо, выхода нет. Спасибо за помощь, olk

Аватар пользователя aleks_84 aleks_84 2 марта 2011 в 22:54

Можно сделать так:
в функции генерации формы вычисляются ключи, записываются в форму например:

<?php
$form['#blablavars'] = array (ассоциативный массив сгенеренный медленной функцией);
$form['blabla'] = array (
'#type' => 'checkboxes',
'#options' => array (
'a' => 'blabla1',
'b' => 'blabla2',
),
'#default_value' => variable_get ('blabla',''),
);
?>

ну а дальше имея массив ключей забираем массив из формы
<?php $vars = $form['#blablavars'] ?>
и по ключам получаем нужные значения.
правда тут тоже будет двойной вызов =\ форма кэшируется со второго обращения (http://drupal.org/node/650016)
но возможно этого получиться избежать, принудительно вызвав form_set_cache
PS#3 у меня вроде работает. нужно в конструкторе формы просто прописать $form['#cache'] = true; и form_set_cache будет вызвана автоматически.

Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /