Drupal 6 formları ve optgroup diziler

2 Cevap php

Aşağıdaki array (xml2array kullanarak) bir dizi XML dönüştürerek üretilir. Ancak onun değil ben bir Drupal 6 şeklinde bir optgroup için gereken tam doğru biçimi.

Array (
   [root] => Array ([attr] => Array ([id] => 1) [label] => Array ([value] => My Root)
      [node] => Array (
         [0] => Array ([attr] => Array([id] => 2) [label] => Array([value] => Category 1)
            [node] => Array(
               [0] => Array ([attr] => Array ([id] => 14) [label] => Array ([value] => Sub-Category 1))
               [1] => Array([attr] => Array ([id] => 15) [label] => Array([value] => Sub-Category2))

Ben dizi de alt kategoriler için sağlam id değerleri ile bu formata azaltılabilir düşünüyorum. Bir seçeneğe değerler atama hakkında bir şey söz yok gibi ancak ben drupal dokümanlar ile bu teyit edemez.

Array (
   [Category 1] => Array(
      [14] => Sub-Category 1
      [15] => Sub-Category 2
   )
)

Yani benim sorular 1) my belirtilen değerlere ve 2) nasıl maç benim dizi azaltmak yapmak Drupal optgroups için doğru dizi biçimi nedir olmalıdır?

2 Cevap

1) The correct format for an option group array is (I will use a list of states as an example):

$state_list = array(
  'AL'=>"Alabama",  
  'AK'=>"Alaska",  
  'AZ'=>"Arizona",  
  'AR'=>"Arkansas",
  ...
);

Bu anahtar olarak devlet baş tarafından erişilebilir devlet isimleri, listesini görüntüler.

Alt grupları kullanmak için, sizin gibi yukarıdaki değiştirmek istiyorsunuz:

$state_list = array(
  'A'=> array(
    'AL'=>"Alabama",  
    'AK'=>"Alaska",  
    'AZ'=>"Arizona",  
    'AR'=>"Arkansas",
    ...
  ),
  'C'=> array(
    'CA'=>'California',
    'CO'=>'Colorado',
     ...
  ),
  ...
);

Verildiği gibi Yani, tercüme veri için aşağıdaki biçimi gerekir:

$options = array(
  'My Root' => array(
    'Category 1' => array(
      '14' => 'Sub-Category 1',
      '15' => 'Sub-Category 2'
    )
  )
)

Ancak, 'Benim Kök' select elemanın adı ise, (sana aşağıda her biri için bir form tanımını göstereceğim) yerine bunu kullanın:

$options = array(
  'Category 1' => array(
    '14' => 'Sub-Category 1',
    '15' => 'Sub-Category 2'
   )
)

Sizin formları API tanımı aşağıdaki gibi görünecektir:

function mymodule_form() {
  $options = array(
    'My Root' => array(
      'Category 1' => array(
        '14' => 'Sub-Category 1',
        '15' => 'Sub-Category 2'
      )
    )
  );
  ...
  $form['Select Box Name'] = array(
    '#type' => 'select',
    '#title' => 'Select a Category',
    '#options'=> $options,
  );
  ...
  return $form;
}

Ya da bunun gibi, 'My Kök' select elemanının adı ve eğer değilse en kategorilerden biri:

function mymodule_form() {
  $options = array(
    'Category 1' => array(
      '14' => 'Sub-Category 1',
      '15' => 'Sub-Category 2'
     )
  );
  ...
  $form['My Root'] = array(
    '#type' => 'select',
    '#title' => 'Select a Category',
    '#options'=> $options,
  );
  ...
  return $form;
}

Bu tanımda, sizin alt kategoriler tamsayı kullanarak kilitlenmiştir - Ben bu ne istediğiniz emin değilim. Birçok kez Drupal geliştiricileri işleri kolaylaştırmak için aynı anahtarları ve değerleri (örn. '[CA} => [CA]') ile diziler kullanın.

Bu formatta bir yan etkisi 'Kategori 1' kendisi (XML kaynak hem 'Kök' ve "Kategori 1 'tuşları vardır çünkü onların önceki enkarnasyon seçilebilir olduğunu bana görünüyor) seçilebilir olmasıdır, ben HTML seçenek grubu, alt-kategori etiketleri bile eğer emin değilim, bu yüzden bu bir sorun olup olmadığından emin değilim.

Ben CCK kutudan hiyerarşik seçeneklerini yapabilirsiniz inanmıyorum. Muhtemelen alanları ve seçenekleri ile gruplara azaltmak olabilir ama bu yeterli jenerik olurdu bilmiyorum.

Kolaydır seçenek değerleri asssigning için olduğu gibi.

Dan the docs:

Değerler: dizi (t ('Gösterge değeri 1'), t ('Gösterge değeri 2')) veya array ('return_value1' => t ('Ekran Değer 1') şeklinde bir dizi, 'return_value2' => t ('Ekran Değer 2')) özel dönüş değerleri gerekiyorsa.

Yani yukarıdaki pasajı gibi bir şey olurdu:

$form['Category 1'] = array(
  '#type' => 'radios',
  '#title' => t('Category 1'),
  '#options' => array(
                      '14' => t('Sub-Category 1'),
                      '15' => t('Sub-Category 2')
                      ),
  );