Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Columns.php
Go to the documentation of this file.
1 <?php
7 
14 
15 class Columns extends \Magento\Ui\Component\Listing\Columns
16 {
20  protected $columnSortOrder;
21 
26 
30  protected $inlineEditUpdater;
31 
35  protected $filterMap = [
36  'default' => 'text',
37  'select' => 'select',
38  'boolean' => 'select',
39  'multiselect' => 'select',
40  'date' => 'dateRange',
41  ];
42 
51  public function __construct(
53  ColumnFactory $columnFactory,
55  InlineEditUpdater $inlineEditor,
56  array $components = [],
57  array $data = []
58  ) {
59  parent::__construct($context, $components, $data);
60  $this->columnFactory = $columnFactory;
61  $this->attributeRepository = $attributeRepository;
62  $this->inlineEditUpdater = $inlineEditor;
63  }
64 
68  protected function getDefaultSortOrder()
69  {
70  $max = 0;
71  foreach ($this->components as $component) {
72  $config = $component->getData('config');
73  if (isset($config['sortOrder']) && $config['sortOrder'] > $max) {
74  $max = $config['sortOrder'];
75  }
76  }
77  return ++$max;
78  }
79 
85  protected function updateActionColumnSortOrder()
86  {
87  if (isset($this->components['actions'])) {
88  $component = $this->components['actions'];
89  $component->setData(
90  'config',
91  array_merge($component->getData('config'), ['sortOrder' => ++$this->columnSortOrder])
92  );
93  }
94  }
95 
99  public function prepare()
100  {
101  $this->columnSortOrder = $this->getDefaultSortOrder();
102  foreach ($this->attributeRepository->getList() as $newAttributeCode => $attributeData) {
103  if (isset($this->components[$newAttributeCode])) {
104  $this->updateColumn($attributeData, $newAttributeCode);
105  } elseif (!$attributeData[AttributeMetadata::BACKEND_TYPE] != 'static'
106  && $attributeData[AttributeMetadata::IS_USED_IN_GRID]
107  ) {
108  $this->addColumn($attributeData, $newAttributeCode);
109  }
110  }
112  parent::prepare();
113  }
114 
120  public function addColumn(array $attributeData, $columnName)
121  {
122  $config['sortOrder'] = ++$this->columnSortOrder;
123  if ($attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID]) {
124  $config['filter'] = $this->getFilterType($attributeData[AttributeMetadata::FRONTEND_INPUT]);
125  }
126  $column = $this->columnFactory->create($attributeData, $columnName, $this->getContext(), $config);
127  $column->prepare();
128  $this->addComponent($attributeData[AttributeMetadata::ATTRIBUTE_CODE], $column);
129  }
130 
136  public function updateColumn(array $attributeData, $newAttributeCode)
137  {
138  $component = $this->components[$attributeData[AttributeMetadata::ATTRIBUTE_CODE]];
139  $this->addOptions($component, $attributeData);
140 
141  if ($attributeData[AttributeMetadata::BACKEND_TYPE] != 'static') {
142  if ($attributeData[AttributeMetadata::IS_USED_IN_GRID]) {
143  $config = array_merge(
144  $component->getData('config'),
145  [
146  'name' => $newAttributeCode,
147  'dataType' => $attributeData[AttributeMetadata::BACKEND_TYPE],
148  'visible' => (bool)$attributeData[AttributeMetadata::IS_VISIBLE_IN_GRID]
149  ]
150  );
151  if ($attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID]) {
152  $config['filter'] = $this->getFilterType($attributeData[AttributeMetadata::FRONTEND_INPUT]);
153  }
154  $component->setData('config', $config);
155  }
156  } else {
158  && !empty($component->getData('config')['editor'])
159  ) {
160  $this->inlineEditUpdater->applyEditing(
161  $component,
162  $attributeData[AttributeMetadata::FRONTEND_INPUT],
163  $attributeData[AttributeMetadata::VALIDATION_RULES],
164  $attributeData[AttributeMetadata::REQUIRED]
165  );
166  }
167  $component->setData(
168  'config',
169  array_merge(
170  $component->getData('config'),
171  ['visible' => (bool)$attributeData[AttributeMetadata::IS_VISIBLE_IN_GRID]]
172  )
173  );
174  }
175  }
176 
184  public function addOptions(UiComponentInterface $component, array $attributeData)
185  {
186  $config = $component->getData('config');
187  if (count($attributeData[AttributeMetadata::OPTIONS]) && !isset($config[AttributeMetadata::OPTIONS])) {
188  $component->setData(
189  'config',
190  array_merge($config, [AttributeMetadata::OPTIONS => $attributeData[AttributeMetadata::OPTIONS]])
191  );
192  }
193  }
194 
201  protected function getFilterType($frontendInput)
202  {
203  return isset($this->filterMap[$frontendInput]) ? $this->filterMap[$frontendInput] : $this->filterMap['default'];
204  }
205 }
updateColumn(array $attributeData, $newAttributeCode)
Definition: Columns.php:136
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
$config
Definition: fraud_order.php:17
__construct(ContextInterface $context, ColumnFactory $columnFactory, AttributeRepository $attributeRepository, InlineEditUpdater $inlineEditor, array $components=[], array $data=[])
Definition: Columns.php:51
addOptions(UiComponentInterface $component, array $attributeData)
Definition: Columns.php:184
addColumn(array $attributeData, $columnName)
Definition: Columns.php:120
addComponent($name, UiComponentInterface $component)