2015-03-06 5 views
0

Я этот код, который получает меня несколько флажков с сторожевыми важностями:Флажков с watchdog_severity_levels()

/** 
    * 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())); 

Я думаю, что это set ошибочен, поскольку drupal вызывает ошибку. После этого набора $ key я называю это следующим заявлением foreach, может ли кто-нибудь помочь мне с этой штукой?

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

ответ

1

Используя вашу логику, вы бы хранить следующие ключи severity_errors0, severity_errors1, severity_errors2, ... в variable таблицы, так как $severity ключа вашего Еогеаспа только индекс.

Не было бы проще хранить массив выбранных уровней серьезности как одну запись в таблице переменных?

Вот несколько примеров кода, который делает работу за вас:

// 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') { – Karmen

+0

ok Я узнал ответ, спасибо, что это то, чего я хотел! – Karmen

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^