سؤال

لدي واجهة /مدفوعات حيث يجب أن يكون المستخدم قادرًا على التصفية عبر النطاق السعري والبنك وغيرها من الأشياء. هذه المرشحات هي صناديق تحديد قياسية. عندما أقوم بإرسال نموذج التصفية ، تنتقل جميع بيانات المنشور إلى طريقة أخرى تسمى المدفوعات/البحث. تنفذ هذه الطريقة التحقق من الصحة ، ويحفظ قيم POST في جلسة FlashData ويعيد توجيه المستخدم مرة أخرى إلى /المدفوعات التي تمرير اسم FlashData عبر عنوان URL.

لذا فإن روابط ترقيم الصفحات القياسية الخاصة بي مع عدم وجود مرشحات هي تمامًا مثل هذا:

payments/index/20/
payments/index/40/
payments/index/60/

وإذا قمت بإرسال نموذج التصفية ، فإن عنوان URL العائد هو:

payments/index/0/b48c7cbd5489129a337b0a24f830fd93

هذا يعمل بشكل رائع. إذا قمت بتغيير الصفر لشيء آخر ، فهذا على ما يرام. ومع ذلك ، فإن المشكلة الوحيدة هي أن روابط الصفحة << 1 2 3 >> لن تحتفظ بالتجزئة بعد إزاحة ترقيم الصفحات. تقوم Codeigniter بإنشاء روابط الصفحة تتجاهل شريحة URI إضافية.

تم تعيين تكوين uri_segress الخاص بي بالفعل على 3:

$config['uri_segment'] = 3;

لا يمكنني ضبط uri_segress على 4 لأن هذا التجزئة قد يكون أو لا يوجد. أي أفكار حول كيف يمكنني حل هذا؟ هل من الضروري أن يكون CI الإزاحة كجزء آخر في URI؟ ربما أحاول اتباع نهج غير صحيح ، لذلك أنا كل آذان.

شكرا لك يا رفاق.

تحرير: لماذا أقوم بتمرير اسم FlashData عبر URI قد تسأل؟ نظرًا لأنه يسمح للمستخدم بفتح عدة علامات تبويب المتصفح والقيام بعمليات بحث مختلفة في كل علامة تبويب. لكل تصفية تقوم بها ، يتم إنشاء FlashData var جديد.

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

المحلول

فقط للمستخدمين القادمين من Google ، إليك الحل:

في صفيف تكوين ترقيم الصفحات ، قمت بتغيير قاعدتي _url لهذا:

$config['base_url'] = site_url('payments/index/' . $this->uri->segment(3) . '/' . $this->uri->segment(4));

حيث الجزء (3) هو رقم الإزاحة الخاص بي والجزء (4) هو التجزئة. لذلك ، في هذه الحالة ، قد يكون التجزئة أو لا يوجد وسيلة ترقيم الصفحات.

قد يكون هناك نهج آخر هو: إذا ذهبت إلى المدفوعات ، ولم يكن هناك معرف FlashData في عنوان URL ، فإنه يعيد توجيه المستخدم إلى المدفوعات/البحث وإنشاء صفيف فارغ مع مرشحات فارغة. ثم يعيد توجيه مرة أخرى إلى المدفوعات/_new_flashdata_id_here_. وبهذه الطريقة ، سيكون لدى عنوان URL دائمًا معرف FlashData في عنوان URL ويمكنك الحصول على إزاحة ترقيم الصفحات في شريحة URI الأخيرة كالمعتاد.

نصائح أخرى

لماذا لا تضع علامة التجزئة كعنصر جلسة؟

$this->session->set_userdata('session_flashdata_hash', $hash);

سيكون التجزئة متاحًا حتى تقوم بإلغاء ضبطه

$this->session->unset_userdata('session_flashdata_hash');

أو حتى تدمر الجلسة.

$this->session->sess_destroy();

لماذا لا تتحقق لمعرفة ما إذا كان التجزئة وضبط uri_segment بناء على ذلك؟

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