টেবিলসোর্ট কোনও জিজ্ঞাসা ছাড়াই ব্যবহার করা যেতে পারে?


15

আমার মডিউলে, আমি আমার কয়েকটি টেবিলের জন্য টেবিলসোর্ট ব্যবহার করছি, তবে আমার কাছে কিছু টেবিল রয়েছে যা কোড দ্বারা উত্পন্ন, তাই কোনও প্রশ্নের সাথে সরাসরি লিঙ্ক করা হয়নি। এই টেবিলগুলি থিম ('টেবিল') দিয়ে তৈরি করা হয়েছে এবং তাই এতে $ শিরোনাম এবং ows সারি অ্যারে রয়েছে। তাদের উপরও কি টেবিলসোর্ট ব্যবহার করা সম্ভব, সম্ভবত আমার বাছাইয়ের কাজটি লিখে?

ডকুমেন্টেশন tablesort.inc জন্য এটা সম্ভব সুপারিশ (মনে হয় ( 'টেবিল') থিম একটি কল সঙ্গে তৈরি করা সকল টেবিল ব্যবহারকারী যে কলাম দ্বারা টেবিল সাজাতে ক্লিক করতে পারেন যে থাকার কলাম হেডার অপশন আছে )। তবে এটি কীভাবে করা যায় সে সম্পর্কে আমি কোনও নির্দেশনা বা উদাহরণ পাইনি। আমি এখন পর্যন্ত যা কিছু পেয়েছি তা একটি প্রশ্নের ভিত্তিতে তৈরি। আমি ড্রুপাল 7 ব্যবহার করছি।

উত্তর:


10

টেবিলসোর্টে দুটি আলাদা সিস্টেম থাকে যা একসাথে কাজ করে।

প্রথম অংশটি রেন্ডারিং, স্টাফ যা থিম_ট্যাবল () এর মধ্যে সরাসরি ঘটে বা সেখান থেকে ডাকা হয়। এটির দ্বারা সারণি শিরোনামগুলি সাজ্ট ইঙ্গিত সহ প্রদর্শিত হয় যদি কোনও ডিফল্ট বাছাই বা or _GET এর মাধ্যমে ওভাররাইড হয় এবং তাদের লিঙ্কগুলি তৈরি করে যাতে আপনি তাদের উপর ক্লিক করতে পারেন।

দ্বিতীয় অংশটি হ'ল টেবিলসোর্ট ক্যোয়ারী প্রসারক, এটি ডিফল্ট বাছাইয়ের দিক বা $ _GET ওভাররাইডের উপর ভিত্তি করে যুক্ত করা ক্যোয়ারী সামঞ্জস্য করে।

এই দুটি সিস্টেম আসলে খুব আলাদা করা হয়েছে, কেবলমাত্র সহজেই একসাথে কাজ করুন কারণ তারা একই $ শিরোনামের কাঠামো থেকে তাদের ডেটা পান এবং একই সহায়ক সহায়ক ফাংশন এবং $ _GET পরামিতিগুলির নামকরণের সম্মেলনগুলি ব্যবহার করেন। তবে কিছুই এইগুলির মধ্যে একটির ব্যবহার থেকে আপনাকে বাধা দেয় না।

আপনার প্রশ্নের উত্তর দেওয়ার জন্য, আপনার যদি কেবল রেন্ডারিং অংশের প্রয়োজন হয় তবে আপনাকে কেবল টেবিলসোর্ট :: অর্ডারবাইহাইডার () এর অনুরূপ কিছু করা নিশ্চিত করতে হবে । অর্ডারবাই () কলের পরিবর্তে আপনি একটি অ্যারে বাছাই ফাংশন ব্যবহার করবেন বা এটি ওয়েব পরিষেবা বা অন্য কোনও কিছুর পক্ষে যুক্তি হিসাবে পাস করুন।

এবং বিপরীতে, আপনাকে কেবল এটি নিশ্চিত করতে হবে যে আপনি একটি লিঙ্ক প্রদর্শন করছেন যা মূলত টেবিলসোর্ট_হেডার () এর সমতুল্য যাতে এটি টেবিলসোর্ট ক্যোয়ারী প্রসারক দ্বারা স্বীকৃত।


আমাকে সঠিক দিকে নির্দেশ করার জন্য আপনাকে ধন্যবাদ, আমি এখন এটি কাজ করে চলেছি। যারা এটি অর্জন করার চেষ্টা করছে তাদের জন্য, আমি আমার পদক্ষেপগুলি পৃথক উত্তরে রেখেছি কারণ এটি কোনও মন্তব্যের ক্ষেত্রে ফিট করে না।
হুইস্কি

15

বারদিরকে ধন্যবাদ আমি এটি কাজ করেছিলাম। এটি আরও বিশদে কাজ করে।

টেবিলসোর্টটিতে "স্বয়ংক্রিয়ভাবে" ট্রিগার করা হয় যদি column শিরোনাম অ্যারেতে (কলাম) অ্যারেগুলিতে 'ডেটা', 'ক্ষেত্র' এবং allyচ্ছিকভাবে 'বাছাই' থাকে। এটি কলাম শিরোনামগুলিতে 'বাছাই' এবং 'অর্ডার' এর সাথে লিঙ্ক তৈরি করবে এবং ছোট তীর এবং এ জাতীয় প্রদর্শন করবে।

আপনার নিজস্ব বাছাই করতে, টেবিলসোর্ট_জেট_র্ডার এবং টেবিলসোর্ট_গেট_সোর্ট সহ বর্তমান বাছাইকরণ সেটিংস পান এবং আপনার নিজস্ব বাছাইয়ের জন্য এই মানগুলি ব্যবহার করুন। Tablesort_get_ অর্ডার দ্বারা ফিরে অ্যারেতে থাকা 'sql' কীটিতে বাছাইয়ের জন্য ক্ষেত্রের নাম রয়েছে।

অ্যারে un ব্যবহারকারীদের প্রত্যেকটি ব্যবহারকারীর জন্য কিছু বিশদ বিশিষ্ট উদাহরণ কোডের একটি অংশ:

// 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);

1
stackoverflow.com/a/19454643/763010 আমাকে এখানে সাহায্য করেছে write your own sort function
tyler.frankenstein

4

হুইস্কির উত্তরে আমি যে কোডটি শেষ করেছিলাম তা এখানে। এটি সত্তা ক্ষেত্রের ক্যোয়ারি ব্যবহার করে।

 $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;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.