2013-05-30 257 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。

相关问题