В atk4 мне нравится расширять CRUD одним столбцом, который представляет собой поиск в массиве доступного столбца в модели. Это нужно для получения названия категории (catshop), для которой catshop_id уже доступен. Но catshop доступен только в виде массива.
Модель:
class Model_CatLink extends Model_Table {
public $table='catlink';
function init() {
parent::init();
$this->addField('catshop_id');
$this->addField('margin_ratio');
}
}
И на странице у меня есть:
$catshop=array(1=>'cat1',2=>'another cat 2',...,123=>'top cat');
$c=$p->add('CRUD');
$m=$this->add('Model_CatLink');
$c->setModel($m);
Теперь в сетке отображаются поля cathop_id и margin_ratio. С помощью catshop_id я хочу найти название категории, доступное в $catshop. Этот массив $catshop фактически получен с другой платформы mysql, поэтому невозможно присоединиться.
Как расширить хлам с помощью столбца catshop? До сих пор я пытался расширить саму модель с помощью addExpression... не смог заставить ее работать.
Я думал примерно так, сначала добавить это в модель:
$self=$this;
$this->addExpression('catshop')->set(function($select) use ($self){
return $self->catshop[$self->get('catshop_id')];
});
А затем на странице передать $catshop модели:
$catshop=array(1=>'cat1',2=>'another cat 2',...,123=>'top cat');
$c=$p->add('CRUD');
$m=$this->add('Model_CatLink');
$m->catshop=$catshop;
$c->setModel($m);
Затем я подумал добавить значения в модель непосредственно перед $c->setModel($m), хотя я не уверен, как это сделать.
Результат, который я ищу, - это CRUD, который показывает строку catshop, а также позволяет изменить catshop_id с помощью выпадающего списка из массива catshop.