2011-09-08 14 views
6

में ड्रूपल 7 का उपयोग कर एक कस्टम फ़िल्टर जोड़ना और मैं विचारों में एक नया फ़िल्टर जोड़ना चाहता हूं।Drupal 7

मेरे पास दो फ़ील्ड के साथ एक कस्टम टेबल "क्लिक" है; nid और click_left।

फ़िल्टर में केवल एक चेकबॉक्स होना चाहिए "केवल क्लिक के साथ नोड प्रदर्शित करें"। तो फिल्टर नोड और एनआईडी पर क्लिक करता है ..

मैं कस्टम फिल्टर के पन्नों के हजारों की तरह पढ़ा है, लेकिन यह काम करने के लिए नहीं मिल सकता है =)

कृपया शामिल हो जाना चाहिए, किसी ने मुझसे एक काम उदाहरण दिखा सकता है तो मै समझता हुँ?

मैं अब तक आया हूं कि फ़िल्टर फ़िल्टर के तहत प्रदर्शित होता है लेकिन मुझे शामिल होने और चेकबॉक्स प्राप्त करने के लिए क्या जोड़ने की आवश्यकता है? नीचे दिए गए प्रासंगिक कोड:

फ़ाइल clicks_views.inc:

function clicks_views_data() { 
    $data = array(); 

    $data['clicks']['clicks_filter'] = array(
    'group' => t('Clicks'), 
    'title' => t('Clicks left'), 
    'help' => t('Filter any Views based on clicks left'), 
    'filter' => array(
    'field' => 'clicks_left', 
     'handler' => 'clicks_handler_filter', 
    ), 
); 

return $data; 
} 

फ़ाइल clicks_handler_filter.inc:

<?php 
    class clicks_handler_filter extends views_handler_filter { 

    ??? 

}; 

मैं जानता हूँ कि दोनों कार्यों गलत हैं;)

+0

मुझे यहां एक समाधान मिला: http://oliverhuynh.wordpress.com/2011/06/23/custom-views-handler-drupal-7-template/ – tomasbedrich

उत्तर

0

वास्तव में, अपने मूल्यों अगर आपके टेबल क्लिक में संख्यात्मक है, आपको अपना खुद का हैंडलर बनाने की आवश्यकता नहीं है, आप डिफ़ॉल्ट views_handler_filter_numeric से डिफ़ॉल्ट का उपयोग कर सकते हैं।

आप सभी हैंडलर देख सकते हैं जो पहले से ही handlers में मौजूद हैं।

+0

यवन, ठीक है .. लेकिन मैं कहां/कैसे जोड़ूं मेरा चेकबॉक्स? जब मैं अब फ़िल्टर का उपयोग करता हूं, कुछ भी पॉप अप नहीं होता .. और मैं शामिल कैसे हो सकता हूं? – Per

5

ठीक है, मुझे एक समाधान मिला है। किसी के लिए भी है जो इसे की जरूरत है:

clicks.module में

function clicks_views_api() { 
    return array(
    'api' => 2, 
    'path' => drupal_get_path('module', 'clicks') . '/includes' 
); 
} 

clicks.views.inc

function clicks_views_handlers() { 
    return array(
    'info' => array(
     'path' => drupal_get_path('module', 'clicks') . '/includes', // path to view files 
    ), 
    'handlers' => array(
     // register our custom filter, with the class/file name and parent class 
     'clicks_handler_filter' => array(
     'parent' => 'views_handler_filter', 
    ) 
    ), 
); 
} 

function clicks_views_data() { 
    $data = array(); 

    if(module_exists('clicks')) { 
    $data['node']['clicks'] = array(
     'group' => t('Clicks'), 
     'title' => t('Clicks left'), 
     'help' => t('Filter any Views based on clicks left'), 
     'filter' => array(
     'handler' => 'clicks_handler_filter', 
    ), 
    ); 
    } 
    return $data; 
} 

clicks_handler_filter.inc

class clicks_handler_filter extends views_handler_filter { 

    function admin_summary() { } 
    function operator_form() { } 
    function query() { 
    $table = $this->ensure_my_table(); 
    $join = new views_join(); 
    $join->construct('clicks', $this->table_alias, 'nid', 'nid'); 
    $this->query->ensure_table('clicks', $this->relationship, $join); 
    $this->query->add_where($this->options['group'], "clicks.clicks_left", 0, ">"); 
} 

} 

में यह मैं एक संभावना प्रदान करता है फ़िल्टर "क्लिक" जोड़ने के लिए, यदि सक्षम है तो उन सभी परिणामों को छुपाता है जिनके पास क्लिक नहीं है (क्लिक_ बाएं> 0)

संबंधित मुद्दे