Drupal 7: нежелательный персонаж в выпадающем списке - PullRequest
0 голосов
/ 27 февраля 2012

Что мне нужно, это раскрывающийся список, который по умолчанию пуст. Имеется поле «Создать нового клиента», а затем список клиентов. Вот код для поля меню:

$form['client']['existing'] = array(
  '#title' => t('Client'),
  '#type' => 'select',
  '#options' => array('add' => t('add new client'),$fullName),
  '#empty_option' => '',
  '#description' => t('Select an existing Client or choose -create new client-'),
);

Вот функция, которую я использую для заполнения $ fullName:

function myForm_get_names()
{
  $query = db_select('client', 'c');
  $query->fields('c', array('cid','fname','lname'));
  $fullName = array();
  $result = $query->execute();

  foreach ($result as $r)
  {
    $fullName[$r->cid] = $r->fname . " " . $r->lname;
  }
  return $fullName;
}

Вот распечатка из $ fullName

array (
  1 => 'tim arthur',
  2 => 'val brant',
)

Все отлично работает. Единственная проблема заключается в том, что он вставляет число после -add нового клиента-. так это выглядит так:

Client:
blank
-add new client-
0
  tim arthur
  val brant

Я распечатал значения моего поля опции:

'#options' => array(
  'add' => 'add new client',
  0 => array(
    1 => 'tim arthur',
    2 => 'val brant',
  ),
),

число увеличивается, если я даю -дд нового клиента- числовое значение. Например, если я сделаю:

'#options' => array ('5' => '-add new client-', $fullNames),

затем 0 превращается в 6.

Любые идеи о том, как сделать так, чтобы мой массив не был вложенным. Я тоже пробовал это, но получил ошибку:

'#options' => array (
  'add' => '-add new client-', 
  array_keys($fullNames) => array_values($fullNames)), 

Ответы [ 2 ]

0 голосов
/ 02 марта 2012

Оказывается, решение было довольно простым.Поэтому вместо

'#options' => array('add' => t('add new client'),$fullName),

просто выполните

'#options' => $fullName,

, а затем в моей функции myForm_get_names () вместо

$fullName = array();

сделайте

$fullName = array('add' => '-add new client-');

не нужно было ничего менять.Идея array_merge в h0tw1r3 была хитрой.

0 голосов
/ 27 февраля 2012
#options => array_merge(array('add' => '-add new client-'),$fullNames)
...