Yii2 में ड्रॉप डाउन सूची कैसे बनाएं?


85

कैसे एक बनाने के लिए dropdownमें yii2एक का उपयोग कर activeformऔर एक मॉडल? चूंकि सभी तरीके बदल गए हैं yii2, इसलिए नए में कैसे किया जाता है?


क्या यह प्रश्न संपादित किया गया है। यदि हाँ तो प्रारंभिक प्रश्न क्या था।
क्षितिज

@Dency GBI मेरे इसी तरह के एक और सवाल के जवाब की तलाश में है .. क्या आपके लिए इस पर नज़र डालना संभव है ?? यहां लिंक
मोहन प्रसाद

जवाबों:


122

जैसे की

<?php
use yii\helpers\ArrayHelper;
use backend\models\Standard;
?>

<?= Html::activeDropDownList($model, 's_id',
      ArrayHelper::map(Standard::find()->all(), 's_id', 'name')) ?>

Yii2 में ArrayHelper Yii 1.1 में CHtml सूची डेटा को बदल देता है। [कृपया अपने कंट्रोलर से सरणी डेटा लोड करें]

संपादित करें

अपने नियंत्रक से डेटा लोड करें।

नियंत्रक

$items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name');
...
return $this->render('your_view',['model'=>$model, 'items'=>$items]);

दृश्य में

<?= Html::activeDropDownList($model, 's_id',$items) ?>

1
अनुस्मारक कि Yii2 नेमस्पेस का उपयोग करता है, इसलिए समाधान में 'नेमस्पेस का उपयोग करें'। मुझे सोचने के लिए कुछ समय दिया कि वे क्या कर रहे हैं।
जॉन्सनल्स

11
कृपया सीधे इस उदाहरण का अनुसरण न करें और अपने विचारों में डेटा लाने / तर्क करने का डेटा रखें!
एंड्रयूपीके

@AndrewPK: क्या आप इस बात का उदाहरण प्रदान कर सकते हैं कि आप इसे कैसे करना पसंद करेंगे? संभवत: नियंत्रक से होकर गुजरा?
एल्मनिकॉल

@AndrewPK क्यों? यह विगेट्स की तरह है, आप अपने विचार में डेटा प्राप्त कर सकते हैं और यह विरोधी पैटर्न नहीं है। लेकिन आप ऐसे प्रश्नों का निर्माण नहीं कर सकते हैं जो db और इतने पर कुछ बनाते हैं
Auni

2
@ अयुदी आपने अपना पैटर्न बनाया है? mvc, mvvm, इत्यादि, सभी चिंताओं के पृथक्करण का वर्णन करते हैं। एक दृश्य को केवल उस डेटा को प्रदर्शित करने से संबंधित होना चाहिए जो इसे दिया गया था - यह प्रश्न, GETs, आदि का प्रदर्शन नहीं करना चाहिए। यदि आप उन पैटर्नों में से एक का पालन नहीं करना चाहते हैं, तो यह बहुत अच्छा है - लेकिन यह चीजों को और अधिक कठिन बना देता है जब आपको भविष्य में विभिन्न प्लेटफार्मों का समर्थन करने के लिए विचारों को स्वैप करने की आवश्यकता है। ऊपर दिए गए लेखक का संपादित उत्तर MVC में एक अधिक आदर्श समाधान है - नियंत्रक में पाया () और दृश्य रेंडर करने के लिए डेटा पास करना।
एंड्रयूपीके

93

ऐसा लगता है कि आपने अपना उत्तर पहले ही पा लिया है, लेकिन जब से आपने सक्रिय रूप का उल्लेख किया है, मैं एक और के साथ योगदान करूंगा, भले ही यह केवल इतना ही भिन्न हो।

<?php
    $form = ActiveForm::begin();

    echo $form->field($model, 'attribute')
        ->dropDownList(
            $items,           // Flat array ('id'=>'label')
            ['prompt'=>'']    // options
        );

    ActiveForm::end();
