سؤال

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

/controller/method/param1/param2

قد تعتقد أنه يمكنك فقط إضافة sortBy و sortOrder كمعلمتين إضافيتين لطريقة التحكم.لا أريد أن أفعل ذلك بشكل خاص، وذلك لأنني أرغب في الحصول على وحدة تحكم قابلة لإعادة الاستخدام.عند استخدام معلمات سلسلة الاستعلام، يمكن لـ PHP أن تخبرك بسهولة ما إذا كان هناك معلمة تسمى sortBy.ومع ذلك، عند استخدام معلمات تعتمد على عنوان URL، فإنها ستختلف باختلاف كل وحدة تحكم.

كنت أتساءل ما هي خياراتي.بقدر ما أستطيع أن أرى أنهم شيء من هذا القبيل:

  • تمر في بلدي sortBy و sortOrder المعلمات، ما عليك سوى استيعابها وتطوير بعض المكونات الأقل قابلية لإعادة الاستخدام لها.
  • لديك وحدة تحكم إضافية، والتي سوف تقوم بتخزين sortBy و sortOrder في الجلسة (على الرغم من أنه يجب أن يعرف من أين أتيت، ويعيدك إلى الصفحة الأصلية).
  • لديك نوع من وظيفة AJAX، والتي من شأنها استدعاء وحدة التحكم أعلاه؛ثم أعد تحميل الصفحة.
  • Hack CodeIgniter لإعادة تشغيل سلاسل الاستعلام.في الواقع، إذا كان هذا هو الخيار الوحيد، فسيكون موضع تقدير أي روابط لكيفية القيام بذلك.

لا أستطيع أن أصدق تمامًا أن مثل هذه المهمة البسيطة ستشكل مثل هذه المشكلة!هل فاتني شيء؟هل لدى أي شخص أي توصيات؟


تعديل للتوضيح:أنا أحب jQuery، وأنا أستخدمه بالفعل على الموقع، لذا يعد TableSorter خيارًا جيدًا.ومع ذلك، أود إجراء الفرز على جانب الخادم نظرًا لوجود بعض الصفحات التي تحتوي على عدد كبير من النتائج، بما في ذلك ترقيم الصفحات.

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

المحلول

لقد كنت أستخدم هذه الطريقة:http://codeigniter.com/forums/viewthread/45709/#217816

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

نصائح أخرى

إذا كنت موافقًا على الفرز من جانب العميل، البرنامج المساعد Tablesorter لـ jQuery هو لطيف جدا.

لقد واجهت هذا مع جدول معقد إلى حد ما.كان الجزء الصعب هو أن الجدول يمكن أن يكبر/ينكمش اعتمادًا على متغيرات معينة!!ألم كبير :(

وإليك كيف تعاملت مع الأمر..

تم تعديل system/application/config/config.php للسماح بحرف الفاصلة في URI:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-,';

اضبط وحدة التحكم الخاصة بي باستخدام وظيفة الفرز:

function sorter() {
  //get the sort params
  $sort = explode(",",$this->uri->segment(3)); //the 3rd segment is the column/order
  //pass the params to the model
  $data = $this->model_name->get_the_data($sort[0],$sort[1]);
  $this->_show($data);
}
function _show($data) {
  //all the code for displaying your table
}

لقد بالغت في تبسيط الأمر، لكنك فهمت الفكرة.والغرض من ذلك هو الحصول على عنوان url مثل هذا:

/controller/sorter/columnname,sortorder

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

بالطبع، يمكن اختصار ذلك إلى وظيفتك الحالية فقط:

function showGrid() {
  $sort = $this->uri->segment(3);
  if ($sort) {
    //get the data sorted
  } else {
    //get the data the default way
  }
  //rest of your view logic
}

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

لقد تم استخدام هذا: http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-displaying-sorting-tabular-data/

من net.tutsplus.com

لسوء الحظ، فهو يستخدم ما لا يعجبك (/controller/method/param1/param2) لكنني أضفت هذا (وظيفة العرض) لكل وحدة تحكم عندما أحتاج إلى ترقيم الصفحات.أو يصنع منه معيناً.

مثال آخر هنا: http://www.robertmullaney.com/2010/09/19/tablerecord-sorting-made-easier-for-codeigniter/

لقد أضفت هذا مؤخرا فارز الجدول (الذي يستخدم النموذج الأولي) لمجموعة من صفحاتي.إنه سريع وسهل التنفيذ.

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