it-swarm.asia

هل يمكن استخدام TableSort بدون استعلام؟

في الوحدة النمطية الخاصة بي ، أستخدم TableSort لبعض الجداول الخاصة بي ، ولكن لدي أيضًا بعض الجداول التي تم إنشاؤها بواسطة التعليمات البرمجية ، لذلك لا ترتبط مباشرةً باستعلام. يتم أيضًا إنشاء هذه الجداول باستخدام السمة ("الجدول") وكذلك تحتوي على صفائف رأس $ و $ صفوف. هل من الممكن استخدام TableSort على تلك أيضًا ، ربما مع كتابة وظيفة الفرز الخاصة بي؟

يبدو أن التوثيق for tablesort.inc تشير إلى أنه من الممكن ( جميع الجداول التي تم إنشاؤها باستخدام استدعاء السمة ("الجدول") لديها خيار وجود رؤوس الأعمدة التي يمكن للمستخدم النقر فوق لفرز الجدول حسب هذا العمود ). ومع ذلك ، لم أجد أي تعليمات أو مثال حول كيفية القيام بذلك. كل شيء وجدته حتى الآن يعتمد على استفسار. أنا أستخدم Drupal 7.

15
Whiskey

يتكون Tablesort في الواقع من نظامين مختلفين يعملان معًا.

الجزء الأول هو العرض ، الأشياء التي تحدث مباشرة داخل theme_table () أو يتم استدعاؤها من ذلك. كل ما يفعله هو عرض رؤوس الجدول مع مؤشر الفرز إذا كان هناك فرز افتراضي أو تجاوز من خلال $ _GET موجودًا ويجعلها روابط حتى تتمكن من النقر عليها.

الجزء الثاني هو TableSort موسع الاستعلام ، الذي يضبط الاستعلام الذي تتم إضافته بناءً على اتجاه الفرز الافتراضي أو تجاوز $ _GET.

هذان النظامان منفصلان جدًا في الواقع ، يعملان معًا بسهولة لأنهما يحصلان على بياناتهما من نفس بنية الرأس $ ويستخدمان نفس وظائف المساعد واصطلاحات التسمية لمعلمات $ _GET. ولكن لا شيء يمنعك من استخدام واحد فقط من هؤلاء.

للإجابة على سؤالك بالفعل ، إذا كنت بحاجة فقط إلى جزء العرض ، فأنت بحاجة فقط إلى التأكد من القيام بشيء مماثل لـ TableSort :: orderbyHeader () . بدلاً من استدعاء orderBy () ، ستستخدم وظيفة فرز صفيف ، أو تمريرها كوسيطة لخدمة ويب أو أي شيء آخر.

وعلى النقيض من ذلك ، ستحتاج فقط إلى التأكد من عرض ارتباط يعادل بشكل أساسي tablesort_header () بحيث يتم التعرف عليه من خلال موسع استعلام TableSort.

10
Berdir

بفضل Berdir حصلت عليها تعمل. هذه هي الطريقة التي تعمل بها بمزيد من التفصيل.

يتم تشغيل Tablesort "تلقائيًا" إذا كانت صفائف (العمود) الموجودة في صفيف رؤوس $ تحتوي على "البيانات" و "الحقل" و "الفرز" بشكل اختياري. سيؤدي هذا إلى إنشاء روابط مع "الفرز" و "الترتيب" في رؤوس الأعمدة وإظهار السهم الصغير وما إلى ذلك.

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

جزء من رمز مثال (لم يتم اختباره) مع صفيف $ users يحتوي على بعض التفاصيل لكل مستخدم:

// setup the table data that we want to show
$tableData = array();
foreach ($users as $userDetails) {
  $tableData[] = array(
      'name' => $userDetails['name'],
      'visits' => $userDetails['visits'],
      'views' => $userDetails['views'],
      'comments' => $userDetails['comments']
  );
}

// headers array, sorting by default on comments
$headers = array(
    array('data' => t('Name'), 'field' => 'name'),
    array('data' => t('Visits'), 'field' => 'visits'),
    array('data' => t('Views'), 'field' => 'views'),
    array('data' => t('Comments'), 'field' => 'comments', 'sort' => 'desc')
);

// getting the current sort and order parameters from the url
$order = tablesort_get_order($headers);
$sort = tablesort_get_sort($headers);

// sort the table data accordingly (write your own sort function)
$tableData = my_array_sort($tableData, $order['sql'], $sort);

// create the array with rows for theme table
$rows = array();
foreach ($tableData as $entry) {
  $rows[] = array(
      array('data' => $entry['name']),
      array('data' => $entry['visits']),
      array('data' => $entry['views']),
      array('data' => $entry['comments']),
  );
}

// add any attributes and sent everything to theme table
$attributes = array('class' => array('my_class'));
$table = array('header' => $headers, 'attributes' => $attributes, 'rows' => $rows);
$html = theme('table', $table);
15
Whiskey

هذا هو الرمز الذي انتهى به الأمر إلى إجابة الويسكي. يستخدم استعلام حقل الكيان.

 $query = new EntityFieldQuery();
  $query
  ->entityCondition('entity_type', 'vehicle')
  ->entityCondition('bundle', 'car');
  $result=$query->execute();
  $ids=array_keys($result['vehicle']);
  $values=entity_load('vehicle',$ids);
  $rows=array();
  foreach($values as $val){
    $rows[]=array('data'=>array(
      'id'=>$val->id,
      'title'=>$val->title,
      'price'=>$val->field_price['und'][0]['value'],
      'model'=>$val->field_model['und'][0]['value'],
      'color'=>$val->field_color['und'][0]['value'],
      'speed'=>$val->field_speed['und'][0]['value'],

    ));
  }


  // We are going to output the results in a table with a Nice header.
  $header = array(
    // The header gives the table the information it needs in order to make
    // the query calls for ordering. TableSort uses the field information
    // to know what database column to sort by.
    array('data' => t('Entity Id'),'field' => 'id'),
    array('data' => t('Title'),'field' => 'title'),
    array('data' => t('Price'),'field' => 'price'),
    array('data' => t('Model'),'field'=>'model'),
    array('data' => t('Color'),'field'=>'color'),
    array('data' => t('Speed'),'field'=>'speed'),

  );

  $order = tablesort_get_order($header);
  $sort = tablesort_get_sort($header);
  $sql=$order['sql'];
  if($sort=='desc') {

    usort($rows, function($a, $b) use($sql) {
    return $a['data'][$sql] > $b['data'][$sql]? -1 : 1;

  });

  }
  if($sort=='asc') {
      usort($rows, function($a, $b) use ($sql) {
        return $a['data'][$sql] < $b['data'][$sql]? -1 : 1;
      });
  }

  $output = theme('table', array(
    'header' => $header,
    'rows' => $rows,
  ));

  return $output;
4
Ali Nouman