PDA

View Full Version : اضافه کردن یک مقدار پیش فرض به dropdownlist (حل شد)



mostafa_shoakry
چهارشنبه 09 بهمن 1392, 13:25 عصر
با سلام
من می خوام که یک مقدار پیش فرض علاوه بر اون مقادیری که از طریق دیتا بیس به dropdownlist اضافه می کنم به صورتی که به شکل زیر باشه :



<select>
<option value="0">دسته اصلی</option>
و بقیه که از دیتا بیس می خونم
</select>


حالا کد هایی که نوشتو به این صورت است:
فرم ویو :


echo CHtml::dropDownList('id', '', $model -> MainCategoryRange, array('prompt' => 'دسته اصلی' , 'class' => 'chosen', 'ajax' => array('type' => 'POST', //request type
'url' => CController::createUrl('category/SubCategory'), //url to call.
//Style: CController::createUrl('currentController/methodToCall')
'update' => '#id_sub', //selector to update
//'data'=>'js:javascript statement'
//leave out the data key to pass all form values through
)));

تابع $model -> MainCategoryRange:


public function getMainCategoryRange()
{
$criteria = new CDbCriteria;
$criteria -> condition = 'id_sub IS NULL';
$cat_main = $this-> findAll($criteria);
return CHtml::listData($cat_main, 'id', 'title');
}


تا اینجا کار درسته فقط اون prompt یه چیزی تو این مایه ها می سازه :


<select>
<option value="">دسته اصلی</option>
و بقیه که از دیتا بیس می خونم
</select>


ولی من می خوام که مقدار value برای "دسته اصلی" 0 باشه.
کسی راه حلی داره؟

MMSHFE
چهارشنبه 09 بهمن 1392, 13:50 عصر
نیاز به اینهمه دردسر نیست:

echo CHtml::dropDownList('id', '', array_merge(array('0' => 'دسته اصلی'), $model->MainCategoryRange));

MMSHFE
چهارشنبه 09 بهمن 1392, 14:17 عصر
علت اینکه برای prompt نمیتونید value مشخص کنید، اینه که واقعاً این فقط یک اعلان (prompt) هست نه مقداری که بشه ارسالش کرد. پس نباید value داشته باشه تا توی Validation اگه این گزینه انتخاب شده باشه، پیغام خطا صادر بشه.

mostafa_shoakry
چهارشنبه 09 بهمن 1392, 14:17 عصر
نیاز به اینهمه دردسر نیست:

echo CHtml::dropDownList('id', '', array_merge(array('0' => 'دسته اصلی'), $model->MainCategoryRange));
فقط من اینو تو range چک می کنما مشکلی پیش نمیاد؟

MMSHFE
چهارشنبه 09 بهمن 1392, 14:40 عصر
منظورتون رو میشه دقیقتر بگین؟

Tarragon
چهارشنبه 09 بهمن 1392, 14:54 عصر
فکر می کنم منظور ایشون برای validate کردن هستش.
شما اون جا هم باید array('0') رو با بقیه array_merge کنید.

mostafa_shoakry
چهارشنبه 09 بهمن 1392, 20:53 عصر
منظورتون رو میشه دقیقتر بگین؟
منظورم همون validation هست کدم تو قسمت model


public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('title', 'required'),
array('id_sub', 'numerical', 'integerOnly'=>true),
array('title', 'length', 'max'=>255),
array('id' ,'in' ,'range' => self::getMainCategoryRange()),
array('title','unique'),
// The following rule is used by search().
// @todo Please remove those attributes that should not be searched.
array('id, title, id_sub', 'safe', 'on'=>'search'),
);
}

public function getMainCategoryRange()
{
$criteria = new CDbCriteria;
$criteria -> condition = 'id_sub IS NULL';
$cat_main = $this-> findAll($criteria);
return CHtml::listData($cat_main, 'id', 'title');
}

تو این هم باید merg بزنم؟

mostafa_shoakry
چهارشنبه 09 بهمن 1392, 21:03 عصر
فکر می کنم منظور ایشون برای validate کردن هستش.
شما اون جا هم باید array('0') رو با بقیه array_merge کنید.
دوستان ممنون از کمکتون
حل شد .
تو model خودم و برای متدی که لیست رو فراخوانی می کنه و به listdata میفرسته array_merg رو اضافه کردم:



public function getMainCategoryRange()
{
$criteria = new CDbCriteria;
$criteria -> condition = 'id_sub IS NULL';
$cat_main = $this-> findAll($criteria);

return array_merge(array('0' => 'دسته اصلی'),CHtml::listData($cat_main, 'id', 'title'));
}