क्या TableSort को बिना क्वेरी के इस्तेमाल किया जा सकता है?


15

मेरे मॉड्यूल में, मैं अपनी कुछ तालिकाओं के लिए TableSort का उपयोग कर रहा हूं, लेकिन मेरे पास कुछ तालिकाएं भी हैं जो कोड द्वारा उत्पन्न की जाती हैं, इसलिए सीधे क्वेरी से जुड़ी नहीं हैं। इन तालिकाओं को भी थीम ('टेबल') के साथ बनाया गया है और इसलिए $ हेडर और $ पंक्तियाँ सरणियाँ हैं। क्या मेरे छांटने के कार्य को लिखने के साथ ही उन पर भी टेबलस्पोर्ट का उपयोग करना संभव है?

प्रलेखन tablesort.inc के लिए यह संभव है सुझाव देने के लिए (लगता है ( 'तालिका') विषय के लिए एक कॉल के साथ बनाई गई सभी तालिकाओं उपयोगकर्ता उस स्तंभ के आधार पर तालिका सॉर्ट करने के लिए पर क्लिक कर सकते हैं कि होने स्तंभ शीर्ष लेखों का विकल्प होता है )। हालाँकि, मुझे ऐसा करने के लिए कोई निर्देश या उदाहरण नहीं मिला है। अब तक मुझे जो कुछ भी मिला है वह एक प्रश्न पर आधारित है। मैं ड्रुपल 7 का उपयोग कर रहा हूं।

जवाबों:


10

Tablesort में वास्तव में दो अलग-अलग सिस्टम होते हैं जो एक साथ काम करते हैं।

पहला भाग प्रतिपादन है, जो सामान सीधे theme_table () के भीतर होता है या उसी से कहा जाता है। यदि यह एक डिफ़ॉल्ट सॉर्ट या $ _GET के माध्यम से ओवरराइड मौजूद है और उन्हें लिंक बनाता है ताकि आप उन पर क्लिक कर सकें, तो यह सभी प्रकार के संकेत के साथ टेबल हेडर प्रदर्शित करता है।

दूसरा भाग TableSort क्वेरी एक्सटेंडर है, जो डिफ़ॉल्ट सॉर्ट दिशा या $ _GET ओवरराइड पर आधारित क्वेरी को समायोजित करता है।

ये दोनों प्रणालियां वास्तव में बहुत अलग हैं, बस आसानी से एक साथ काम करती हैं क्योंकि वे एक ही $ हेडर संरचना से अपना डेटा प्राप्त करते हैं और $ _GET मापदंडों के लिए समान सहायक कार्यों और नामकरण सम्मेलनों का उपयोग करते हैं। लेकिन इनमें से केवल एक का उपयोग करने से आपको कुछ भी नहीं रोकता है।

वास्तव में आपके प्रश्न का उत्तर देने के लिए, यदि आपको सिर्फ रेंडरिंग भाग की आवश्यकता है, तो आपको बस TableSort :: orderbyHeader () के समान कुछ करने की ज़रूरत है । ऑर्डरबाय () कॉल के बजाय, आप एक सरणी सॉर्ट फ़ंक्शन का उपयोग करेंगे, या इसे वेब सेवा या किसी अन्य चीज़ के तर्क के रूप में पास करेंगे।

और इसके विपरीत, आपको बस यह सुनिश्चित करना होगा कि आप एक लिंक प्रदर्शित करें जो मूल रूप से tablesort_header () के बराबर है ताकि यह TableSort क्वेरी एक्सटेंडर द्वारा मान्यता प्राप्त हो।


मुझे सही दिशा में इंगित करने के लिए धन्यवाद, मुझे अब यह काम कर रहा है। उसी को प्राप्त करने की कोशिश करने वालों के लिए, मैंने अपने कदम एक अलग उत्तर में डाल दिए क्योंकि यह एक टिप्पणी क्षेत्र में फिट नहीं है।
व्हिस्की

15

के लिए धन्यवाद Berdir मैं काम कर रहा समझ में आ गया। यह इस तरह से अधिक विस्तार से काम करता है।

टेबोर्ट को "स्वचालित रूप से" ट्रिगर किया जाता है यदि $ हेडर सरणी में कॉलम (कॉलम) में कुंजी 'डेटा', 'फ़ील्ड' और वैकल्पिक रूप से 'सॉर्ट' हो। यह कॉलम हेडर में 'सॉर्ट' और 'ऑर्डर' के साथ लिंक बनाएगा और छोटे एरो और ऐसे दिखाएगा।

अपनी खुद की छँटाई करने के लिए, तालिकाएँ_get_order और tablesort_get_sort के साथ वर्तमान सॉर्ट सेटिंग्स प्राप्त करें और अपने छँटाई फ़ंक्शन के लिए उन मानों का उपयोग करें। सारणी में मुख्य 'sql' सारणी के द्वारा लौटाए जाने वाले फ़ील्ड नाम में सॉर्टिंग के लिए उपयोग किया जाना है।

प्रत्येक उपयोगकर्ता के लिए कुछ विवरणों वाले सरणी $ उपयोगकर्ताओं के साथ (अप्रयुक्त) उदाहरण कोड का एक टुकड़ा:

// 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;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.