带有watchdog_severity_levels()的复选框

时间:2015-03-06 09:59:29

标签: php drupal foreach drupal-7 watchdog

我有这段代码可以让我看到一些带有看门狗严重性的复选框:

  /**
   * 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:

$key = array_filter(variable_get($key,array()));

我觉得这个设置错了,因为drupal让我出错了。 在那组$ key之后我用以下foreach语句调用它可以有人帮助我做那件事吗?

foreach ($key as $value) {
  if ($value == 'warning') {
    blablblablabla....
  }
  elseif ($value == 'notice') {
    blablablbalbal....
  }
}

2 个答案:

答案 0 :(得分:1)

使用您的逻辑,您可以在severity_errors0表中存储以下键severity_errors1severity_errors2variable,...因为$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 :(得分:0)

您需要添加一些调试以确定其出错的位置。建议使用dpm()在构建表单之后的某些关键阶段检查代码,2)在将数组分配给$ key和3)之后,在启动最终的foreach循环之前,这样你就可以确定它出了问题并解决了。