123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Cms\Block\Adminhtml\Page\Widget;
- /**
- * CMS page chooser for Wysiwyg CMS widget
- *
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
- {
- /**
- * @var \Magento\Cms\Model\Page
- */
- protected $_cmsPage;
- /**
- * @var \Magento\Cms\Model\PageFactory
- */
- protected $_pageFactory;
- /**
- * @var \Magento\Cms\Model\ResourceModel\Page\CollectionFactory
- */
- protected $_collectionFactory;
- /**
- * @var \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface
- */
- protected $pageLayoutBuilder;
- /**
- * @param \Magento\Backend\Block\Template\Context $context
- * @param \Magento\Backend\Helper\Data $backendHelper
- * @param \Magento\Cms\Model\Page $cmsPage
- * @param \Magento\Cms\Model\PageFactory $pageFactory
- * @param \Magento\Cms\Model\ResourceModel\Page\CollectionFactory $collectionFactory
- * @param \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder
- * @param array $data
- */
- public function __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 = []
- ) {
- $this->pageLayoutBuilder = $pageLayoutBuilder;
- $this->_cmsPage = $cmsPage;
- $this->_pageFactory = $pageFactory;
- $this->_collectionFactory = $collectionFactory;
- parent::__construct($context, $backendHelper, $data);
- }
- /**
- * Block construction, prepare grid params
- *
- * @return void
- */
- protected function _construct()
- {
- parent::_construct();
- //$this->setDefaultSort('name');
- $this->setUseAjax(true);
- $this->setDefaultFilter(['chooser_is_active' => '1']);
- }
- /**
- * Prepare chooser element HTML
- *
- * @param \Magento\Framework\Data\Form\Element\AbstractElement $element Form Element
- * @return \Magento\Framework\Data\Form\Element\AbstractElement
- */
- public function prepareElementHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element)
- {
- $uniqId = $this->mathRandom->getUniqueHash($element->getId());
- $sourceUrl = $this->getUrl('cms/page_widget/chooser', ['uniq_id' => $uniqId]);
- $chooser = $this->getLayout()->createBlock(
- \Magento\Widget\Block\Adminhtml\Widget\Chooser::class
- )->setElement(
- $element
- )->setConfig(
- $this->getConfig()
- )->setFieldsetId(
- $this->getFieldsetId()
- )->setSourceUrl(
- $sourceUrl
- )->setUniqId(
- $uniqId
- );
- if ($element->getValue()) {
- $page = $this->_pageFactory->create()->load((int)$element->getValue());
- if ($page->getId()) {
- $chooser->setLabel($this->escapeHtml($page->getTitle()));
- }
- }
- $element->setData('after_element_html', $chooser->toHtml());
- return $element;
- }
- /**
- * Grid Row JS Callback
- *
- * @return string
- */
- public function getRowClickCallback()
- {
- $chooserJsObject = $this->getId();
- $js = '
- function (grid, event) {
- var trElement = Event.findElement(event, "tr");
- var pageTitle = trElement.down("td").next().innerHTML;
- var pageId = trElement.down("td").innerHTML.replace(/^\s+|\s+$/g,"");
- ' .
- $chooserJsObject .
- '.setElementValue(pageId);
- ' .
- $chooserJsObject .
- '.setElementLabel(pageTitle);
- ' .
- $chooserJsObject .
- '.close();
- }
- ';
- return $js;
- }
- /**
- * Prepare pages collection
- *
- * @return \Magento\Backend\Block\Widget\Grid\Extended
- */
- protected function _prepareCollection()
- {
- $collection = $this->_collectionFactory->create();
- /* @var $collection \Magento\Cms\Model\ResourceModel\Page\CollectionFactory */
- $collection->setFirstStoreFlag(true);
- $this->setCollection($collection);
- return parent::_prepareCollection();
- }
- /**
- * Prepare columns for pages grid
- *
- * @return $this
- */
- protected function _prepareColumns()
- {
- $this->addColumn(
- 'chooser_id',
- [
- 'header' => __('ID'),
- 'index' => 'page_id',
- 'header_css_class' => 'col-id',
- 'column_css_class' => 'col-id'
- ]
- );
- $this->addColumn(
- 'chooser_title',
- [
- 'header' => __('Title'),
- 'index' => 'title',
- 'header_css_class' => 'col-title',
- 'column_css_class' => 'col-title'
- ]
- );
- $this->addColumn(
- 'chooser_identifier',
- [
- 'header' => __('URL Key'),
- 'index' => 'identifier',
- 'header_css_class' => 'col-url',
- 'column_css_class' => 'col-url'
- ]
- );
- $this->addColumn(
- 'chooser_page_layout',
- [
- 'header' => __('Layout'),
- 'index' => 'page_layout',
- 'type' => 'options',
- 'options' => $this->pageLayoutBuilder->getPageLayoutsConfig()->getOptions(),
- 'header_css_class' => 'col-layout',
- 'column_css_class' => 'col-layout'
- ]
- );
- $this->addColumn(
- 'chooser_is_active',
- [
- 'header' => __('Status'),
- 'index' => 'is_active',
- 'type' => 'options',
- 'options' => $this->_cmsPage->getAvailableStatuses(),
- 'header_css_class' => 'col-status',
- 'column_css_class' => 'col-status'
- ]
- );
- return parent::_prepareColumns();
- }
- /**
- * Get grid url
- *
- * @return string
- */
- public function getGridUrl()
- {
- return $this->getUrl('cms/page_widget/chooser', ['_current' => true]);
- }
- }
|