[rtl][right]
[font="Tahoma"]سلام به دوستان عزیز
من می خوام پروفایل یک کاربر رو کش کنم. البته فقط پروفایل کاربر رو. قصدم کش کردن کل صفحه نیست
در زمان لود شدن اکشن نمایش پروفایل، ابتدا یک واحد به شمارنده نمایش پروفایل در DB اضافه میشه و بعدش خود پروفایل از DB لود و نمایش میشه
نمی دونم چطوری باید این کار انجام بشه. اینم بگم که تمام رفرنس ها رو خوندم.
به مثال نیاز دارم ولی مثال مناسبی هم پیدا نکردم.
[/font]
[font="Tahoma"]اما تا الان چی کار کردم؟
در قسمت کانفیگ به شکل زیر کامپوننت کش رو تعریف کردم:
ضمن اینکه برام سوال شد Duration رو کجا باید داخل کانفیگ تعریف کنم تا دیگه داخل سورس هی این پارامتر رو ست نکنم.[/font]
[/right]
[/rtl]
components part of config/main.php :
'cache'=>array(
'class'=>'system.caching.CFileCache',
),
[rtl][right]
[font="Tahoma"]بعد داخل اکشن مورد نظرم، به شکل زیر دستور کش رو قرار دادم.
[/font][/right][font="Tahoma"][font="Arial"]
[/rtl][/font]
/**
* Displays a particular model.
*/
public function actionView($profile_id)
{
// some code to increase +1 to Hit counter of profile in DB (using query builder)
$cacheId= $profile_id;
if($this->beginCache($cacheId, array('duration'=>3600))) {
$prof=$this->loadModel($profile_id);
$this->render('view',array(
'model'=>$prof,
));
$this->endCache(); }
}
[font="Arial"][rtl][/font][/font][right][font="Tahoma"]
کد بالا کار می کنه. اما به جای کش کردن پروفایل کاربر، کل صفحه رو به طور کامل (همراه با Layout و همه منوها و غیره) کش می کنه!
من اومدم اون دستور کش رو در اول و آخر فایل view قرار دادم. اما عیبش اینه که فقط HTML های داخل ویو کش میشن
وقبلش باید دستور لود کردن مدل از بانک اطلاعاتی اجرا بشه! که خوب منظور من نیست.[/font][/right][right][font="Tahoma"]از کش به عنوان یک اکشن فیلتر استفاده کردم که خوب باز هم همین نتیجه بالا حاصل شد و کل صفحه رو فیلتر کرد. در حالی که من می خوام فقط آنچه در ActionView تولید میشه رو کش کنم.
[/font] [/right][font="Arial"]
[/rtl][/font]