У меня есть этот код, который выдает мне некоторые флажки с серьезностью жестов:
/**
* Checkbox for errors, alerts, e.t.c
*/
foreach (watchdog_severity_levels() as $severity => $description) {
$key = 'severity_errors' . $severity;
$form['severity_errors'][$key] = array(
'#type' => 'checkbox',
'#title' => t('@description', array('@description' => drupal_ucfirst($description))),
'#default_value' => variable_get($key, array()),
);
return system_settings_form($form);
}
Я установил этот ключ в свой код как:
$key = array_filter(variable_get($key,array()));
Я думаю, что этот набор ошибочен, поскольку drupal выдает мне ошибку. После этого набора $ key, который я называю его следующим выражением foreach, кто-то может помочь мне с этой штукой?
foreach ($key as $value) {
if ($value == 'warning') {
blablblablabla....
}
elseif ($value == 'notice') {
blablablbalbal....
}
}
Используя вашу логику, вы сохраните следующие ключи severity_errors0
, severity_errors1
, severity_errors2
,... в таблице variable
потому что ключ $severity
вашего foreach является только индексом.
Было бы проще хранить массив выбранных уровней серьезности как одну запись в таблице переменных?
Вот пример кода, который выполняет эту работу для вас:
// Retrieve store variable
$severity_levels = variable_get('severity_levels', array());
// Declare empty options array
$severity_options = array();
// Loop through each severity level and push to options array for form
foreach (watchdog_severity_levels() as $severity) {
$severity_options[$severity] = t('@description', array(
'@description' => drupal_ucfirst($severity),
));
}
// Generate checkbox list for given severity levels
$form['severity_levels'] = array(
'#type' => 'checkboxes',
'#options' => $severity_options,
'#default_value' => array_values($severity_levels),
);
return system_settings_form($form);
Теперь, чтобы получить выбранные уровни серьезности, вы делаете что-то вроде этого:
// Retrieve store variable
$severity_levels = variable_get('severity_levels', array());
foreach ($severity_levels as $level => $selected) {
if (!$selected) {
// Severity level is not selected
continue;
}
// Severity level is selected, do your logic here
// $level
}
Вам нужно добавить некоторую отладку, чтобы выяснить, где именно это происходит. Порекомендовал бы использовать dpm() для проверки кода на некоторых ключевых этапах, таких как 1) после создания формы, 2) когда вы назначаете массив на $ key и 3) перед запуском финального цикла foreach, чтобы вы могли точно определить, куда он идет неправильно и адресовать его.