如何为DynaGrid添加订单键?



我为每个表都有一个操作列。我需要为操作列的每个表添加order => ORDER_FIX_RIGHT。如何在我的 DynaGridViewAdvanced 中添加order密钥?

我试着写:

protected function applyColumns()
{
$columns = [];
$newColumns = [];
foreach ($this->columns as $column) {
$order = ArrayHelper::getValue($column, 'order', self::ORDER_MIDDLE);

if ($order == self::ORDER_FIX_LEFT) {
$newColumns[] = $column;
unset($column['order']);
$columns[] = $column;
}
}

foreach ($this->_visibleKeys as $key) {
if (empty($this->_columns[$key])) {
continue;
}
$column = $this->_columns[$key];
$newColumns[] = $column;
if (isset($column['order'])) {
unset($column['order']);
}
if (isset($column['visible'])) {
unset($column['visible']);
}
$columns[] = $column;
}

foreach ($this->columns as $column) {
$order = ArrayHelper::getValue($column, 'order', self::ORDER_MIDDLE);
$isActionColumn = is_array($column) && array_key_exists('class', $column) && (new $column['class']) instanceof ActionColumn;

if ($order == self::ORDER_FIX_RIGHT) {
$newColumns[] = $column;
unset($column['order']);
$columns[] = $column;
}

if ($isActionColumn) {
$column['order'] = self::ORDER_FIX_RIGHT;
$newColumns[] = $column;
unset($column['order']);
$columns[] = $column;
}
}

$this->columns = $newColumns;
$this->gridOptions['columns'] = $columns;
}

但它是第二列。如果我写:

protected function prepareColumns()
{
$this->_columns = $this->columns;
$columns = [];

foreach ($this->columns as $column) {
$isActionColumn = is_array($column) && array_key_exists('class', $column) && (new $column['class']) instanceof ActionColumn;

if (is_array($column) && !$isActionColumn) {
unset($column['order']);
}

if ($isActionColumn) {
$column['order'] = $this->actionColumnsPosition;
}

$columns[] = $column;
}


$this->gridOptions['columns'] = $columns;
}

一切正常,但是当我在列中更改一些内容时,我有例外:

设置未知属性...操作列::订单

完成。我创建了包含内容的方法setDefaultOrderToActionColumns

private function setDefaultOrderToActionColumns() {
foreach ($this->columns as &$column) {
$columnTypeIsAction = is_array($column) && array_key_exists('class', $column) && (new $column['class']) instanceof ActionColumn;

if ($columnTypeIsAction) {
$column['order'] = $this->actionColumnsPosition;
}
}
}

并在重新定义的方法run中调用它:

public function run() {
...
$this->setDefaultOrderToActionColumns();
}

最新更新