Toolbar.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Backend\Block\Widget\Button;
  7. use Magento\Framework\View\LayoutInterface;
  8. class Toolbar implements ToolbarInterface
  9. {
  10. /**
  11. * {@inheritdoc}
  12. */
  13. public function pushButtons(
  14. \Magento\Framework\View\Element\AbstractBlock $context,
  15. \Magento\Backend\Block\Widget\Button\ButtonList $buttonList
  16. ) {
  17. foreach ($buttonList->getItems() as $buttons) {
  18. /** @var \Magento\Backend\Block\Widget\Button\Item $item */
  19. foreach ($buttons as $item) {
  20. $containerName = $context->getNameInLayout() . '-' . $item->getButtonKey();
  21. $container = $this->createContainer($context->getLayout(), $containerName, $item);
  22. if ($item->hasData('name')) {
  23. $item->setData('element_name', $item->getName());
  24. }
  25. if ($container) {
  26. $container->setContext($context);
  27. $toolbar = $this->getToolbar($context, $item->getRegion());
  28. $toolbar->setChild($item->getButtonKey(), $container);
  29. }
  30. }
  31. }
  32. }
  33. /**
  34. * Create button container
  35. *
  36. * @param \Magento\Framework\View\LayoutInterface $layout
  37. * @param string $containerName
  38. * @param \Magento\Backend\Block\Widget\Button\Item $buttonItem
  39. * @return \Magento\Backend\Block\Widget\Button\Toolbar\Container
  40. */
  41. protected function createContainer(LayoutInterface $layout, $containerName, $buttonItem)
  42. {
  43. $container = $layout->createBlock(
  44. \Magento\Backend\Block\Widget\Button\Toolbar\Container::class,
  45. $containerName,
  46. ['data' => ['button_item' => $buttonItem]]
  47. );
  48. return $container;
  49. }
  50. /**
  51. * Return button parent block
  52. *
  53. * @param \Magento\Framework\View\Element\AbstractBlock $context
  54. * @param string $region
  55. * @return \Magento\Backend\Block\Template
  56. */
  57. protected function getToolbar(\Magento\Framework\View\Element\AbstractBlock $context, $region)
  58. {
  59. $parent = null;
  60. $layout = $context->getLayout();
  61. if (!$region || $region == 'header' || $region == 'footer') {
  62. $parent = $context;
  63. } elseif ($region == 'toolbar') {
  64. $parent = $layout->getBlock('page.actions.toolbar');
  65. } else {
  66. $parent = $layout->getBlock($region);
  67. }
  68. if ($parent) {
  69. return $parent;
  70. }
  71. return $context;
  72. }
  73. }