Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Chooser.php
Go to the documentation of this file.
1 <?php
7 
13 class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
14 {
18  protected $_cmsPage;
19 
23  protected $_pageFactory;
24 
29 
33  protected $pageLayoutBuilder;
34 
44  public function __construct(
45  \Magento\Backend\Block\Template\Context $context,
46  \Magento\Backend\Helper\Data $backendHelper,
47  \Magento\Cms\Model\Page $cmsPage,
48  \Magento\Cms\Model\PageFactory $pageFactory,
49  \Magento\Cms\Model\ResourceModel\Page\CollectionFactory $collectionFactory,
50  \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder,
51  array $data = []
52  ) {
53  $this->pageLayoutBuilder = $pageLayoutBuilder;
54  $this->_cmsPage = $cmsPage;
55  $this->_pageFactory = $pageFactory;
56  $this->_collectionFactory = $collectionFactory;
57  parent::__construct($context, $backendHelper, $data);
58  }
59 
65  protected function _construct()
66  {
67  parent::_construct();
68  //$this->setDefaultSort('name');
69  $this->setUseAjax(true);
70  $this->setDefaultFilter(['chooser_is_active' => '1']);
71  }
72 
79  public function prepareElementHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element)
80  {
81  $uniqId = $this->mathRandom->getUniqueHash($element->getId());
82  $sourceUrl = $this->getUrl('cms/page_widget/chooser', ['uniq_id' => $uniqId]);
83 
84  $chooser = $this->getLayout()->createBlock(
85  \Magento\Widget\Block\Adminhtml\Widget\Chooser::class
86  )->setElement(
87  $element
88  )->setConfig(
89  $this->getConfig()
90  )->setFieldsetId(
91  $this->getFieldsetId()
92  )->setSourceUrl(
93  $sourceUrl
94  )->setUniqId(
95  $uniqId
96  );
97 
98  if ($element->getValue()) {
99  $page = $this->_pageFactory->create()->load((int)$element->getValue());
100  if ($page->getId()) {
101  $chooser->setLabel($this->escapeHtml($page->getTitle()));
102  }
103  }
104 
105  $element->setData('after_element_html', $chooser->toHtml());
106  return $element;
107  }
108 
114  public function getRowClickCallback()
115  {
116  $chooserJsObject = $this->getId();
117  $js = '
118  function (grid, event) {
119  var trElement = Event.findElement(event, "tr");
120  var pageTitle = trElement.down("td").next().innerHTML;
121  var pageId = trElement.down("td").innerHTML.replace(/^\s+|\s+$/g,"");
122  ' .
123  $chooserJsObject .
124  '.setElementValue(pageId);
125  ' .
126  $chooserJsObject .
127  '.setElementLabel(pageTitle);
128  ' .
129  $chooserJsObject .
130  '.close();
131  }
132  ';
133  return $js;
134  }
135 
141  protected function _prepareCollection()
142  {
143  $collection = $this->_collectionFactory->create();
144  /* @var $collection \Magento\Cms\Model\ResourceModel\Page\CollectionFactory */
145  $collection->setFirstStoreFlag(true);
146  $this->setCollection($collection);
147 
148  return parent::_prepareCollection();
149  }
150 
156  protected function _prepareColumns()
157  {
158  $this->addColumn(
159  'chooser_id',
160  [
161  'header' => __('ID'),
162  'index' => 'page_id',
163  'header_css_class' => 'col-id',
164  'column_css_class' => 'col-id'
165  ]
166  );
167 
168  $this->addColumn(
169  'chooser_title',
170  [
171  'header' => __('Title'),
172  'index' => 'title',
173  'header_css_class' => 'col-title',
174  'column_css_class' => 'col-title'
175  ]
176  );
177 
178  $this->addColumn(
179  'chooser_identifier',
180  [
181  'header' => __('URL Key'),
182  'index' => 'identifier',
183  'header_css_class' => 'col-url',
184  'column_css_class' => 'col-url'
185  ]
186  );
187 
188  $this->addColumn(
189  'chooser_page_layout',
190  [
191  'header' => __('Layout'),
192  'index' => 'page_layout',
193  'type' => 'options',
194  'options' => $this->pageLayoutBuilder->getPageLayoutsConfig()->getOptions(),
195  'header_css_class' => 'col-layout',
196  'column_css_class' => 'col-layout'
197  ]
198  );
199 
200  $this->addColumn(
201  'chooser_is_active',
202  [
203  'header' => __('Status'),
204  'index' => 'is_active',
205  'type' => 'options',
206  'options' => $this->_cmsPage->getAvailableStatuses(),
207  'header_css_class' => 'col-status',
208  'column_css_class' => 'col-status'
209  ]
210  );
211 
212  return parent::_prepareColumns();
213  }
214 
220  public function getGridUrl()
221  {
222  return $this->getUrl('cms/page_widget/chooser', ['_current' => true]);
223  }
224 }
prepareElementHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element)
Definition: Chooser.php:79
__()
Definition: __.php:13
$page
Definition: pages.php:8
__construct(\Magento\Backend\Block\Template\Context $context, \Magento\Backend\Helper\Data $backendHelper, \Magento\Cms\Model\Page $cmsPage, \Magento\Cms\Model\PageFactory $pageFactory, \Magento\Cms\Model\ResourceModel\Page\CollectionFactory $collectionFactory, \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder, array $data=[])
Definition: Chooser.php:44
$element
Definition: element.phtml:12