您可以限制网格和表单中显示的列,这样您就不会使用 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。