Yii2 এ কীভাবে একটি ড্রপ ডাউন তালিকা তৈরি করবেন?


85

কিভাবে একটি করতে dropdownমধ্যে yii2একটি ব্যবহার activeformএবং একটি মডেল? যেহেতু সমস্ত পদ্ধতি পরিবর্তিত হয়েছে yii2, এটি নতুন পদ্ধতিতে কীভাবে করা হয়?


এই প্রশ্নটি কি সম্পাদিত? যদি হ্যাঁ তবে প্রাথমিক প্রশ্নটি কী ছিল।
ক্ষিতাইজ

@ ডেন্সি জিবিআই এর অনুরূপ আমার অন্য একটি প্রশ্নের উত্তর খুঁজছে .. আপনার পক্ষে কি এটি দেখার পক্ষে সম্ভব ?? এখানে লিঙ্ক করুন
মোহন প্রসাদ

উত্তর:


123

এটার মত

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

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

Yii2 এ অ্যারেহেল্পার 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) ?>

4
অনুস্মারক যে Yii2 নেমস্পেস ব্যবহার করে তাই সমাধানে 'নেমস্পেস ব্যবহার করুন'। তারা কী জন্য তা ভেবে আমাকে কিছুক্ষণ সময় নিয়েছে।
জনস্নেলগুলি

11
দয়া করে সরাসরি এই উদাহরণটি অনুসরণ করবেন না এবং আপনার দর্শনগুলিতে ডেটা আনার / বিল্ডিং লজিক রাখুন!
অ্যান্ড্রুপিকে

@ অ্যান্ড্রুপিকে: আপনি কীভাবে এই কাজটি পছন্দ করতে চান তার একটি উদাহরণ দিতে পারেন? নিয়ামক থেকে সম্ভবত পেরিয়েছেন?
almcnicoll

@ অ্যান্ড্রুপিকে কেন? এটি উইজেটের মতো, আপনি নিজের দর্শনগুলিতে ডেটা আনতে পারেন এবং এটি অ্যান্টি-প্যাটার্ন নয়। তবে আপনি এমন কোয়েরি তৈরি করতে পারবেন না যা ডিবিতে কিছু তৈরি করে এবং
এগুলি

4
@ সত্যই কি আপনি নিজের প্যাটার্ন তৈরি করেছেন? এমভিসি, এমভিভিএম ইত্যাদি সমস্ত উদ্বেগের পৃথকীকরণের বর্ণনা দেয়। একটি দৃশ্য কেবলমাত্র এটি প্রদত্ত ডেটা প্রদর্শনের সাথে সম্পর্কিত হওয়া উচিত - এটি কোয়েরি, জিইটি ইত্যাদির কাজ করা উচিত নয় you আপনি যদি এই ধরণের কোনও একটি অনুসরণ করতে চান না তবে এটি খুব দুর্দান্ত but তবে বিষয়গুলি যখন আরও জটিল করে তোলে তখন ভবিষ্যতে বিভিন্ন প্ল্যাটফর্মগুলিকে সমর্থন করতে আপনার মতামতগুলি সরিয়ে নিতে হবে। উপরোক্ত লেখক প্রদত্ত সম্পাদিত উত্তরটি এমভিসি-তে আরও আদর্শ সমাধান - নিয়ামকটিতে সন্ধান () পাওয়া এবং ভিউ রেন্ডারে ডেটা প্রেরণ করা।
অ্যান্ড্রু পি কে

94

দেখে মনে হচ্ছে আপনি ইতিমধ্যে আপনার উত্তরটি খুঁজে পেয়েছেন তবে যেহেতু আপনি সক্রিয় ফর্মটি উল্লেখ করেছেন আমি আরও একটির সাথে অবদান রাখব, এমনকি যদি এটি কেবলমাত্র সামান্য কিছুটা পৃথক হয়।

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

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

    ActiveForm::end();
?>

@ ডেন্সিবিজি সবচেয়ে সহজ এবং আমি মনে করি একমাত্র সমাধান হ'ল প্রথম নির্বাচনের ক্ষেত্রের নাম দেওয়া এবং প্রথম নির্বাচনের .on('change')উপর ভিত্তি করে দ্বিতীয় ক্ষেত্রটি স্থাপনের জন্য জিকিউরিতে ইভেন্টটি হেরফের করা ।
আরমান পি।

আমি তালিকা থেকে সাধারণ নম্বরটি সরিয়ে দিতে চাই যা স্বয়ংক্রিয়ভাবে দেখায়।
মোহাম্মদ অঘায়ারি

56

উপরে কয়েকটি ভাল সমাধান রয়েছে, এবং আমার দুটি মাত্রের সংমিশ্রণ (আমি এখানে সমাধানের সন্ধান করতে এসেছি)।

@ সরবর নিশনবয়েভের সমাধানটি ভাল কারণ এটি ত্রুটির বার্তাগুলির জন্য ফর্ম ইনপুট লেবেল এবং সহায়তা-ব্লক তৈরি রক্ষণ করে।

আমি সঙ্গে গিয়েছিলাম:

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

আবার, সম্পূর্ণ কৃতিত্ব: @ সরবর নিশোনবয়েভ এবং @ পিপি


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']);
?>

সক্রিয় ফর্ম এবং একটি ডিবি টেবিল থেকে ডেটা

আমরা অ্যারেহেল্পারটি ব্যবহার করতে যাচ্ছি তাই প্রথমে এটির মাধ্যমে নামের জায়গাতে যুক্ত করুন

<?php
    use yii\helpers\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) ;
?>

কোনও সক্রিয় ফর্ম নয় তবে একটি ডিবি টেবিলের ডেটা

<?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

হতে পারে আমি ভুল কিন্তু আমি মনে করি ভিউ থেকে এসকিউএল কোয়েরিটি একটি খারাপ ধারণা

এটা আমার পথ

নিয়ামক মধ্যে

$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) ?>

অথবা অ্যাক্টিভর্ম ব্যবহার করে

<?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]);?>
আরএন কুশওয়াহা

আমার একই সমস্যা আছে, পরিবর্তনশীল $ আইটেমগুলি আমার দৃষ্টিতে খালি
মেভি

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

এটি আপনাকে সাহায্য করবে ... ক্লাস ফাইলটি হেডারে ব্যবহার করতে ভুলবেন না।


4
ভিউ ফাইলের শীর্ষে, 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

আপনি যদি এটি তালিকার নীচে তৈরি করে থাকেন। কিছু পিএইচপি কোড সংরক্ষণ করুন এবং আপনার যেমন প্রয়োজন তেমন সমস্ত কিছুই ডিবি থেকে ফিরিয়ে আনুন:

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

0

এইচটিএমএল :: অ্যাক্টিভড্রপডাউনলিস্ট ($ মডেল, 'আইডি', অ্যারেহেল্পার :: মানচিত্র (উপস্থিতি লেবেল :: সন্ধান করুন) (> সমস্ত (), 'আইডি', 'লেবেল নাম'), ['প্রম্পট' => 'উপস্থিতির স্থিতি'])) ;


-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();?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.