2013-05-30 255 views
1

我有一個小的應用程序,我需要解決幾個問題:如何在AgileToolkit中進行排序和字母數字字段?

  1. 需要設置字段默認排序順序。這是我現在的代碼

    $crud->grid->getColumn('JOB_NO')->makeSortable(); 
    

    網格顯示排序圖標,但我想設置該字段的默認排序是降序。

  2. 的JOB_NO字段包含字母數字作業編號:N999,N1000,N1001等..

排序工作但是它把N999在頂部和N1000和N1001甚至不存在只在分頁後幾頁找到。 如何設置排序以確保更高的職位數保持在最高位?基本上可以忽略第一個字母? 謝謝

回答

1

1)有兩個選擇如何做到這一點。

第一種選擇是將排序添加到模型,而不是直接添加到網格。

然後你可以使用:

$model->addField('foo')->sortable(true); 
$model->setOrder('foo','desc'); 

第二個選項(如果你想,或者在電網層面做到這一點):

$grid->getColumn('foo')->makeSortable('-'); 

// or even (not sure, didn't test this) 
$grid->makeSortable('-foo'); 

2)不知道究竟是如何做到這一點,但你可以嘗試以下之一:

  • 在模型中創建新的計算領域,並計算它像SUBSTR(JOB_NO,1) - 條狀第一字符。然後按這個字段排序。
  • 僅保存數據庫中該代碼的數字部分,然後在數字前僅在視圖級別(例如網格列formater)上添加「N」。
  • 注意,你也可以做類似這樣莫名其妙: SELECT job_no喬布斯ORDER BY長度(job_no),job_no
0

我建議你有一個單獨的字段進行排序。

首先在數據庫和模型中創建字段「foo_sort」。其設置爲系統的現場,這樣就不會在默認情況下出現在UI:

$model->addField('foo_sort')->system(true); 
$model->setOrder('foo_sort'); 

然後創建一個鉤模型保存前,將計算字段的值:

$model->addHook('beforeSave',function($m){ 
    $m['foo_sort']=substr(0,1,$m['foo']); 
}); 

你不需要做其他事情,也許手動更新數據庫中的現有記錄。此方法可用於許多其他場景,以維護排序字段,如從全文搜索數據中剝離HTML。

相關問題