AbstractRenderer.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Backend\Block\Widget\Grid\Column\Renderer;
  7. use Magento\Backend\Block\Widget\Grid\Column;
  8. use Magento\Framework\DataObject;
  9. /**
  10. * Backend grid item abstract renderer
  11. * @api
  12. * @SuppressWarnings(PHPMD.NumberOfChildren)
  13. * @api
  14. * @since 100.0.2
  15. */
  16. abstract class AbstractRenderer extends \Magento\Backend\Block\AbstractBlock implements RendererInterface
  17. {
  18. /**
  19. * @var int
  20. */
  21. protected $_defaultWidth;
  22. /**
  23. * @var Column
  24. */
  25. protected $_column;
  26. /**
  27. * @param Column $column
  28. * @return $this
  29. */
  30. public function setColumn($column)
  31. {
  32. $this->_column = $column;
  33. return $this;
  34. }
  35. /**
  36. * @return Column
  37. */
  38. public function getColumn()
  39. {
  40. return $this->_column;
  41. }
  42. /**
  43. * Renders grid column
  44. *
  45. * @param Object $row
  46. * @return string
  47. */
  48. public function render(DataObject $row)
  49. {
  50. if ($this->getColumn()->getEditable()) {
  51. $result = '<div class="admin__grid-control">';
  52. $result .= $this->getColumn()->getEditOnly() ? ''
  53. : '<span class="admin__grid-control-value">' . $this->_getValue($row) . '</span>';
  54. return $result . $this->_getInputValueElement($row) . '</div>' ;
  55. }
  56. return $this->_getValue($row);
  57. }
  58. /**
  59. * Render column for export
  60. *
  61. * @param Object $row
  62. * @return string
  63. */
  64. public function renderExport(DataObject $row)
  65. {
  66. return $this->render($row);
  67. }
  68. /**
  69. * @param Object $row
  70. * @return mixed
  71. */
  72. protected function _getValue(DataObject $row)
  73. {
  74. if ($getter = $this->getColumn()->getGetter()) {
  75. if (is_string($getter)) {
  76. return $row->{$getter}();
  77. } elseif (is_callable($getter)) {
  78. return call_user_func($getter, $row);
  79. }
  80. return '';
  81. }
  82. return $row->getData($this->getColumn()->getIndex());
  83. }
  84. /**
  85. * @param Object $row
  86. * @return string
  87. */
  88. public function _getInputValueElement(DataObject $row)
  89. {
  90. return '<input type="text" class="input-text ' .
  91. $this->getColumn()->getValidateClass() .
  92. '" name="' .
  93. $this->getColumn()->getId() .
  94. '" value="' .
  95. $this->_getInputValue(
  96. $row
  97. ) . '"/>';
  98. }
  99. /**
  100. * @param Object $row
  101. * @return mixed
  102. */
  103. protected function _getInputValue(DataObject $row)
  104. {
  105. return $this->_getValue($row);
  106. }
  107. /**
  108. * @return string
  109. */
  110. public function renderHeader()
  111. {
  112. if (false !== $this->getColumn()->getSortable()) {
  113. $className = 'not-sort';
  114. $dir = strtolower($this->getColumn()->getDir());
  115. $nDir = $dir == 'asc' ? 'desc' : 'asc';
  116. if ($this->getColumn()->getDir()) {
  117. $className = '_' . $dir . 'end';
  118. }
  119. $out = '<th data-sort="' .
  120. $this->getColumn()->getId() .
  121. '" data-direction="' .
  122. $nDir .
  123. '" class="data-grid-th _sortable ' .
  124. $className . ' ' .
  125. $this->getColumn()->getHeaderCssClass() .
  126. '"><span>' .
  127. $this->getColumn()->getHeader() .
  128. '</span></th>';
  129. } else {
  130. $out = '<th class="data-grid-th ' .
  131. $this->getColumn()->getHeaderCssClass() . '"><span>' .
  132. $this->getColumn()->getHeader() .
  133. '</span></th>';
  134. }
  135. return $out;
  136. }
  137. /**
  138. * @return string
  139. */
  140. public function renderProperty()
  141. {
  142. $out = '';
  143. $width = $this->_defaultWidth;
  144. if ($this->getColumn()->hasData('width')) {
  145. $customWidth = $this->getColumn()->getData('width');
  146. if (null === $customWidth || preg_match('/^[0-9]+%?$/', $customWidth)) {
  147. $width = $customWidth;
  148. } elseif (preg_match('/^([0-9]+)px$/', $customWidth, $matches)) {
  149. $width = (int)$matches[1];
  150. }
  151. }
  152. if (null !== $width) {
  153. $out .= ' width="' . $width . '"';
  154. }
  155. return $out;
  156. }
  157. /**
  158. * @return string
  159. */
  160. public function renderCss()
  161. {
  162. return $this->getColumn()->getCssClass();
  163. }
  164. }