/** * Return the start value for the limit part of the sql query that * retrieves the product list for the current product group page. * * @param int|bool $numberOfProducts The number of products to return * * @return int * * @author Sascha Koehler <*****@*****.**>, Sebastian Diel <*****@*****.**> * @since 23.11.2012 */ public function getSqlOffset($numberOfProducts = false) { $sqlOffsetKey = $numberOfProducts; if ($numberOfProducts === false) { $sqlOffsetKey = 'false'; } if (!array_key_exists($sqlOffsetKey, $this->sqlOffsets)) { $productsPerPage = $this->getProductsPerPageSetting(); if ($numberOfProducts !== false) { $productsPerPage = (int) $numberOfProducts; } if ($productsPerPage === SilvercartConfig::getProductsPerPageUnlimitedNumber()) { $SQL_start = 0; } else { if (!isset($_GET['start']) || !is_numeric($_GET['start']) || (int) $_GET['start'] < 1) { if (isset($_GET['offset'])) { // -------------------------------------------------------- // Use offset for getting the current item rage // -------------------------------------------------------- $offset = (int) $_GET['offset']; if ($offset > 0) { $offset -= 1; } // Prevent too high values if ($offset > 999999) { $offset = 0; } $SQL_start = $offset * $productsPerPage; } else { // -------------------------------------------------------- // Use item number for getting the current item range // -------------------------------------------------------- $SQL_start = 0; } } else { $SQL_start = (int) $_GET['start']; } } $this->sqlOffsets[$sqlOffsetKey] = $SQL_start; } return $this->sqlOffsets[$sqlOffsetKey]; }
/** * Returns the number of products per page according to where it is set. * Highest priority has the customer's configuration setting if available. * Next comes the shop owners setting for this page; if that's not * configured we use the global setting from SilvercartConfig. * * @return int */ public function getProductsPerPageSetting() { $productsPerPage = 0; $member = SilvercartCustomer::currentUser(); if ($member && $member->getSilvercartCustomerConfig() && $member->getSilvercartCustomerConfig()->productsPerPage !== null) { $productsPerPage = $member->getSilvercartCustomerConfig()->productsPerPage; if ($productsPerPage == 0) { $productsPerPage = SilvercartConfig::getProductsPerPageUnlimitedNumber(); } } else { if ($this->productsPerPage) { $productsPerPage = $this->productsPerPage; } else { $productsPerPage = SilvercartConfig::ProductsPerPage(); } } return $productsPerPage; }
/** * Returns the form fields for this form * * @param bool $withUpdate Call the method with decorator updates or not? * * @return array * * @author Sebastian Diel <*****@*****.**> * @since 13.09.2013 */ public function getFormFields($withUpdate = true) { if (!array_key_exists('SortOrder', $this->formFields)) { $productsPerPage = $this->controller->getProductsPerPageSetting(); if ($productsPerPage == SilvercartConfig::getProductsPerPageUnlimitedNumber()) { $productsPerPage = 0; } $product = singleton('SilvercartProduct'); $sortableFrontendFields = $product->sortableFrontendFields(); $sortableFrontendFieldValues = array_keys($sortableFrontendFields); $sortableFrontendFieldValues = array_flip($sortableFrontendFieldValues); if (!array_key_exists($product->getDefaultSort(), $sortableFrontendFieldValues)) { $sortableFrontendFieldValues[$product->getDefaultSort()] = 0; } $sortOrder = $sortableFrontendFieldValues[$product->getDefaultSort()]; $sortableFrontendFieldsForDropdown = array_values($sortableFrontendFields); asort($sortableFrontendFieldsForDropdown); $this->formFields = array('SortOrder' => array('type' => 'DropdownField', 'title' => _t('SilvercartProductGroupPageSelector.SORT_ORDER'), 'value' => $sortableFrontendFieldsForDropdown, 'selectedValue' => $sortOrder, 'checkRequirements' => array())); $productsPerPageOptions = SilvercartConfig::getProductsPerPageOptions(); if (!empty($productsPerPageOptions)) { $this->formFields['productsPerPage'] = array('type' => 'DropdownField', 'title' => _t('SilvercartProductGroupPageSelector.PRODUCTS_PER_PAGE'), 'value' => SilvercartConfig::getProductsPerPageOptions(), 'selectedValue' => $productsPerPage, 'checkRequirements' => array()); } else { $this->formFields['productsPerPage'] = array('type' => 'HiddenField', 'value' => SilvercartConfig::getProductsPerPageDefault()); } } return parent::getFormFields($withUpdate = true); }