Флажки с watchdog_severity_levels ()

0

У меня есть этот код, который выдает мне некоторые флажки с серьезностью жестов:

  /**
   * 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....
  }
}
Теги:
foreach
drupal
drupal-7
watchdog

2 ответа

1
Лучший ответ

Используя вашу логику, вы сохраните следующие ключи 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
}
  • 0
    Я понимаю ваш код, но как я могу использовать серьезности в операторе if? Например: if ($ levels == 'Warning') {
  • 0
    хорошо, я узнал ответ, большое спасибо, это то, что я хотел !!
0

Вам нужно добавить некоторую отладку, чтобы выяснить, где именно это происходит. Порекомендовал бы использовать dpm() для проверки кода на некоторых ключевых этапах, таких как 1) после создания формы, 2) когда вы назначаете массив на $ key и 3) перед запуском финального цикла foreach, чтобы вы могли точно определить, куда он идет неправильно и адресовать его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню