AbstractItems.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Block\Items;
  7. /**
  8. * Abstract block for display sales (quote/order/invoice etc.) items
  9. *
  10. * @author Magento Core Team <core@magentocommerce.com>
  11. * @SuppressWarnings(PHPMD.NumberOfChildren)
  12. */
  13. class AbstractItems extends \Magento\Framework\View\Element\Template
  14. {
  15. /**
  16. * Block alias fallback
  17. */
  18. const DEFAULT_TYPE = 'default';
  19. /**
  20. * Retrieve item renderer block
  21. *
  22. * @param string $type
  23. * @return \Magento\Framework\View\Element\AbstractBlock
  24. * @throws \RuntimeException
  25. * @SuppressWarnings(PHPMD.NPathComplexity)
  26. */
  27. public function getItemRenderer($type)
  28. {
  29. /** @var \Magento\Framework\View\Element\RendererList $rendererList */
  30. $rendererList = $this->getRendererListName() ? $this->getLayout()->getBlock(
  31. $this->getRendererListName()
  32. ) : $this->getChildBlock(
  33. 'renderer.list'
  34. );
  35. if (!$rendererList) {
  36. throw new \RuntimeException('Renderer list for block "' . $this->getNameInLayout() . '" is not defined');
  37. }
  38. $overriddenTemplates = $this->getOverriddenTemplates() ?: [];
  39. $template = isset($overriddenTemplates[$type]) ? $overriddenTemplates[$type] : $this->getRendererTemplate();
  40. $renderer = $rendererList->getRenderer($type, self::DEFAULT_TYPE, $template);
  41. $renderer->setRenderedBlock($this);
  42. return $renderer;
  43. }
  44. /**
  45. * Prepare item before output
  46. *
  47. * @param \Magento\Framework\View\Element\AbstractBlock $renderer
  48. * @return $this
  49. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  50. */
  51. protected function _prepareItem(\Magento\Framework\View\Element\AbstractBlock $renderer)
  52. {
  53. return $this;
  54. }
  55. /**
  56. * Return product type for quote/order item
  57. *
  58. * @param \Magento\Framework\DataObject $item
  59. * @return string
  60. */
  61. protected function _getItemType(\Magento\Framework\DataObject $item)
  62. {
  63. if ($item->getOrderItem()) {
  64. $type = $item->getOrderItem()->getProductType();
  65. } elseif ($item instanceof \Magento\Quote\Model\Quote\Address\Item) {
  66. $type = $item->getQuoteItem()->getProductType();
  67. } else {
  68. $type = $item->getProductType();
  69. }
  70. return $type;
  71. }
  72. /**
  73. * Get item row html
  74. *
  75. * @param \Magento\Framework\DataObject $item
  76. * @return string
  77. */
  78. public function getItemHtml(\Magento\Framework\DataObject $item)
  79. {
  80. $type = $this->_getItemType($item);
  81. $block = $this->getItemRenderer($type)->setItem($item);
  82. $this->_prepareItem($block);
  83. return $block->toHtml();
  84. }
  85. }