2

I have an ActionColumn for each tables. I need to add order => ORDER_FIX_RIGHT per table for ActionColumn. How can i add order key in my DynaGridViewAdvanced?

I tried to write:

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;
    }

But it makes second column. If i write:

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;
    }

All working fine, but when i change some in columns, i have exception about:

Setting unknown property ...ActionColumn::order

mepihindeveloper
  • 195
  • 1
  • 14

1 Answers1

0

Done. I created method setDefaultOrderToActionColumns with content:

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;
        }
    }
}

And called it in redefined method run:

public function run() {
    ...
    $this->setDefaultOrderToActionColumns();
}
mepihindeveloper
  • 195
  • 1
  • 14