2012-07-18 23 views
0

刚刚学习agiletoolkit,所以我会有一些问题...使用选定列和自定义布局增强CRUD?

首先,我已经把它运行在一个数据库中,其中有一些数据,实际上有几个表。没什么太大的。

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

这里就是我的意思是:

我有一个表,有很多的模型,并引用与CRUD该模型中的页面定义字段。我真的不想看到CRUD网格中的所有字段,但我希望能够通过单击CRUD提供的编辑按钮来编辑我想要的其他字段。我后面的效果是一个有几列的网格,但像CRUD那样可以编辑。这可能吗?

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

这是可能的还是我需要去另一种方式(多个页面与表单)?

我在想也许是某些列的网格布局,但我想在列中打开另一个页面的编辑按钮,其中包含我为记录选择的编辑字段?

回答

0

如果有某一个领域,你不希望出现的污物,我想他们可能会被标记为系统领域,你可以做你的模型的定义是这样的:

$this->addField('somefield')->system(true); 
1

你可以限制网格和窗体中显示的列,以便不使用setModel的第二个参数显示模型中的所有内容。

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

您可以使用addCondition来限制在网格中显示的行,该addCondition将修改where子句。把这两在一起会是这个样子

<?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建议不添加/编辑表单上可见。

您还可以使用$ m-> get('columnname')通过设置可见(false),例如,在网格或窗体中未显示的字段,但在引用页面时仍然可以访问这些字段。对于在mysql中自动增量的id列。

<?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列,但添加或编辑一个新的领域时,将只允许输入name的值。

然后,您可以通过将YourModel添加到下面(并假设YourModel)来进一步进行此操作。column3_id是一个外键的字段anothertable然后

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

其中“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。