如何使用ATK将内容添加到网格中的额外列

时间:2013-08-21 07:24:44

标签: atk4

我有一个网格,可以从QuestionCollection模型中获取内容。

在一栏中,我想展示馆藏中的问题。我使用三个模型将问题连接到集合:

  1. 问题
  2. QuestionInCollection
  3. QuestionCollection
  4. 也就是说,我希望显示连接到额外列中特定行的内容,该列将使用addColumn添加到网格中。但是如何将这些内容插入每一行?

    我尝试过使用setTemplatesetSource,并使用额外的“问题”字段扩展QuestionCollection模型。但我无法让它发挥作用。

    有什么想法吗?

    编辑: 以下是代码示例:

    $q=$this->api->db->dsql()->table('questionincollection')->join('question')->field('question.name as question');
    $rows=$q->getAll();
    $quest=$crud->grid->addColumn('text','question')->setSource($rows);
    

    但是这个设置了整个网格的源,而不仅仅是我想要的列。

    另一种方式:尝试添加模板并填写内容 - 但如何将每行的内容连接到$ question?

    foreach($rows as $row) {
      $question=array_values($row);
      $questions[]=array_pop($question);
    }
    #Plan: To implode questions into each row...
    $quest=$crud->grid->addColumn('template','question','Spørgsmål')->setTemplate('<?$questions?> ');
    

1 个答案:

答案 0 :(得分:2)

好的,我发现自己使用了这个页面:http://agiletoolkit.org/doc/modeltable/expression和mysql Group_Concat。

此模型从questionincollection和question中获取信息,并将集合中的所有问题放入网格中的同一单元格中。这么简单,一旦你知道怎么做; - )

<?php
class Model_QuestionCollection extends Model_Table {
    public $entity_code='questioncollection';
    function init(){
        parent::init();

        $this->addField('name');
        $this->hasMany('QuestionInCollection');
        $this->add('dynamic_model/Controller_AutoCreator');

        $this->addExpression('questionsincollection')->type('html')->set(function($model,$select)use($self){
          return $model->refQuestions($select->getField('id')) ->dsql->join('question','question_id')->field($select->expr('GROUP_CONCAT(question.name SEPARATOR "<br>") questions '));
      });

    }
    function refQuestions($id=null){
    return $this->add('Model_QuestionInCollection')
      ->addCondition('questioncollection_id',$id?:$this->id);
    }
}