PDA

View Full Version : ساخت فرم باکتیو رکورد های یک جدول



aminar63
سه شنبه 19 خرداد 1394, 11:18 صبح
من قصد دارم یه فرم بسازم با فیلد هایی از اکتیو رکورد های یک جدول (a)(نتیجه کوئری) که بعد از اعتبارسنجی در جدول دیگر(b) هر فیلد فرم بعنوان یک اکتیو رکورد ذخیره بشه . آیا چنین چیزی با توجه به متفاوت بودن نوع فیلد های فرم (textfiels , dropdownlist , ...)و همچنین بحث اعتبار سنجی امکان پذیر هست. چگونه؟ راه حل بهنری پیشنهاد می کنید؟؟

اینم عکس ضمیمه

under22
چهارشنبه 20 خرداد 1394, 16:47 عصر
کامل منظورتون متوجه نشدم ولی اگه اینی که فکر میگم منظورتون باشه
ابتدا از مدل a یه شی بساز و بده activeform و فرمش رو بزار و کابر بتونه Insert کنه
بعد یه شی از مدل b بساز و مثل دفعه قبل بده activeform و اونجا نوع attribute_id رو dropdown بزار و تو پارامتر هاش یه find کلی از جدول a بزن و مقدارش رو id و value اون رو name بزار .
اینطوری موقع insert کردن خاصیت attribute_id به صورت یک dropdown هستش که name اون ها نمایش داده میشه ولی value اون ها id اون هاس و کاربر خیلی راحت میتونه insert کنه
اگه منظورتون درست متوجه نشدم بیشتر توضیح بدید

aminar63
چهارشنبه 20 خرداد 1394, 17:23 عصر
ابتدا از توجه تون سپاسگزارم.
ببینید معماری ما به این لینک (http://barnamenevis.org/showthread.php?409002-%D8%A7%DB%8C%D9%86-%D8%AC%D8%AF%D9%88%D9%84-%D8%B1%D8%A7-%DA%86%D8%B7%D9%88%D8%B1%DB%8C-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%DA%A9%D9%86%D9%85-%D8%9F&p=1825343&viewfull=1#post1825343) شبیهه
حالا جدول a خصوصیات هستن و جدول b جایی که میبایست ذخیره بشن. در واقع خصوصیات مربوط به هر نوع کالا با توجه به نوع آن از جدول a (رکورد های جدول a) خوانده میشه و بایستی برای هر کدام از این خصوصیات فیلدی در فرم بسازیم که کاربر اطلاعات مربوط به اون خصوصیت را وارد کنه ("نباید از روی مدل a شیی بسازیم")و بعد باید در جدول b این خصوصیات و مقادیرشون ذخیره بشه. حالا مشکل اینه که این خصوصیات هرکدوم فیلد مجزا و متفاوتی میخواد. مثلا textfield یا dropdown یا ...
اگر جایی گنگ بود بفرمایید توضیح بدم

under22
چهارشنبه 20 خرداد 1394, 19:07 عصر
ابتدا از توجه تون سپاسگزارم.
ببینید معماری ما به این لینک (http://barnamenevis.org/showthread.php?409002-%D8%A7%DB%8C%D9%86-%D8%AC%D8%AF%D9%88%D9%84-%D8%B1%D8%A7-%DA%86%D8%B7%D9%88%D8%B1%DB%8C-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%DA%A9%D9%86%D9%85-%D8%9F&p=1825343&viewfull=1#post1825343) شبیهه
حالا جدول a خصوصیات هستن و جدول b جایی که میبایست ذخیره بشن. در واقع خصوصیات مربوط به هر نوع کالا با توجه به نوع آن از جدول a (رکورد های جدول a) خوانده میشه و بایستی برای هر کدام از این خصوصیات فیلدی در فرم بسازیم که کاربر اطلاعات مربوط به اون خصوصیت را وارد کنه ("نباید از روی مدل a شیی بسازیم")و بعد باید در جدول b این خصوصیات و مقادیرشون ذخیره بشه. حالا مشکل اینه که این خصوصیات هرکدوم فیلد مجزا و متفاوتی میخواد. مثلا textfield یا dropdown یا ...
اگر جایی گنگ بود بفرمایید توضیح بدم
اگه گفتم از روی a شی بسازید بخاطر اینکه میخواستم ابتدا جدول a پر بشه
تو فرم جدول b تو فیلد attribute_id فیلد رو از نوع dropdown بزار و مقادیرش رو از جدول aبگیر به این شکل


$form->field($model, 'parent_id')
->dropDownList(
ArrayHelper::map(Product::find()->all(), 'parent_id', 'name')
)

aminar63
شنبه 23 خرداد 1394, 15:45 عصر
کسی میدونه این کلاس CFormModel که داینامیک هست چطور میشه ازش استفاده کرد؟؟چطور بهش داده بدیم و برداشت کنیم؟


class DynamicFormModel extends CFormModel {

private $_dynamicData=array();
private $_dynamicFields = array(
'firstname' => 1,
'lastname' => 1
);

public function rules() {
return array(
array('firstname, lastname', 'safe')
);
}

public function attributeNames() {
return array_merge(
parent::attributeNames(),
array_keys($this->_dynamicFields)
);
}

/**
* Returns the value for a dynamic attribute, if not, falls back to parent
* method
*
* @param type $name
* @return type
*/
public function __get($name) {
if (!empty($this->_dynamicFields[$name])) {
if (!empty($this->_dynamicData[$name])) {
return $this->_dynamicData[$name];
} else {
return null;
}

} else {
return parent::__get($name);
}
}

/**
* Overrides the setter to store dynamic data.
*
* @param type $name
* @param type $val
*/
public function __set($name, $val) {
if (!empty($this->_dynamicFields[$name])) {
$this->_dynamicData[$name] = $val;
} else {
parent::__set($name, $value);
}
}

}