Пример #1
0
    /**
     * 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;
    }
Пример #2
0
 /**
  * ArticleAssocArray
  *
  * @param string $prefix Prefix
  *
  * @return array
  */
 public function getProductAssocArray($prefix)
 {
     return $this->product->returnAssocArray($prefix);
 }