![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-checkout/Block/Cart/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Checkout\Block\Cart; /** * Block on checkout/cart/index page to display a pager on the cart items grid * The pager will be displayed if items quantity in the shopping cart > than number from * Store->Configuration->Sales->Checkout->Shopping Cart->Number of items to display pager and * custom_items weren't set to cart block * * @api * @since 100.1.7 */ class Grid extends \Magento\Checkout\Block\Cart { /** * Config settings path to determine when pager on checkout/cart/index will be visible */ const XPATH_CONFIG_NUMBER_ITEMS_TO_DISPLAY_PAGER = 'checkout/cart/number_items_to_display_pager'; /** * @var \Magento\Quote\Model\ResourceModel\Quote\Item\Collection */ private $itemsCollection; /** * @var \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory * */ private $itemCollectionFactory; /** * @var \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface */ private $joinAttributeProcessor; /** * Is display pager on shopping cart page * * @var bool */ private $isPagerDisplayed; /** * Grid constructor. * @param \Magento\Framework\View\Element\Template\Context $context * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Checkout\Model\Session $checkoutSession * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrlBuilder * @param \Magento\Checkout\Helper\Cart $cartHelper * @param \Magento\Framework\App\Http\Context $httpContext * @param \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory $itemCollectionFactory * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor * @param array $data */ public function __construct( \Magento\Framework\View\Element\Template\Context $context, \Magento\Customer\Model\Session $customerSession, \Magento\Checkout\Model\Session $checkoutSession, \Magento\Catalog\Model\ResourceModel\Url $catalogUrlBuilder, \Magento\Checkout\Helper\Cart $cartHelper, \Magento\Framework\App\Http\Context $httpContext, \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory $itemCollectionFactory, \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor, array $data = [] ) { $this->itemCollectionFactory = $itemCollectionFactory; $this->joinAttributeProcessor = $joinProcessor; parent::__construct( $context, $customerSession, $checkoutSession, $catalogUrlBuilder, $cartHelper, $httpContext, $data ); } /** * Prepare Quote Item Product URLs * When we don't have custom_items, items URLs will be collected for Collection limited by pager * Pager limit on checkout/cart/index is determined by configuration * Configuration path is Store->Configuration->Sales->Checkout->Shopping Cart->Number of items to display pager * * @return void * @since 100.1.7 */ protected function _construct() { if (!$this->isPagerDisplayedOnPage()) { parent::_construct(); } if ($this->hasData('template')) { $this->setTemplate($this->getData('template')); } } /** * {@inheritdoc} * @since 100.1.7 */ protected function _prepareLayout() { parent::_prepareLayout(); if ($this->isPagerDisplayedOnPage()) { $availableLimit = (int)$this->_scopeConfig->getValue( self::XPATH_CONFIG_NUMBER_ITEMS_TO_DISPLAY_PAGER, \Magento\Store\Model\ScopeInterface::SCOPE_STORE ); $itemsCollection = $this->getItemsForGrid(); /** @var \Magento\Theme\Block\Html\Pager $pager */ $pager = $this->getLayout()->createBlock(\Magento\Theme\Block\Html\Pager::class); $pager->setAvailableLimit([$availableLimit => $availableLimit])->setCollection($itemsCollection); $this->setChild('pager', $pager); $itemsCollection->load(); $this->prepareItemUrls(); } return $this; } /** * Prepare quote items collection for pager * * @return \Magento\Quote\Model\ResourceModel\Quote\Item\Collection * @since 100.1.7 */ public function getItemsForGrid() { if (!$this->itemsCollection) { /** @var \Magento\Quote\Model\ResourceModel\Quote\Item\Collection $itemCollection */ $itemCollection = $this->itemCollectionFactory->create(); $itemCollection->setQuote($this->getQuote()); $itemCollection->addFieldToFilter('parent_item_id', ['null' => true]); $this->joinAttributeProcessor->process($itemCollection); $this->itemsCollection = $itemCollection; } return $this->itemsCollection; } /** * {@inheritdoc} * @since 100.1.7 */ public function getItems() { if (!$this->isPagerDisplayedOnPage()) { return parent::getItems(); } return $this->getItemsForGrid()->getItems(); } /** * Verify if display pager on shopping cart * If cart block has custom_items and items qty in the shopping cart<limit from stores configuration * * @return bool */ private function isPagerDisplayedOnPage() { if (!$this->isPagerDisplayed) { $availableLimit = (int)$this->_scopeConfig->getValue( self::XPATH_CONFIG_NUMBER_ITEMS_TO_DISPLAY_PAGER, \Magento\Store\Model\ScopeInterface::SCOPE_STORE ); $this->isPagerDisplayed = !$this->getCustomItems() && $availableLimit < $this->getItemsCount(); } return $this->isPagerDisplayed; } }