0

刚刚学习agiletoolkit,所以我会有一些问题......

首先,我启动并运行了一个数据库,其中包含一些数据,实际上是几个表。没什么大不了的。

我有所有可以使用基本 CRUD 编辑的表格,但我想知道是否可以通过布局控制来增强 CRUD 界面。

这就是我的意思:

我有一个表,其中包含在模型中定义的许多字段,以及一个使用 CRUD 引用该模型的页面。我真的不想看到 CRUD 网格中的所有字段,但我希望能够通过单击 CRUD 提供的编辑按钮来编辑我想要的某些其他字段。我追求的效果是一个有几列但可以像 CRUD 一样在适当位置编辑的网格。这可能吗?

此外,我已经能够使用复选框和日期选择器为适当的字段格式化 CRUD 编辑器,但是覆盖编辑器太大而无法显示表中的所有字段,所以我希望能够用部分格式化覆盖并减少字段等的大小。

这是可能的还是我需要以另一种方式进行(带有表格的多页)?

我可能正在考虑具有某些列的网格布局,但我希望列中的 EDIT 按钮可以打开另一个页面,其中包含我为记录选择的编辑字段?

4

2 回答 2

1

您可以限制网格和表单中显示的列,这样您就不会使用 setModel 的第二个参数显示模型中的所有内容。

   $c1=$crud1->setModel($m, array('id', 'name', 'column1', 'column2'));

您可以使用修改 where 子句的 addCondition 来限制网格中显示的行。把这两个放在一起看起来像这样

 <?php
 class page_yourpage extends Page {

 function init() { 
   $p=$this;

   $crud1=$p->add('View_CRUD');
   $m=$p->add('Model_YourModel');
   $m->addCondition('column1','value1');
   $m->order('column2');

   $c1=$crud1->setModel($m, array('id', 'name', 'column1', 'column2'));

 }
}
?>

当按照 mcanedo 的建议将字段设置为 system(true) 时,您可以在网格中显示列,但在添加/编辑表单上不可见。

您还可以拥有未显示在网格或表单中但在使用 $m->get('columnname') 通过设置 visible(false) 引用页面时仍可访问的字段,例如对于自动递增的 id 列mysql。

<?php
class Model_YourModel extends Model_Table {
    public $entity_code='yourtable';.
    public $table_alias='yt';

    function init(){
        parent::init();
        $this->addField('id')->system(true)->visible(false);
        $this->addField('name');
        $this->addField('column1')->system(true);
        $this->addField('column2')->system(true)->visible(false);

这应该创建一个包含名称列和第 2 列的网格,但是在添加或编辑新字段时,它只允许输入名称的值。

然后,您可以通过如下添加到 YourModel 来进一步执行此操作(并假设 YourModel.column3_id 是具有另一个表的外键的字段

         $this->addFIeld('column3_id')->refModel('Model_AnotherModel');

其中“另一个模型”定义为

  <?php
  class Model_AnotherModel extends Model_Table {
    public $entity_code='anothertable';.
    public $table_alias='at';

    function init(){
        parent::init();
        $this->addField('id')->system(true)->visible(false);
        $this->addField('name');
     }
  }

然后,这将在表单中添加一个下拉列表,用户可以从中选择“anothertable”中的有效值,并且在网格中,它将显示名称字段而不是实际存储在“yourtable”中的 ID。

于 2012-07-23T16:55:23.163 回答
0

如果您不想出现在 crud 上的某些字段,我猜它们可能被标记为系统字段,您可以在模型定义中这样做:

$this->addField('somefield')->system(true);
于 2012-07-21T02:31:05.557 回答