У меня есть этот код, который выводит некоторые флажки с серьезностью сторожевого таймера:
/**
* 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()));
Я думаю, что этот сет неправильный, так как друпал выдает мне ошибку.
После этого набора $ 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
}
Вы должны добавить некоторую отладку, чтобы выяснить, где именно это идет не так. Рекомендую использовать пм () проверить код на некоторых ключевых этапах, таких как 1) после построения формы, 2) когда вы присваиваете массив $ key и 3) перед запуском последнего цикла foreach, чтобы вы могли точно определить, где он идет не так, и обратиться к нему.