/** * This method renders a product to a template * * @param Tx_Commerce_Domain_Model_Product $product Product * @param string $template TYPO3 Template * @param array $typoscript TypoScript * @param array $articleMarker Marker for the article description * @param string $articleSubpart Subpart * * @return string rendered HTML */ public function renderProduct(Tx_Commerce_Domain_Model_Product $product, $template, array $typoscript, array $articleMarker, $articleSubpart = '') { if (!$product instanceof Tx_Commerce_Domain_Model_Product) { return FALSE; } if (empty($articleMarker)) { return $this->error('renderProduct', __LINE__, 'No ArticleMarker defined in renderProduct '); } $hookObjectsArr = array(); if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['commerce/lib/class.tx_commerce_pibase.php']['product'])) { GeneralUtility::deprecationLog(' hook $GLOBALS[\'TYPO3_CONF_VARS\'][\'EXTCONF\'][\'commerce/lib/class.tx_commerce_pibase.php\'][\'product\'] is deprecated since commerce 1.0.0, it will be removed in commerce 1.4.0, please use instead $GLOBALS[\'TYPO3_CONF_VARS\'][\'EXTCONF\'][\'commerce/Classes/Controller/BaseController.php\'][\'renderProduct\'] '); foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['commerce/lib/class.tx_commerce_pibase.php']['product'] as $classRef) { $hookObjectsArr[] =& GeneralUtility::getUserObj($classRef); } } if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['commerce/Classes/Controller/BaseController.php']['renderProduct'])) { foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['commerce/Classes/Controller/BaseController.php']['renderProduct'] as $classRef) { $hookObjectsArr[] =& GeneralUtility::getUserObj($classRef); } } $data = $product->returnAssocArray(); // maybe this is a related product so category may be wrong $categoryUid = $this->category->getUid(); $productCategories = $product->getParentCategories(); if (!in_array($categoryUid, $productCategories, FALSE)) { $categoryUid = $productCategories[0]; } /** * Build TS for Linking the Catergory Images */ $localTs = $typoscript; /** * Generate TypoLink Configuration and ad to fields by addTypoLinkToTs */ if ($this->conf['overridePid']) { $typoLinkConf['parameter'] = $this->conf['overridePid']; } else { $typoLinkConf['parameter'] = $this->pid; } $typoLinkConf['useCacheHash'] = 1; $typoLinkConf['additionalParams'] = $this->argSeparator . $this->prefixId . '[showUid]=' . $product->getUid(); $typoLinkConf['additionalParams'] .= $this->argSeparator . $this->prefixId . '[catUid]=' . $categoryUid; if ($this->basketHashValue) { $typoLinkConf['additionalParams'] .= $this->argSeparator . $this->prefixId . '[basketHashValue]=' . $this->basketHashValue; } $localTs = $this->addTypoLinkToTypoScript($localTs, $typoLinkConf); $markerArray = $this->generateMarkerArray($data, $localTs, '', 'Tx_Commerce_Domain_Model_Products'); $markerArrayUp = array(); foreach ($markerArray as $k => $v) { $markerArrayUp[strtoupper($k)] = $v; } $markerArray = $this->cObj->fillInMarkerArray(array(), $markerArrayUp, implode(',', array_keys($markerArrayUp)), FALSE, 'PRODUCT_'); $this->can_attributes = $product->getAttributes(array(ATTRIB_CAN)); $this->selectAttributes = $product->getAttributes(array(ATTRIB_SELECTOR)); $this->shall_attributes = $product->getAttributes(array(ATTRIB_SHAL)); $productAttributesSubpartArray = array(); $productAttributesSubpartArray[] = '###' . strtoupper($this->conf['templateMarker.']['productAttributes']) . '###'; $productAttributesSubpartArray[] = '###' . strtoupper($this->conf['templateMarker.']['productAttributes2']) . '###'; $markerArray['###SUBPART_PRODUCT_ATTRIBUTES###'] = $this->cObj->stdWrap($this->renderProductAttributeList($product, $productAttributesSubpartArray, $typoscript['productAttributes.']['fields.']), $typoscript['productAttributes.']); $linkArray = array(); $linkArray['catUid'] = (int) $categoryUid; if ($this->basketHashValue) { $linkArray['basketHashValue'] = $this->basketHashValue; } if (is_numeric($this->piVars['manufacturer'])) { $linkArray['manufacturer'] = $this->piVars['manufacturer']; } if (is_numeric($this->piVars['mDepth'])) { $linkArray['mDepth'] = $this->piVars['mDepth']; } foreach ($hookObjectsArr as $hookObj) { if (method_exists($hookObj, 'postProcessLinkArray')) { $linkArray = $hookObj->postProcessLinkArray($linkArray, $product, $this); } } $wrapMarkerArray['###PRODUCT_LINK_DETAIL###'] = explode('|', $this->pi_list_linkSingle('|', $product->getUid(), TRUE, $linkArray, FALSE, $this->conf['overridePid'])); $articleTemplate = $this->cObj->getSubpart($template, '###' . strtoupper($articleSubpart) . '###'); if ($this->conf['useStockHandling'] == 1) { $product = Tx_Commerce_Utility_GeneralUtility::removeNoStockArticles($product, $this->conf['articles.']['showWithNoStock']); } // Set RenderMaxArticles to TS value if (!empty($localTs['maxArticles']) && (int) $localTs['maxArticles'] > 0) { $product->setRenderMaxArticles((int) $localTs['maxArticles']); } $subpartArray = array(); if ($this->conf['disableArticleViewForProductlist'] == 1 && !$this->piVars['showUid'] || $this->conf['disableArticleView'] == 1) { $subpartArray['###' . strtoupper($articleSubpart) . '###'] = ''; } else { $subpartArray['###' . strtoupper($articleSubpart) . '###'] = $this->makeArticleView('list', array(), $product, $articleMarker, $articleTemplate); } /** * Get The Checapest Price */ $cheapestArticleUid = $product->getCheapestArticle(); /** * Cheapest Article * * @var Tx_Commerce_Domain_Model_Article $cheapestArticle */ $cheapestArticle = GeneralUtility::makeInstance('Tx_Commerce_Domain_Model_Article', $cheapestArticleUid); $cheapestArticle->loadData(); $cheapestArticle->loadPrices(); $markerArray['###PRODUCT_CHEAPEST_PRICE_GROSS###'] = Tx_Commerce_ViewHelpers_Money::format($cheapestArticle->getPriceGross(), $this->currency); $cheapestArticleUid = $product->getCheapestArticle(1); /** * Cheapest Article * * @var Tx_Commerce_Domain_Model_Article $cheapestArticle */ $cheapestArticle = GeneralUtility::makeInstance('Tx_Commerce_Domain_Model_Article', $cheapestArticleUid); $cheapestArticle->loadData(); $cheapestArticle->loadPrices(); $markerArray['###PRODUCT_CHEAPEST_PRICE_NET###'] = Tx_Commerce_ViewHelpers_Money::format($cheapestArticle->getPriceNet(), $this->currency); foreach ($hookObjectsArr as $hookObj) { if (method_exists($hookObj, 'additionalMarkerProduct')) { $markerArray = $hookObj->additionalMarkerProduct($markerArray, $product, $this); } } foreach ($hookObjectsArr as $hookObj) { if (method_exists($hookObj, 'additionalSubpartsProduct')) { $subpartArray = $hookObj->additionalSubpartsProduct($subpartArray, $product, $this); } } $content = $this->substituteMarkerArrayNoCached($template, $markerArray, $subpartArray, $wrapMarkerArray); if ($typoscript['editPanel'] == 1) { $content = $this->cObj->editPanel($content, $typoscript['editPanel.'], 'Tx_Commerce_Domain_Model_Products:' . $product->getUid()); } foreach ($hookObjectsArr as $hookObj) { if (method_exists($hookObj, 'ModifyContentProduct')) { $content = $hookObj->ModifyContentProduct($content, $product, $this); } } return $content; }
/** * ArticleAssocArray * * @param string $prefix Prefix * * @return array */ public function getProductAssocArray($prefix) { return $this->product->returnAssocArray($prefix); }