/** * Generates datagrid row content. * @param \Traversable|array data * @return Html */ protected function generateContentRow($data) { $form = $this->dataGrid->getForm(TRUE); $row = $this->getWrapper('row.content container'); if ($this->dataGrid->hasOperations() || $this->dataGrid->hasActions()) { $primary = $this->dataGrid->keyName; if (!isset($data[$primary])) { throw new \InvalidArgumentException("Invalid name of key for group operations or actions. Column '" . $primary . "' does not exist in data source."); } } // checker if ($this->dataGrid->hasOperations()) { $value = $form['checker'][$data[$primary]]->getControl(); $cell = $this->getWrapper('row.content cell container')->setHtml((string) $value); $cell->addClass('checker'); $row->add($cell); } // content foreach ($this->dataGrid->getColumns() as $column) { $cell = $this->getWrapper('row.content cell container'); $cell->attrs = $column->getCellPrototype()->attrs; if ($column instanceof Columns\ActionColumn) { $value = ''; foreach ($this->dataGrid->getActions() as $action) { if (!is_callable($action->ifDisableCallback) || !callback($action->ifDisableCallback)->invokeArgs(array($data))) { $html = $action->getHtml(); $html->title($this->dataGrid->translate($html->title)); $action->generateLink(array($primary => $data[$primary])); $this->onActionRender($html, $data); $value .= $html->render() . ' '; } else { $value .= Html::el('span')->setText($this->dataGrid->translate($action->getHtml()->title))->render() . ' '; } } $cell->addClass('actions'); } else { if (!array_key_exists($column->getName(), $data)) { throw new \InvalidArgumentException("Non-existing column '" . $column->getName() . "' in datagrid '" . $this->dataGrid->getName() . "'"); } $value = $column->formatContent($data[$column->getName()], $data); } $cell->setHtml((string) $value); $this->onCellRender($cell, $column->getName(), !$column instanceof Columns\ActionColumn ? $data[$column->getName()] : $data); $row->add($cell); } unset($form, $primary, $cell, $value, $action); $this->onRowRender($row, $data); return $row; }