2011-09-08 102 views
6

即時通訊使用Drupal 7,我想在視圖中添加一個新的過濾器。添加自定義過濾器到Drupal 7中的視圖

我有一個自定義表「點擊」兩個字段; nid和clicks_left。

該過濾器應該只包含一個複選框「僅剩下點擊顯示節點」。所以過濾器應連接節點和NID點擊..

我看過像成千上萬的自定義過濾器頁面,但不能讓它的工作=)

請,可有人告訴我一個工作示例使我明白?

我到目前爲止,過濾器顯示在過濾器下,但我需要添加什麼來做連接並獲得複選框?下面的相關代碼:

FILE 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; 
} 

FILE 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

Yvan,好的..但是在哪裏/如何添加我的複選框?當我現在使用過濾器時,沒有東西彈出。 我該如何做連接? – 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, ">"); 
} 

} 

這給了我一個可能性添加一個過濾器「點擊」,如果啓用隱藏所有沒有點擊的結果(clicks_left> 0)