_rewriteFactory = $rewriteFactory; $this->_adminhtmlData = $adminhtmlData; parent::__construct($context, $data); } /** * Prepare URL rewrite editing layout * * @return $this */ protected function _prepareLayout() { $this->setTemplate('Magento_UrlRewrite::edit.phtml'); $this->_addBackButton(); $this->_prepareLayoutFeatures(); return parent::_prepareLayout(); } /** * Prepare featured blocks for layout of URL rewrite editing * * @return void */ protected function _prepareLayoutFeatures() { if ($this->_getUrlRewrite()->getId()) { $this->_headerText = __('Edit URL Rewrite'); } else { $this->_headerText = __('Add New URL Rewrite'); } $this->_addUrlRewriteSelectorBlock(); $this->_addEditFormBlock(); } /** * Add child edit form block * * @return void */ protected function _addEditFormBlock() { $this->setChild('form', $this->_createEditFormBlock()); if ($this->_getUrlRewrite()->getId()) { $this->_addResetButton(); $this->_addDeleteButton(); } $this->_addSaveButton(); } /** * Add reset button * * @return void */ protected function _addResetButton() { $this->addButton( 'reset', [ 'label' => __('Reset'), 'onclick' => 'location.reload();', 'class' => 'scalable', 'level' => -1 ] ); } /** * Add back button * * @return void */ protected function _addBackButton() { $this->addButton( 'back', [ 'label' => __('Back'), 'onclick' => 'setLocation(\'' . $this->_adminhtmlData->getUrl('adminhtml/*/') . '\')', 'class' => 'back', 'level' => -1 ] ); } /** * Update Back button location link * * @param string $link * @return void */ protected function _updateBackButtonLink($link) { $this->updateButton('back', 'onclick', 'setLocation(\'' . $link . '\')'); } /** * Add delete button * * @return void */ protected function _addDeleteButton() { $this->addButton( 'delete', [ 'label' => __('Delete'), 'onclick' => 'deleteConfirm(' . json_encode(__('Are you sure you want to do this?')) . ',' . json_encode( $this->_adminhtmlData->getUrl( 'adminhtml/*/delete', ['id' => $this->getUrlRewrite()->getId()] ) ) . ', {data: {}})', 'class' => 'scalable delete', 'level' => -1 ] ); } /** * Add save button * * @return void */ protected function _addSaveButton() { $this->addButton( 'save', [ 'label' => __('Save'), 'class' => 'save primary save-url-rewrite', 'level' => -1, 'data_attribute' => [ 'mage-init' => ['button' => ['event' => 'save', 'target' => '#edit_form']], ] ] ); } /** * Creates edit form block * * @return \Magento\UrlRewrite\Block\Edit\Form */ protected function _createEditFormBlock() { return $this->getLayout()->createBlock( \Magento\UrlRewrite\Block\Edit\Form::class, '', ['data' => ['url_rewrite' => $this->_getUrlRewrite()]] ); } /** * Add child URL rewrite selector block * * @return void */ protected function _addUrlRewriteSelectorBlock() { $this->setChild('selector', $this->_getSelectorBlock()); } /** * Get selector block * * @return \Magento\UrlRewrite\Block\Selector */ private function _getSelectorBlock() { if (!$this->_selectorBlock) { $this->_selectorBlock = $this->getLayout()->createBlock(\Magento\UrlRewrite\Block\Selector::class); } return $this->_selectorBlock; } /** * Get container buttons HTML * * Since buttons are set as children, we remove them as children after generating them * not to duplicate them in future * * @param string|null $area * @return string * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function getButtonsHtml($area = null) { if (null === $this->_buttonsHtml) { $this->_buttonsHtml = parent::getButtonsHtml(); $layout = $this->getLayout(); foreach ($this->getChildNames() as $name) { $alias = $layout->getElementAlias($name); if (false !== strpos($alias, '_button')) { $layout->unsetChild($this->getNameInLayout(), $alias); } } } return $this->_buttonsHtml; } /** * Get or create new instance of URL rewrite * * @return \Magento\UrlRewrite\Model\UrlRewrite */ protected function _getUrlRewrite() { if (!$this->hasData('url_rewrite')) { $this->setUrlRewrite($this->_rewriteFactory->create()); } return $this->getUrlRewrite(); } }