Как добавить ключ заказа для DynaGrid?
У меня есть ActionColumn для каждой таблицы. Мне нужно добавитьorder => ORDER_FIX_RIGHT
на таблицу для ActionColumn. Как я могу добавитьorder
ключ в моем DynaGridViewAdvanced?
Я пытался написать:
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;
}
Все работает нормально, но когда я меняю некоторые столбцы, у меня возникает исключение:
Установка неизвестного свойства...ActionColumn::order
1 ответ
Выполнено. Я создал метод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();
}