簡體   English   中英

如何在Drupal 7視圖中使引用列可排序

[英]How to make referenced column sortable in drupal 7 view

我在Drupal 7中有一個視圖,它顯示用戶信息,例如(名稱,地址,狀態等)。 我在此(Table)視圖中有一列為“已發布事件”。 基本上,事件是由用戶創建的,我是否想使此列可排序。 我已附上圖片以供更多參考。

截圖

我嘗試過建立關系,但沒有成功。

表設置

我的處理程序代碼如下:

 $handler->display->display_options['sorts']['event_count_published']   ['id'] = 'event_count_published';

$handler->display->display_options['sorts']['event_count_published']   ['table'] = 'search_api_index_user_search_index';
 $handler->display->display_options['sorts']['event_count_published']   ['field'] = 'event_count_published';
$handler->display->display_options['sorts']['event_count_published']   ['order'] = 'DESC';

 'mail' => array(
  'sortable' => 1,
  'default_sort_order' => 'asc',
  'align' => '',
  'separator' => '',
  'empty_column' => 0,
),
'event_count_published' => array(
  'align' => '',
  'separator' => '',
  'empty_column' => 0,
  'sortable' => 1,
),

上面的代碼在“ tcd_reporting.views_default.inc”文件中,如果我輸入“ sortable => 1”,它仍然不提供排序

字段由以下代碼創建:

 $properties['event_count_published'] = array(
'label' => t('Published Events'),
'description' => t('Number of published events authored by user.'),
'type' => 'integer',
'getter callback' => 'tcd_event_content_type_count_published_get',
'computed' => TRUE,
'entity views field' => TRUE,

);

[簡介]哪個功能負責視圖中的“單擊排序”?

在視圖表設置中,單擊排序(第二個屏幕中的此復選框)是僅對具有正確定義的處理程序的字段啟用的功能。 如您所知,視圖中的每個字段都有幾個處理程序(用於顯示,過濾,排序)。 為了使click排序在指定列上可行,其字段處理程序必須定義兩個函數: click_sortableclick_sort 第一個只需要返回true ,而第二個需要正確地實現對視圖的排序。 例如,請參閱處理程序: [views_module_path]/handlers/views_handler_field.inc

您的情況:

看來您的“已發布事件”列已定義了處理程序,該處理程序沒有click_sortableclick_sort函數(或click_sortable僅返回false )。

可能的解決方法:

查找定義視圖源的位置(這取決於您如何告知視圖,如果我了解“用戶信息”之類的信息(可能在hook_entity_info函數或hook_views_data函數中),請檢查為您的“已發布事件”分配了哪些處理程序字段並進行更改。

很難確定需要在哪里查看,這取決於您的實現。

我建議您嘗試創建hook_views_data_alter函數,並使用dpm()進行啟動。 稍后您可以像這樣更改它:

mymodule_views_data_alter(&$data) {
  $data['some_view_info']['published_event']['field']['handler'] = 'views_handler_field_numeric';
}

編輯1

首先,您能知道這段代碼在哪里嗎? 它是在處理程序類內部,還是某些視圖掛鈎? 視圖為您提供了很大的靈活性,但這使它們難以理解,我不確定您究竟能實現什么以及如何實現。

假設您的字段正常運行,您可以嘗試簡單地啟用點擊排序。

示例:我創建了hook_views_data_alter函數來查看視圖數據的內容

function mymodule_views_data_alter(&$data) {
  dpm($data,'d');
}

您可能需要清除緩存以查看* _alter鈎子的dpm。 在dpm'ed數組中,我找到了通用示例的“用戶”,其字段名稱如下所示:

DPM

建議您嘗試使用click_sortable = TRUE更改您的字段,然后看看會發生什么。 如果這沒有幫助,請提供有關您的字段,如何創建該字段,在hook_views_data_alter中的hook_views_data_alter以及定義的處理程序的更多信息。

編輯2

好的,因此您已將視圖導出到代碼中,並放入views_default文件中。 但這僅允許您將您從數據庫創建的視圖導出到代碼,因此,這基本上反映了您在視圖Web編輯器中所做的工作(例如,頁面yourwebsite.com/admin/structure/views/view/your_view_name/edit )。 您需要做的是更改其中一個字段的行為,使其變為可排序的(在處理程序類中添加click_sortableclick_sort函數), 或者將該字段的處理程序更改為帶有排序選項的一個(將field處理程序更改為另一個,例如views_handler_field_numeric )。 如果您沒有創建處理程序的經驗,並且這是通用處理程序之一,建議您回到我的Edit 1 ,檢查dpm,然后嘗試更改$ data數組以找到解決方案。

編輯3

很少有解釋以防止混淆。 創建新視圖時,請選擇基於該特定視圖的集合(最簡單的示例-它可能是MySQL表,並且視圖將使用SQL查詢從中檢索數據)。 通過挖掘,我們可以:

  1. 收藏-例如 User是數據庫表user ,它是您在創建新視圖時選擇的源。 創建視圖

  2. 領域-例如 mail ,即數據庫列mail ,您將其添加到視圖中。

  3. 現場服務員-例如 views_handler_field_numeric ,這是要由指定字段使用的處理程序的類名

現在,如果您沒有創建自己的處理程序,則字段“ Published event”將具有通用視圖處理程序之一。 您永遠不應更改貢獻模塊的代碼,尤其是被廣泛用作視圖處理程序的代碼。 這就是為什么我建議添加功能click_sortableclick_sort建議不正確。 相反,您應該更改負責字段“ Published event”的處理程序。

最好的方法是在定義字段“已發布事件”的地方定義適當的處理程序。 如果某種程度上不可能,那么我能想到的唯一方法就是hook_views_data_alter 請參閱文檔以獲取更多信息和示例。 我想您應該嘗試將字段的處理程序重新定義為通用數字處理程序views_handler_field_numeric因為它應該具有完整的排序功能,或者嘗試將click_sortable屬性添加到字段數組中,如您在我的帖子的第一張圖片中所見,但我無法提供您經過充分測試的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM