Potrzebuję listy rozwijanej, która domyślnie jest pusta. Zawiera pole „-utwórz nowego klienta-”, a następnie listę klientów. Oto kod dla pola menu:

$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-'),
);

Oto funkcja, której używam do wypełniania $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;
}

Oto wydruk z $fullName

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

Wszystko działa świetnie. Jedynym problemem jest to, że wstawia liczbę po -dodaj nowego klienta-. więc wygląda to tak:

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

Wydrukowałem wartości mojego pola opcji:

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

Liczba wzrasta, jeśli podam -dodaj nowego klienta- wartość liczbową. Na przykład, jeśli to zrobię:

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

Następnie 0 zmienia się w 6.

Wszelkie pomysły, w jaki sposób mogę uzyskać niezagnieżdżoną tablicę. Próbowałem też tego, ale pojawił się błąd:

'#options' => array (
  'add' => '-add new client-', 
  array_keys($fullNames) => array_values($fullNames)), 
0
pnkflydgr 27 luty 2012, 07:42

2 odpowiedzi

Najlepsza odpowiedź

Okazuje się, że rozwiązanie było dość proste. Więc zamiast

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

Po prostu zrób

'#options' => $fullName,

A następnie w mojej funkcji myForm_get_names() zamiast

$fullName = array();

Robić

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

Nie musiałem nic więcej zmieniać. Pomysł array_merge h0tw1r3 był jednak sprytny.

0
pnkflydgr 2 marzec 2012, 23:37
#options => array_merge(array('add' => '-add new client-'),$fullNames)
0
h0tw1r3 27 luty 2012, 08:49