Items.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. /**
  7. * @author Magento Core Team <core@magentocommerce.com>
  8. */
  9. namespace Magento\Sales\Block\Order;
  10. /**
  11. * Sales order view items block.
  12. *
  13. * @api
  14. * @since 100.0.2
  15. */
  16. class Items extends \Magento\Sales\Block\Items\AbstractItems
  17. {
  18. /**
  19. * Core registry
  20. *
  21. * @var \Magento\Framework\Registry
  22. */
  23. protected $_coreRegistry = null;
  24. /**
  25. * Order items per page.
  26. *
  27. * @var int
  28. */
  29. private $itemsPerPage;
  30. /**
  31. * @var \Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory
  32. */
  33. private $itemCollectionFactory;
  34. /**
  35. * @var \Magento\Sales\Model\ResourceModel\Order\Item\Collection|null
  36. */
  37. private $itemCollection;
  38. /**
  39. * @param \Magento\Framework\View\Element\Template\Context $context
  40. * @param \Magento\Framework\Registry $registry
  41. * @param array $data
  42. * @param \Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory|null $itemCollectionFactory
  43. */
  44. public function __construct(
  45. \Magento\Framework\View\Element\Template\Context $context,
  46. \Magento\Framework\Registry $registry,
  47. array $data = [],
  48. \Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory $itemCollectionFactory = null
  49. ) {
  50. $this->_coreRegistry = $registry;
  51. $this->itemCollectionFactory = $itemCollectionFactory ?: \Magento\Framework\App\ObjectManager::getInstance()
  52. ->get(\Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory::class);
  53. parent::__construct($context, $data);
  54. }
  55. /**
  56. * Init pager block and item collection with page size and current page number
  57. *
  58. * @return $this
  59. * @since 100.1.7
  60. */
  61. protected function _prepareLayout()
  62. {
  63. $this->itemsPerPage = $this->_scopeConfig->getValue('sales/orders/items_per_page');
  64. $this->itemCollection = $this->itemCollectionFactory->create();
  65. $this->itemCollection->setOrderFilter($this->getOrder());
  66. /** @var \Magento\Theme\Block\Html\Pager $pagerBlock */
  67. $pagerBlock = $this->getChildBlock('sales_order_item_pager');
  68. if ($pagerBlock) {
  69. $pagerBlock->setLimit($this->itemsPerPage);
  70. //here pager updates collection parameters
  71. $pagerBlock->setCollection($this->itemCollection);
  72. $pagerBlock->setAvailableLimit([$this->itemsPerPage]);
  73. $pagerBlock->setShowAmounts($this->isPagerDisplayed());
  74. }
  75. return parent::_prepareLayout();
  76. }
  77. /**
  78. * Determine if the pager should be displayed for order items list.
  79. *
  80. * To be called from templates(after _prepareLayout()).
  81. *
  82. * @return bool
  83. * @since 100.1.7
  84. */
  85. public function isPagerDisplayed()
  86. {
  87. $pagerBlock = $this->getChildBlock('sales_order_item_pager');
  88. return $pagerBlock && ($this->itemCollection->getSize() > $this->itemsPerPage);
  89. }
  90. /**
  91. * Get visible items for current page.
  92. *
  93. * To be called from templates(after _prepareLayout()).
  94. *
  95. * @return \Magento\Framework\DataObject[]
  96. * @since 100.1.7
  97. */
  98. public function getItems()
  99. {
  100. return $this->itemCollection->getItems();
  101. }
  102. /**
  103. * Get pager HTML according to our requirements.
  104. *
  105. * To be called from templates(after _prepareLayout()).
  106. *
  107. * @return string HTML output
  108. * @since 100.1.7
  109. */
  110. public function getPagerHtml()
  111. {
  112. /** @var \Magento\Theme\Block\Html\Pager $pagerBlock */
  113. $pagerBlock = $this->getChildBlock('sales_order_item_pager');
  114. return $pagerBlock ? $pagerBlock->toHtml() : '';
  115. }
  116. /**
  117. * Retrieve current order model instance
  118. *
  119. * @return \Magento\Sales\Model\Order
  120. */
  121. public function getOrder()
  122. {
  123. return $this->_coreRegistry->registry('current_order');
  124. }
  125. }