سؤال

لقد قمت بإعداد صفحة تعرض سجلات الخادم وأضفت نموذج تصفية حتى أتمكن من تصفية السجلات على إجراءات محددة وتواريخ وما إلى ذلك CPagination لتقسيم النتائج إلى صفحات ، ولكن. إذا أضفت CPagination عنصر واجهة مستخدم ، عند تحديد صفحة من القطعة ، لا يتم إعادة تقديم نموذج المرشح وفقدت نتائج المرشح.

أنا في حيرة لحل بسيط للحفاظ على بيانات نموذج التصفية الخاص بي مع CPagination أداة. أي اقتراح يمكن أن يكون عظيما.

تحديث
لديّ هذا الأداء ولكن اضطررت إلى تعيين حالة جلسة للحفاظ على بيانات النموذج الخاصة بي.

$filter=false;
$form=new LogFilterForm;
if(isset($_POST['LogFilterForm'])){
    $form->attributes=$_POST['LogFilterForm'];
    Yii::app()->user->setState('filter',$form);
    $filter=true;
}
else if(Yii::app()->user->hasState('filter')){
    $form=Yii::app()->user->getState('filter');
    $filter=true;
}

أي أفكار حول كيف يمكنني مسح حالة الجلسة على التنقل إلى صفحة أخرى؟

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم Cgridview سيكون من السهل إضافة مرشحات مع الترحيل - إنه مدمج. فقط انظر إلى عرض Admin.php المقدمة بواسطة أداة GII Crud (أو عرض المدونة أيضًا). ربما لا تريد عرض السجلات في نموذج الجدول.

بدلاً من تعيين متغيرات الجلسة ، يمكنك جعل النموذج نموذجًا مناسبًا وحفظ الحالة السابقة باستخدام setPagEstate (). لا أعرف ما إذا كان ترقيم الصفحات يقدم النموذج على الرغم من ... قد تضطر إلى ربط حدث jQuery لإرسال النموذج عند النقر على روابط الصفحات. سيكون ذلك قبيحًا إذا كان عليك القيام بذلك.

بالنسبة لمسح متغيرات حالة الجلسة ، فإن فكرتي الوحيدة الآن هي تجاوز OnBeginRequest () أو شيء للتحقق مما إذا كان المستخدم موجودًا في صفحة البحث ، وإذا كان لا, ، ثم امسح متغير الجلسة. يمكنك فقط ترك الأمر أيضًا - حدد تاريخ انتهاء صلاحية قصير ونسيه. أو حفظها في قاعدة البيانات الخاصة بك بدلاً من الجلسة؟ : ص

تعديل

إذا ذهبت إلى مسار تجاوز OnBeginRequest () ، يبدو الأمر سهلاً مثل إعلان رد الاتصال في ملف التكوين. مزيد من المعلومات هنا في منتديات YII, ، و هنا ايضا. لم أفعل ذلك بنفسي أبدًا. حظا طيبا وفقك الله!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top