कैसे एक बनाने के लिए dropdown
में yii2
एक का उपयोग कर activeform
और एक मॉडल? चूंकि सभी तरीके बदल गए हैं yii2
, इसलिए नए में कैसे किया जाता है?
कैसे एक बनाने के लिए dropdown
में yii2
एक का उपयोग कर activeform
और एक मॉडल? चूंकि सभी तरीके बदल गए हैं yii2
, इसलिए नए में कैसे किया जाता है?
जवाबों:
जैसे की
<?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) ?>
ऐसा लगता है कि आपने अपना उत्तर पहले ही पा लिया है, लेकिन जब से आपने सक्रिय रूप का उल्लेख किया है, मैं एक और के साथ योगदान करूंगा, भले ही यह केवल इतना ही भिन्न हो।
<?php
$form = ActiveForm::begin();
echo $form->field($model, 'attribute')
->dropDownList(
$items, // Flat array ('id'=>'label')
['prompt'=>''] // options
);
ActiveForm::end();
?>
.on('change')
आधार पर दूसरे क्षेत्र को आबाद करने के लिए jquery में घटना में हेरफेर करना होगा।
ऊपर कुछ अच्छे समाधान हैं, और मेरा सिर्फ दो का संयोजन है (मैं यहां एक समाधान की तलाश में आया था)।
@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 को
ऐसा लगता है कि इस प्रश्न के कई अच्छे उत्तर हैं। क्या मैं एक विस्तृत उत्तर देने की कोशिश करूंगा
सक्रिय रूप और हार्डकोड डेटा
<?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']);
?>
एक नज़र इस पर है:
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-']) ?>
शायद मैं गलत हूं लेकिन मुझे लगता है कि दृश्य से 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]);?>
<?= $form->field($model, 'attribute_name')->dropDownList(
ArrayHelper::map(Table_name::find()->all(),'id','field_name'),
['prompt' => 'Select']
) ?>
यह आपकी सहायता करेगा ... हेडर में वर्ग फ़ाइल का उपयोग करना न भूलें।
use yii\helpers\ArrayHelper;
को सहायक का उपयोग करने में सक्षम होने के लिए लिखने की आवश्यकता होती है ।
यह डेटा जनरेट करने के बारे में है, और इसलिए इसे मॉडल से ठीक से किया जाता है। कल्पना करें कि यदि आप कभी ड्रॉप-डाउन बॉक्स में डेटा प्रदर्शित करने के तरीके को बदलना चाहते हैं, तो कहें कि एक उपनाम जोड़ें या कुछ और। आपको हर ड्रॉप-डाउन बॉक्स ढूंढना होगा और उसे बदलना होगा arrayHelper
। मैं ड्रॉपडाउन के लिए डेटा वापस करने के लिए अपने मॉडल में एक फ़ंक्शन का उपयोग करता हूं, इसलिए मुझे विचारों में कोड दोहराने की आवश्यकता नहीं है। इसका यह भी लाभ है कि मैं यहां फ़िल्टर निर्दिष्ट कर सकता हूं और उन्हें इस मॉडल से निर्मित हर ड्रॉपडाउन पर लागू कर सकता हूं;
/* Model Standard.php */
public function getDropdown(){
return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}
आप इसे इस तरह से अपने व्यू फाइल में इस्तेमाल कर सकते हैं;
echo $form->field($model, 'attribute')
->dropDownList(
$model->dropDown
);
अगर आपने इसे सूची में सबसे नीचे बनाया है। कुछ php कोड सहेजें और बस DB से सब कुछ वापस लाएँ, जैसा आपको चाहिए:
$items = Standard::find()->select(['name'])->indexBy('s_id')->column();
Html :: activeDropDownList ($ मॉडल, 'id', ArrayHelper :: मानचित्र (AttendanceLabel :: find -) (> - all (), 'id', 'label_name'), ['प्रॉम्प्ट' => 'Attendance Status']] ;
निम्नलिखित भी किया जा सकता है। अगर आप प्रीपेन्ड आइकन को जोड़ना चाहते हैं। यह मददगार होगा।
<?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();?>