Exemplo n.º 1
0
 /**
  * Returns if this category has products with stock.
  *
  * @return bool TRUE, if this category has products with stock, FALSE if not
  */
 public function hasProductsWithStock()
 {
     $result = false;
     if ($this->hasProducts()) {
         $result = !empty(\CommerceTeam\Commerce\Utility\GeneralUtility::removeNoStockProducts($this->getProducts(), 0));
     }
     return $result;
 }
Exemplo n.º 2
0
 /**
  * Makes the list view for the current categorys.
  *
  * @return string the content for the list view
  */
 public function makeListView()
 {
     /*
      * Category LIST
      */
     $categoryOutput = '';
     $this->template = $this->templateCode;
     if ($this->category->hasSubcategories()) {
         /**
          * Category.
          *
          * @var Category $oneCategory
          */
         foreach ($this->category->getChildCategories() as $oneCategory) {
             $oneCategory->loadData();
             $this->currentCategory =& $oneCategory;
             if ($this->conf['hideEmptyCategories'] == 1) {
                 // First check TS setting (ceap)
                 // afterwards do the recursive call (expensive)
                 if (!$oneCategory->hasProductsInSubCategories() || $this->conf['useStockHandling'] && !$oneCategory->hasProductsWithStock()) {
                     // This category is empty, so
                     // skip this iteration and do next
                     continue;
                 }
             }
             $linkArray = array();
             $linkArray['catUid'] = $oneCategory->getUid();
             $linkArray['showUid'] = '';
             if ($this->useRootlineInformationToUrl == 1) {
                 $linkArray['path'] = $this->getPathCat($oneCategory);
                 $linkArray['mDepth'] = $this->mDepth;
             } else {
                 $linkArray['mDepth'] = '';
                 $linkArray['path'] = '';
             }
             if ($this->basketHashValue) {
                 $linkArray['basketHashValue'] = $this->basketHashValue;
             }
             /*
              *  Build TS for Linking the Catergory Images
              */
             $localTs = $this->conf['categoryListView.']['categories.'];
             if ($this->conf['listPid']) {
                 $typoLinkConf['parameter'] = $this->conf['listPid'];
             } elseif ($this->conf['overridePid']) {
                 $typoLinkConf['parameter'] = $this->conf['overridePid'];
             } else {
                 $typoLinkConf['parameter'] = $this->pid;
             }
             $typoLinkConf['useCacheHash'] = 1;
             $typoLinkConf['additionalParams'] = $this->argSeparator . $this->prefixId . '[catUid]=' . $oneCategory->getUid();
             $productArray = $oneCategory->getProducts((int) $this->conf['groupProductsByCategoryMaxDepth']);
             if ($this->conf['displayProductIfOneProduct'] == 1 && count($productArray) == 1) {
                 $typoLinkConf['additionalParams'] .= $this->argSeparator . $this->prefixId . '[showUid]=' . $productArray[0];
             } else {
                 $typoLinkConf['additionalParams'] .= $this->argSeparator . $this->prefixId . '[showUid]=';
             }
             if ($this->useRootlineInformationToUrl == 1) {
                 $typoLinkConf['additionalParams'] .= $this->argSeparator . $this->prefixId . '[path]=' . $this->getPathCat($oneCategory);
                 $typoLinkConf['additionalParams'] .= $this->argSeparator . $this->prefixId . '[mDepth]=' . $this->mDepth;
             }
             if ($this->basketHashValue) {
                 $typoLinkConf['additionalParams'] .= $this->argSeparator . $this->prefixId . '[basketHashValue]=' . $this->basketHashValue;
             }
             $localTs['fields.']['images.']['stdWrap.']['typolink.'] = $typoLinkConf;
             $localTs['fields.']['teaserimages.']['stdWrap.']['typolink.'] = $typoLinkConf;
             $localTs = $this->addTypoLinkToTypoScript($localTs, $typoLinkConf);
             $tmpCategory = $this->renderCategory($oneCategory, '###CATEGORY_LIST_ITEM###', $localTs, 'ITEM');
             /*
              * Build the link
              *
              * @deprecated
              * Please use TYPOLINK instead
              */
             $linkContent = $this->cObj->getSubpart($tmpCategory, '###CATEGORY_ITEM_DETAILLINK###');
             if ($linkContent) {
                 $link = $this->pi_linkTP_keepPIvars($linkContent, $linkArray, true, 0, $this->conf['overridePid']);
             } else {
                 $link = '';
             }
             $tmpCategory = $this->cObj->substituteSubpart($tmpCategory, '###CATEGORY_ITEM_DETAILLINK###', $link);
             if ($this->conf['groupProductsByCategory'] && !$this->conf['hideProductsInList'] && !$this->conf['hideProductsInSubcategories']) {
                 if ($this->conf['useStockHandling'] == 1) {
                     $productArray = \CommerceTeam\Commerce\Utility\GeneralUtility::removeNoStockProducts($productArray, $this->conf['products.']['showWithNoStock']);
                 }
                 $productArray = array_slice($productArray, 0, $this->conf['numberProductsInSubCategory']);
                 $productList = $this->renderProductsForList($productArray, $this->conf['templateMarker.']['categoryProductList.'], $this->conf['templateMarker.']['categoryProductListIterations']);
                 /*
                  * Insert the Productlist
                  */
                 $tmpCategory = $this->cObj->substituteMarker($tmpCategory, '###CATEGORY_ITEM_PRODUCTLIST###', $productList);
             } else {
                 $tmpCategory = $this->cObj->substituteMarker($tmpCategory, '###CATEGORY_ITEM_PRODUCTLIST###', '');
             }
             $categoryOutput .= $tmpCategory;
         }
     }
     $categoryListSubpart = $this->cObj->getSubpart($this->template, '###CATEGORY_LIST###');
     $markerArray['CATEGORY_SUB_LIST'] = $this->cObj->substituteSubpart($categoryListSubpart, '###CATEGORY_LIST_ITEM###', $categoryOutput);
     $startPoint = $this->piVars['pointer'] ? $this->internal['results_at_a_time'] * $this->piVars['pointer'] : 0;
     // Display TopProducts???
     // for this, make a few basicSettings for pageBrowser
     $internalStartPoint = $startPoint;
     $internalResults = $this->internal['results_at_a_time'];
     // set Empty default
     $markerArray['SUBPART_CATEGORY_ITEMS_LISTVIEW_TOP'] = '';
     if (!$this->conf['groupProductsByCategory'] && $this->conf['displayTopProducts'] && $this->conf['numberOfTopproducts']) {
         $this->top_products = array_slice($this->category_products, $startPoint, $this->conf['numberOfTopproducts']);
         $internalStartPoint = $startPoint + $this->conf['numberOfTopproducts'];
         $internalResults = $this->internal['results_at_a_time'] - $this->conf['numberOfTopproducts'];
         $markerArray['SUBPART_CATEGORY_ITEMS_LISTVIEW_TOP'] = $this->renderProductsForList($this->top_products, $this->conf['templateMarker.']['categoryProductListTop.'], $this->conf['templateMarker.']['categoryProductListTopIterations'], $this->conf['topProductTSMarker']);
     }
     // ###################### product list ######################
     if (is_array($this->category_products)) {
         $this->category_products = array_slice($this->category_products, $internalStartPoint, $internalResults);
     }
     if (!$this->conf['hideProductsInList']) {
         if (isset($this->piVars['showUid'])) {
             $this->piVars['showUid'] = '';
         }
         // Write the current page to The session to have a back to last product link
         $this->getFrontendUser()->setKey('ses', 'tx_commerce_lastproducturl', $this->pi_linkTP_keepPIvars_url(array(), 1));
         $markerArray['SUBPART_CATEGORY_ITEMS_LISTVIEW'] = $this->renderProductsForList($this->category_products, (array) $this->conf['templateMarker.']['categoryProductList.'], $this->conf['templateMarker.']['categoryProductListIterations']);
     }
     $templateMarker = '###' . strtoupper($this->conf['templateMarker.']['categoryView']) . '###';
     $markerArrayCat = $this->generateMarkerArray($this->category->returnAssocArray(), (array) $this->conf['singleView.']['categories.'], 'category_', 'tx_commerce_categories');
     $markerArray = array_merge($markerArrayCat, $markerArray);
     if ($this->conf['showPageBrowser'] == 1 && count($this->category_products) > $this->conf['maxRecords'] && is_array($this->conf['pageBrowser.']['wraps.'])) {
         $this->internal['pagefloat'] = (int) $this->piVars['pointer'];
         $this->internal['dontLinkActivePage'] = $this->conf['pageBrowser.']['dontLinkActivePage'];
         $this->internal['showFirstLast'] = $this->conf['pageBrowser.']['showFirstLast'];
         $this->internal['showRange'] = $this->conf['pageBrowser.']['showRange'];
         $hscText = !($this->conf['pageBrowser.']['hscText'] != 1);
         $markerArray['CATEGORY_BROWSEBOX'] = $this->pi_list_browseresults($this->conf['pageBrowser.']['showItemCount'], $this->conf['pageBrowser.']['tableParams.'], $this->conf['pageBrowser.']['wraps.'], 'pointer', $hscText);
     } else {
         $markerArray['CATEGORY_BROWSEBOX'] = '';
     }
     $hooks = HookFactory::getHooks('Controller/BaseController', 'makeListView');
     foreach ($hooks as $hook) {
         if (method_exists($hook, 'additionalMarker')) {
             $markerArray = $hook->additionalMarker($markerArray, $this);
         }
     }
     $markerArray = $this->addFormMarker($markerArray);
     $template = $this->cObj->getSubpart($this->templateCode, $templateMarker);
     $content = $this->cObj->substituteMarkerArray($template, $markerArray, '###|###', 1);
     $content = $this->cObj->substituteMarkerArray($content, $this->languageMarker);
     return $content;
 }