?>

@DGBGB सबसे सरल है और मुझे लगता है कि एकमात्र विकल्प पहला चयन क्षेत्र का नाम देना और पहले के चयन के .on('change')आधार पर दूसरे क्षेत्र को आबाद करने के लिए jquery में घटना में हेरफेर करना होगा।
अरमान पी।

मैं सूची से सामान्य संख्या निकालना चाहता हूं जो स्वचालित रूप से दिखाई देती है।
मोहम्मद अजायरी

56

ऊपर कुछ अच्छे समाधान हैं, और मेरा सिर्फ दो का संयोजन है (मैं यहां एक समाधान की तलाश में आया था)।

@Sarvar Nishonboyev का समाधान अच्छा है क्योंकि यह त्रुटि संदेश के लिए प्रपत्र इनपुट लेबल और हेल्प-ब्लॉक के निर्माण को बनाए रखता है।

मैं के साथ गया:

<?php
use yii\helpers\ArrayHelper;
use app\models\Product;
?>
<?=
$form->field($model, 'parent_id')
     ->dropDownList(
            ArrayHelper::map(Product::find()->asArray()->all(), 'parent_id', 'name')
            )
?>

फिर से, पूरा श्रेय: @Sarvar Nishonboyev's और @ippi को


21

ऐसा लगता है कि इस प्रश्न के कई अच्छे उत्तर हैं। क्या मैं एक विस्तृत उत्तर देने की कोशिश करूंगा

सक्रिय रूप और हार्डकोड डेटा

<?php
    echo $form->field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']);
?>

या

<?php
    $a= ['1' => 'Yes', '0' => 'No'];
    echo $form->field($model, 'name')->dropDownList($a,['prompt'=>'Select Option']);
?>

db तालिका से सक्रिय रूप और डेटा

हम ArrayHelper का उपयोग करने जा रहे हैं, इसलिए पहले इसे नाम स्थान से जोड़ें

<?php
    use yii\helpers\ArrayHelper;
?>

ArrayHelper के कई उपयोग पूर्ण कार्य हैं जिनका उपयोग सरणियों के नक्शे को संसाधित करने के लिए किया जा सकता है () वह है जो हम यहां उपयोग करने जा रहे हैं यह फ़ंक्शन एक बहुआयामी सरणी या वस्तुओं की एक सरणी से एक मानचित्र (कुंजी-मूल्य जोड़े) बनाने में मदद करता है।

<?php
    echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>

सक्रिय रूप का हिस्सा नहीं है

<?php
    echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ;
?>

या

<?php
    $a= ['1' => 'Yes', '0' => 'No'];
    echo Html::activeDropDownList($model, 'filed_name',$a) ;
?>

एक सक्रिय रूप नहीं है लेकिन एक db तालिका से डेटा

<?php
    echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>

15

एक नज़र इस पर है:

use yii\helpers\ArrayHelper; // load classes
use app\models\Course;
    .....
$dataList=ArrayHelper::map(Course::find()->asArray()->all(), 'id', 'name');
<?=$form->field($model, 'center_id')->dropDownList($dataList, 
         ['prompt'=>'-Choose a Course-']) ?>

10

शायद मैं गलत हूं लेकिन मुझे लगता है कि दृश्य से SQL क्वेरी एक बुरा विचार है

यह मेरा तरीका है

नियंत्रक में

$model = new SomeModel();
$items=ArrayHelper::map(TableName::find()->all(),'id','name');


return $this->render('view',['model'=>$model, 'items'=>$items])

और देखें में

<?= Html::activeDropDownList($model, 'item_id',$items) ?>

या ActiveForm का उपयोग कर

<?php $form = ActiveForm::begin(); ?>
 <?= $form->field($model, 'item_id')->dropDownList($items) ?>
<?php ActiveForm::end(); ?>

