[font="Tahoma"][rtl]یکی از کارهایی که توی برخی پروژه ها لازم میشه و کارفرما میخواد اینه که بتونه تنظیمات سایت رو (که معمولاً توی بخش params از فایل تنظیمات تعیین میکنید)، توی بخش مدیریت، ویرایش کنه. برای این کار من روش زیر رو توصیه میکنم:
توی فایل components/Controller.php که کلاس والد تمام کنترلرهای شماست، این متد رو اضافه کنید:[/rtl][/font]
protected function beforeAction($action) {
// overwrite params with the DB version
$params = Yii::app()->params->toArray();
$keys = array_keys($params);
foreach($keys as $key) {
$setting = Settings::model()->find(array('condition'=>'`key`=:key','params'=>array(':key'=>$key)));
if($setting != null) {
$params[$key] = $setting->value;
}
}
Yii::app()->params = $params;
return parent::beforeAction($action);
}
[font="Tahoma"][rtl]حالا یک جدول به اسم settings توی دیتابیس با سه فیلد id و key و value بسازین که id کلید اصلی و key و value از نوع varchar با سایز 255 هست و key رو هم UNIQUE کنید. حالا برای تمام پارامترهایی که توی params معرفی کردین، یک رکورد توی این جدول ایجاد کنید که key میشه اندیس مربوطه در آرایه params (مثلاً adminEmail) و value هم مقدار پیشفرض اون هست (مثلاً webmaster@example.com). حالا تنها کاری که لازمه اینه که مدل مربوطه رو با Gii بسازین و اسمش رو هم Settings بگذارین.
اگه به کد فوق دقت کنید، میبینید که میاد مقادیر این جدول رو میخونه و توی آرایه params میچینه و Yii::app()->params رو هم با مقادیری که از دیتابیس خونده مقداردهی میکنه. از اونجا که این کار توی رویداد beforeAction انجام میشه، قبل از اینکه هر عملیاتی اتفاق بیفته، تنظیمات موجود در دیتابیس جایگزین تنظیمات موجود در فایل config/main.php میشه.[/rtl][/font]