Exemplo n.º 3
0
 /**
  * Inits the main params for using in the script.
  *
  * @param array $conf Configuration
  *
  * @return void
  */
 public function init(array $conf = array())
 {
     parent::init($conf);
     // Merge default vars, if other prefix_id
     if ($this->prefixId != 'tx_commerce_pi1') {
         $generellRequestVars = GeneralUtility::_GP('tx_commerce');
         if (is_array($generellRequestVars)) {
             foreach ($generellRequestVars as $key => $value) {
                 if (empty($this->piVars[$key])) {
                     $this->piVars[$key] = $value;
                 }
             }
         }
     }
     $hooks = HookFactory::getHooks('Controller/ListController', 'init');
     foreach ($hooks as $hook) {
         if (method_exists($hook, 'preInit')) {
             $hook->preInit($this);
         }
     }
     $this->conf['singleProduct'] = (int) $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'product_id', 's_product');
     if ($this->conf['singleProduct'] > 0) {
         // product UID was set by Plugin or TS
         $this->singleViewAsPlugin = true;
     }
     // Unset variable, if smaller than 0, as -1 is returend
     // when no product is selcted in form.
     if ($this->conf['singleProduct'] < 0) {
         $this->conf['singleProduct'] = false;
     }
     $this->piVars['showUid'] = intval($this->piVars['showUid']) ?: 0;
     $this->piVars['showUid'] = $this->piVars['showUid'] ?: $this->conf['singleProduct'];
     $this->handle = $this->piVars['showUid'] ? 'singleView' : 'listView';
     // Define the currency
     // Use of curency is depricated as it was only a typo :-)
     if ($this->conf['curency'] > '') {
         $this->currency = $this->conf['curency'];
     }
     if ($this->conf['currency'] > '') {
         $this->currency = $this->conf['currency'];
     }
     if (empty($this->currency)) {
         $this->currency = 'EUR';
     }
     // Set some flexform values
     $this->master_cat = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'StartCategory', 's_product');
     if (!$this->master_cat) {
         $this->master_cat = $this->conf['catUid'];
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'listPid', 's_template')) {
         $this->conf['listPid'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'listPid', 's_template');
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'singlePid', 's_template')) {
         $this->conf['singlePid'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'singlePid', 's_template');
     }
     // @deprecated flexform value to be removed in 5.0.0
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'displayPID', 's_template')) {
         $this->conf['overridePid'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'displayPID', 's_template');
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'numberOfTopproducts', 's_product')) {
         $this->conf['numberOfTopproducts'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'numberOfTopproducts', 's_product');
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'showPageBrowser', 's_template')) {
         $this->conf['showPageBrowser'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'showPageBrowser', 's_template');
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'maxRecords', 's_template')) {
         $this->conf['maxRecords'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'maxRecords', 's_template');
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'maxPages', 's_template')) {
         $this->conf['maxPages'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'maxPages', 's_template');
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'basketPid', 's_template')) {
         $this->conf['basketPid'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'basketPid', 's_template');
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'dontLinkActivePage', 's_template')) {
         $this->conf['pageBrowser.']['dontLinkActivePage'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'dontLinkActivePage', 's_template');
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'showFirstLast', 's_template')) {
         $this->conf['pageBrowser.']['showFirstLast'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'showFirstLast', 's_template');
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'showRange', 's_template')) {
         $this->conf['pageBrowser.']['showRange'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'showRange', 's_template');
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'showItemCount', 's_template')) {
         $this->conf['pageBrowser.']['showItemCount'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'showItemCount', 's_template');
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'hscText', 's_template')) {
         $this->conf['pageBrowser.']['hscText'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'hscText', 's_template');
     }
     if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'template', 's_template') && file_exists($this->templateFolder . $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'template', 's_template'))) {
         $this->conf['templateFile'] = $this->templateFolder . $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'template', 's_template');
         if ($this->cObj->fileResource($this->conf['templateFile'])) {
             $this->templateCode = $this->cObj->fileResource($this->conf['templateFile']);
         }
     }
     $accessible = false;
     /**
      * Temporary category.
      *
      * @var Category
      */
     $tmpCategory = null;
     if ($this->piVars['catUid']) {
         $this->cat = (int) $this->piVars['catUid'];
         $tmpCategory = GeneralUtility::makeinstance('CommerceTeam\\Commerce\\Domain\\Model\\Category', $this->cat, $this->getFrontendController()->sys_language_uid);
         $accessible = $tmpCategory->isAccessible();
     }
     // Validate given catUid, if it's given and accessible
     if (!$this->piVars['catUid'] || !$accessible) {
         $this->cat = (int) $this->master_cat;
         $tmpCategory = GeneralUtility::makeinstance('CommerceTeam\\Commerce\\Domain\\Model\\Category', $this->cat, $this->getFrontendController()->sys_language_uid);
     }
     if (!isset($this->piVars['catUid'])) {
         $this->piVars['catUid'] = $this->master_cat;
     }
     if (is_object($tmpCategory)) {
         $tmpCategory->loadData();
     }
     $this->category = $tmpCategory;
     $categorySubproducts = $this->category->getProductUids();
     $frontend = $this->getFrontendController();
     if (!$this->conf['singleProduct'] && (int) $this->piVars['showUid'] && !$this->getFrontendController()->beUserLogin) {
         if (is_array($categorySubproducts)) {
             if (!in_array($this->piVars['showUid'], $categorySubproducts)) {
                 $categoryAllSubproducts = $this->category->getProducts();
                 if (!in_array((int) $this->piVars['showUid'], $categoryAllSubproducts)) {
                     // The requested product is not beblow the selected category
                     // So exit with page not found
                     $frontend->pageNotFoundAndExit($this->pi_getLL('error.productNotFound', 'Product not found', 1));
                 }
             }
         } else {
             $categoryAllSubproducts = $this->category->getProducts();
             if (!in_array($this->piVars['showUid'], $categoryAllSubproducts)) {
                 // The requested product is not beblow the selected category
                 // So exit with page not found
                 $frontend->pageNotFoundAndExit($this->pi_getLL('error.productNotFound', 'Product not found', 1));
             }
         }
     }
     if ($this->piVars['catUid'] && $this->conf['checkCategoryTree'] == 1) {
         // Validate given CAT UID, if is below master_cat
         $this->masterCategoryObj = GeneralUtility::makeinstance('CommerceTeam\\Commerce\\Domain\\Model\\Category', $this->master_cat, $this->getFrontendController()->sys_language_uid);
         $this->masterCategoryObj->loadData();
         /*
          * Master category
          *
          * @var Category masterCategoryObj
          */
         $masterCategorySubCategories = $this->masterCategoryObj->getChildCategoriesUidlist();
         if (in_array($this->piVars['catUid'], $masterCategorySubCategories)) {
             $this->cat = (int) $this->piVars['catUid'];
         } else {
             // Wrong UID, so start with page not found
             $frontend->pageNotFoundAndExit($this->pi_getLL('error.categoryNotFound', 'Product not found', 1));
         }
     } elseif (!isset($this->piVars['catUid'])) {
         $this->cat = (int) $this->master_cat;
     }
     if ($this->cat != $this->category->getUid()) {
         // Only, if the category has been changed
         unset($this->category);
         /*
          * Category
          *
          * @var Category category
          */
         $this->category = GeneralUtility::makeinstance('CommerceTeam\\Commerce\\Domain\\Model\\Category', $this->cat, $this->getFrontendController()->sys_language_uid);
         $this->category->loadData();
     }
     $this->internal['results_at_a_time'] = $this->conf['maxRecords'];
     $this->internal['maxPages'] = $this->conf['maxPages'];
     // Going the long way ??? Just for list view
     $long = 1;
     switch ($this->handle) {
         case 'singleView':
             if ($this->initSingleView($this->piVars['showUid'])) {
                 $long = 0;
             }
             break;
         default:
     }
     if ($this->cat > 0) {
         $this->category_array = $this->category->returnAssocArray();
         $catConf = $this->category->getTyposcriptConfig();
         if (is_array($catConf['catTS.'])) {
             \TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($this->conf, $catConf['catTS.']);
         }
         if ($long) {
             $this->category->setPageTitle();
             $this->category->getChildCategories();
             if ($this->conf['groupProductsByCategory']) {
                 $this->category_products = $this->category->getProducts(0);
             } elseif ($this->conf['showProductsRecLevel']) {
                 $this->category_products = $this->category->getProducts($this->conf['showProductsRecLevel']);
             } else {
                 $this->category_products = $this->category->getProducts(0);
             }
             if ($this->conf['useStockHandling'] == 1) {
                 $this->category_products = \CommerceTeam\Commerce\Utility\GeneralUtility::removeNoStockProducts($this->category_products, $this->conf['products.']['showWithNoStock']);
             }
             $this->internal['res_count'] = count($this->category_products);
         }
     } else {
         $this->content = $this->cObj->stdWrap($this->conf['emptyCOA'], $this->conf['emptyCOA.']);
         $this->handle = false;
     }
     foreach ($hooks as $hook) {
         if (method_exists($hook, 'postInit')) {
             $hook->postInit($this);
         }
     }
 }