Выпадающий список выбора в CakePHP - PullRequest
8 голосов
/ 20 сентября 2009

Кто-нибудь знает, как выбрать содержимое одного дубля из другого представления в CakePHP?

У меня есть дубль itemgroups, в котором есть 2 поля ID и Description. Мне нужно создать нисходящий список на странице добавления элементов, но я не могу найти хороший способ получить все значения из другой таблицы в массив для размещения на странице.

Ниже я также перечислил свои модели для каждой.

<?php

class Item extends AppModel
{
    var $name = 'Item';
    var $belongsTo = 'Itemgroup';
}

?>


class Itemgroup extends AppModel
{
    var $name = 'Itemgroup';
    var $hasOne = array('Item');
    var $validate = array(
        'description' => array(
            'rule' => 'notEmpty'
        ),
        'description' => array(
            'rule' => 'notEmpty'
        )
    );
}

?>

Ответы [ 10 ]

23 голосов
/ 22 сентября 2009

Если ваша модель - Пользователь, а поле, которое вы хотите использовать, - это список штатов США (например) ...

В вашем контроллере:

$this->set('states',$this->State->find('list'));

и по вашему мнению:

<?php echo $form->input('User.state',array('type'=>'select','options'=>$states)); ?>
4 голосов
/ 22 июля 2013
<?php 
    $arrCategory=array(1=>"Car",2=>"Boat",3=>"Bike");
    echo $form->input('inputname', array('options'=>$arrCategory, 'label'=>false,
                                  'empty'=>'Category','selected'=>'Your Value')); 
?>
4 голосов
/ 20 сентября 2009

Вот код для отображения выпадающего списка.

<?php echo $form->input('inputname', array('type'=>'select', 'options'=>$cate, 'label'=>false, 'empty'=>'Category')); ?>

где $ cate загружается массивом из находки ('list') в формате

массив (0 => 'option1', 1 => 'option2' и т. Д. И т. Д. И т. П.

1 голос
/ 29 июля 2015

В контроллере:

$Itemgroup = $this->Itemgroup->find('list',
  array(
    'fields' => array('ID','Description')
  )
);

$this->set('Itemgroup',$Itemgroup); 

В представлении:

$form->input('itemgroup_id', array('type' => 'select','options'=> $Itemgroup));
1 голос
/ 14 августа 2014

Вы можете использовать это в вашем контроллере и просматривать ...

//In Controller:
    $data=$this->Model->find('list',array('conditions'=>array()));
    $this->set('data',$data);

//In View:

    echo $this->Form->select('field_name',$data,null,array("escape"=>false,"empty"=>"select"));

Если вы хотите показать изначально выбранное значение в выпадающем меню, вы можете передать значение, где используется ноль, в строке выше.

1 голос
/ 30 мая 2013

пожалуйста, используйте

    //In controller
    $data=$this->Model->find('list');
    $this->set('data',$data);

В представлении:

    $this->Form->input('list',array("options"=>$data));
0 голосов
/ 19 августа 2018

Использование CakePHP 3.6

$fruits = ['1'=>'orange','2'=>'melon','3'=>'lemon','4'=>'apple'];
echo $this->Form->control('Fruit', ['options'=>$fruits, 'label'=>"select your fruit", 'value'=>'lemon']);

Ваш выпадающий список будет иметь «лимон», выбранный по умолчанию.

Этот код создаст следующий HTML-код:

<div class="input select">
  <label for="Fruit">select your fruit</label>
  <select name="Fruit" id="Fruit">
    <option value="1">orange</option>
    <option value="2">melon</option>
    <option value="3">lemon</option>
    <option value="4">apple</option>
  </select>
</div>

Вы можете найти больше информации здесь:
https://book.cakephp.org/3.0/en/views/helpers/form.html#options-for-select-checkbox-and-radio-controls

0 голосов
/ 17 июля 2015

Это правильное решение, на мой взгляд: на выбор from column SET или ENUM тип

* 
* @param string $sColumn - col name
* @param string $sTable - if use other table as Model
* @return array 
*/
function fGetArrayFromSQLSet($sColumn, $sTable=null) {

    # Pokud neni urcena tabulka, pouzij tabulku modelu
    if( !$sTable ) {
        $sTable= $this->useTable;
    }

    # Nacti nastaveni daneho pole dane tabulky
    $tmpHlaseno=$this->query("SELECT COLUMN_TYPE
                    FROM information_schema.columns
                    WHERE TABLE_NAME = '$sTable'
                        AND COLUMN_NAME = '$sColumn'
        "); //db($tmpHlaseno);
    $tmpList= $tmpHlaseno[0]['columns']['COLUMN_TYPE']; 

    # Ziskej hodnoty z nastaveni a uloz je do pole
    $sTmp= str_replace(')', '', str_replace('set(', '', str_replace('enum(', '', $tmpList)));
    $aTmp= explode(',', str_replace("'", '', $sTmp));
    foreach( $aTmp as $value ) {
        $aSetList[$value]= $value;
    }   //db($aSetList);

    return $aSetList;   
}       // END of fGetArrayFromSQLSet 
0 голосов
/ 24 января 2012

Или Вы можете использовать это:

В модели:

/**
* Get list of choises from collumn SET or ENUM type
* 
* @param string $sColumn - col name
* @param string $sTable - if use other table as Model
* @return array 
*/
function fGetArrayFromSQLSet($sColumn, $sTable=null) {

    # Pokud neni urcena tabulka, pouzij tabulku modelu
    if( !$sTable ) {
        $sTable= $this->useTable;
    }

    # Nacti nastaveni daneho pole dane tabulky
    $tmpHlaseno=$this->query("SELECT COLUMN_TYPE
                    FROM information_schema.columns
                    WHERE TABLE_NAME = '$sTable'
                        AND COLUMN_NAME = '$sColumn'
        "); //db($tmpHlaseno);
    $tmpList= $tmpHlaseno[0]['columns']['COLUMN_TYPE']; 

    # Ziskej hodnoty z nastaveni a uloz je do pole
    $sTmp= str_replace(')', '', str_replace('set(', '', str_replace('enum(', '', $tmpList)));
    $aTmp= explode(',', str_replace("'", '', $sTmp));
    foreach( $aTmp as $value ) {
        $aSetList[$value]= $value;
    }   //db($aSetList);

    return $aSetList;   
}       // END of fGetArrayFromSQLSet 

В контроллере:

# TB ENUM fields 
$aFields= array('order', '<TB_col_SET_type>', '<TB_col_SET_type>', .... ); 
    foreach ($aFields as $sFieldName ) {
        $this->set(Inflector::pluralize(Inflector::variable($sFieldName)),  $this->PHlaseni->fGetArrayFromSQLSet($sFieldName) ); 
    }

В поле зрения достаточно:

<?=$form->input('order')?>
<?=$form->input('<TB_col_SET_type>')?>
0 голосов
/ 22 сентября 2009

Если это что-то вроде выпадающего списка «Штаты США», который будет повторяться со страницы на страницу, рассмотрите возможность использования Элемента , в который вы можете просто передавать данные, и вам не нужно будет повторить весь код пользовательского интерфейса еще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...