दृश्य तक पहुँचने पर इसका अपरिभाषित परिवर्तनशील आइटम कहते हैं। मैंने इस तरह से कोड को कंट्रोलर $this->view->params['items'] = $items;और मेरे विचार पृष्ठ<?php echo $form->field($model, 'plan_type', ['options' => ['class' => ' input select']])->dropdownList( $this->params['items'],['prompt'=>'Select Plan','class' => 'selectpicker', 'data-live-search' => 'true','label'=>false]);?>
आरएन कुशवाहा

मेरे पास एक ही मुद्दा है, मेरे विचार में चर $ आइटम खाली है
MeV

8
<?= $form->field($model, 'attribute_name')->dropDownList(
         ArrayHelper::map(Table_name::find()->all(),'id','field_name'),
        ['prompt' => 'Select']
) ?>

यह आपकी सहायता करेगा ... हेडर में वर्ग फ़ाइल का उपयोग करना न भूलें।


1
दृश्य फ़ाइल के शीर्ष पर, किसी use yii\helpers\ArrayHelper; को सहायक का उपयोग करने में सक्षम होने के लिए लिखने की आवश्यकता होती है ।
गोगोल

5

में ActiveFormसिर्फ उपयोग करें:

<?=
    $form->field($model, 'state_id')
         ->dropDownList(['prompt' => '---- Select State ----'])
         ->label('State')
?>

5

यह डेटा जनरेट करने के बारे में है, और इसलिए इसे मॉडल से ठीक से किया जाता है। कल्पना करें कि यदि आप कभी ड्रॉप-डाउन बॉक्स में डेटा प्रदर्शित करने के तरीके को बदलना चाहते हैं, तो कहें कि एक उपनाम जोड़ें या कुछ और। आपको हर ड्रॉप-डाउन बॉक्स ढूंढना होगा और उसे बदलना होगा arrayHelper। मैं ड्रॉपडाउन के लिए डेटा वापस करने के लिए अपने मॉडल में एक फ़ंक्शन का उपयोग करता हूं, इसलिए मुझे विचारों में कोड दोहराने की आवश्यकता नहीं है। इसका यह भी लाभ है कि मैं यहां फ़िल्टर निर्दिष्ट कर सकता हूं और उन्हें इस मॉडल से निर्मित हर ड्रॉपडाउन पर लागू कर सकता हूं;

/* Model Standard.php */

public function getDropdown(){
      return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}

आप इसे इस तरह से अपने व्यू फाइल में इस्तेमाल कर सकते हैं;

echo $form->field($model, 'attribute')
        ->dropDownList(
            $model->dropDown
        );

1

अगर आपने इसे सूची में सबसे नीचे बनाया है। कुछ php कोड सहेजें और बस DB से सब कुछ वापस लाएँ, जैसा आपको चाहिए:

 $items = Standard::find()->select(['name'])->indexBy('s_id')->column();

0

Html :: activeDropDownList ($ मॉडल, 'id', ArrayHelper :: मानचित्र (AttendanceLabel :: find -) (> - all (), 'id', 'label_name'), ['प्रॉम्प्ट' => 'Attendance Status']] ;


-3

निम्नलिखित भी किया जा सकता है। अगर आप प्रीपेन्ड आइकन को जोड़ना चाहते हैं। यह मददगार होगा।

<?php $form = ActiveForm::begin();    
   echo $form->field($model, 'field')->begin();
     echo Html::activeLabel($model, 'field', ["class"=>"control-label col-md-4"]); ?>
       <div class="col-md-5">
          <?php echo Html::activeDropDownList($model, 'field', $array_list, ['class'=>'form-control']); ?>
          <p><i><small>Please select field</small></i>.</p>
          <?php echo Html::error($model, 'field', ['class'=>'help-block']); ?>
       </div>
   <?php echo $form->field($model, 'field')->end(); 
ActiveForm::end();?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.