/**
  * Generates HTML-Code of the basket and stores content.
  *
  * @return void
  */
 public function generateBasket()
 {
     $template = $this->cObj->getSubpart($this->getTemplateCode(), '###BASKET###');
     // Render locked information
     if ($this->basket->getReadOnly()) {
         $basketSubpart = $this->cObj->getSubpart($template, 'BASKETLOCKED');
         $template = $this->cObj->substituteSubpart($template, 'BASKETLOCKED', $basketSubpart);
     } else {
         $template = $this->cObj->substituteSubpart($template, 'BASKETLOCKED', '');
     }
     $basketArray['###BASKET_PRODUCT_LIST###'] = $this->makeProductList();
     // Generate basket hooks
     $hookObject = HookFactory::getHook('Controller/BasketController', 'generateBasket');
     // No delivery article is present, so draw selector
     $contentDelivery = $this->cObj->getSubpart($this->getTemplateCode(), '###DELIVERYBOX###');
     if (is_object($hookObject) && method_exists($hookObject, 'makeDelivery')) {
         $contentDelivery = $hookObject->makeDelivery($this, $this->basket, $contentDelivery);
         $template = $this->cObj->substituteSubpart($template, '###DELIVERYBOX###', $contentDelivery);
     } else {
         $deliveryArray = $this->makeDelivery();
         $contentDelivery = $this->cObj->substituteMarkerArray($contentDelivery, $deliveryArray);
         $template = $this->cObj->substituteSubpart($template, '###DELIVERYBOX###', $contentDelivery);
     }
     $contentPayment = $this->cObj->getSubpart($this->getTemplateCode(), '###PAYMENTBOX###');
     if (is_object($hookObject) && method_exists($hookObject, 'makePayment')) {
         $contentPayment = $hookObject->makePayment($this, $this->basket, $contentPayment);
         $template = $this->cObj->substituteSubpart($template, '###PAYMENTBOX###', $contentPayment);
     } else {
         $paymentArray = $this->makePayment();
         $contentPayment = $this->cObj->substituteMarkerArray($contentPayment, $paymentArray);
         $template = $this->cObj->substituteSubpart($template, '###PAYMENTBOX###', $contentPayment);
     }
     $taxRateTemplate = $this->cObj->getSubpart($template, '###TAX_RATE_SUMS###');
     $taxRates = $this->basket->getTaxRateSums();
     $taxRateRows = '';
     foreach ($taxRates as $taxRate => $taxRateSum) {
         $taxRowArray = array();
         $taxRowArray['###TAX_RATE###'] = $taxRate;
         $taxRowArray['###TAX_RATE_SUM###'] = Money::format($taxRateSum, $this->currency);
         $taxRateRows .= $this->cObj->substituteMarkerArray($taxRateTemplate, $taxRowArray);
     }
     $template = $this->cObj->substituteSubpart($template, '###TAX_RATE_SUMS###', $taxRateRows);
     $basketArray['###BASKET_NET_PRICE###'] = Money::format($this->basket->getSumNet(), $this->currency);
     $basketArray['###BASKET_GROSS_PRICE###'] = Money::format($this->basket->getSumGross(), $this->currency);
     $basketArray['###BASKET_TAX_PRICE###'] = Money::format($this->basket->getSumGross() - $this->basket->getSumNet(), $this->currency);
     $basketArray['###BASKET_VALUE_ADDED_TAX###'] = Money::format($this->basket->getSumGross() - $this->basket->getSumNet(), $this->currency);
     $basketArray['###BASKET_ITEMS###'] = $this->basket->getItemsCount();
     $basketArray['###DELBASKET###'] = $this->pi_linkTP_keepPIvars($this->pi_getLL('delete_basket', 'delete basket'), array('delBasket' => 1), 0, 1);
     $basketArray['###BASKET_NEXTBUTTON###'] = $this->cObj->stdWrap($this->makeCheckOutLink(), $this->conf['nextbutton.']);
     $basketArray['###BASKET_ARTICLES_NET_SUM###'] = Money::format($this->basket->getArticleTypeSumNet(NORMALARTICLETYPE), $this->currency);
     $basketArray['###BASKET_ARTICLES_GROSS_SUM###'] = Money::format($this->basket->getArticleTypeSumGross(NORMALARTICLETYPE), $this->currency);
     $basketArray['###BASKET_DELIVERY_NET_SUM###'] = Money::format($this->basket->getArticleTypeSumNet(DELIVERYARTICLETYPE), $this->currency);
     $basketArray['###BASKET_DELIVERY_GROSS_SUM###'] = Money::format($this->basket->getArticleTypeSumGross(DELIVERYARTICLETYPE), $this->currency);
     $basketArray['###BASKET_PAYMENT_NET_SUM###'] = Money::format($this->basket->getArticleTypeSumNet(PAYMENTARTICLETYPE), $this->currency);
     $basketArray['###BASKET_PAYMENT_GROSS_SUM###'] = Money::format($this->basket->getArticleTypeSumGross(PAYMENTARTICLETYPE), $this->currency);
     $basketArray['###BASKET_PAYMENT_ITEMS###'] = $this->basket->getArticleTypeCount(PAYMENTARTICLETYPE);
     $basketArray['###BASKET_DELIVERY_ITEMS###'] = $this->basket->getArticleTypeCount(DELIVERYARTICLETYPE);
     $basketArray['###BASKET_ARTICLES_ITEMS###'] = $this->basket->getArticleTypeCount(NORMALARTICLETYPE);
     $this->pi_linkTP('', array(), 0, $this->conf['basketPid']);
     $basketArray['###BASKETURL###'] = $this->cObj->lastTypoLinkUrl;
     $this->pi_linkTP('', array(), 0, $this->conf['checkoutPid']);
     $basketArray['###URL_CHECKOUT###'] = $this->cObj->lastTypoLinkUrl;
     $basketArray['###NO_STOCK_MESSAGE###'] = $this->noStock;
     $basketArray['###BASKET_LASTPRODUCTURL###'] = $this->cObj->stdWrap($this->getFrontendController()->fe_user->getKey('ses', 'tx_commerce_lastproducturl'), $this->conf['lastProduct']);
     if ($this->getPriceLimitForBasket() == 1 && $this->conf['priceLimitForBasketMessage']) {
         $basketArray['###BASKET_PRICELIMIT###'] = $this->cObj->cObjGetSingle($this->conf['priceLimitForBasketMessage'], $this->conf['priceLimitForBasketMessage.']);
     } else {
         $basketArray['###BASKET_PRICELIMIT###'] = '';
     }
     $basketArray = array_merge($basketArray, $this->languageMarker);
     $hooks = HookFactory::getHooks('Controller/BasketController', 'generateBasketMarker');
     foreach ($hooks as $hookObject) {
         if (method_exists($hookObject, 'additionalMarker')) {
             $basketArray = $hookObject->additionalMarker($basketArray, $this, $template);
         }
     }
     $this->setContent($this->cObj->substituteMarkerArray($template, $basketArray));
     $markerArrayGlobal = $this->addFormMarker(array());
     $this->setContent($this->cObj->substituteMarkerArray($this->getContent(), $markerArrayGlobal, '###|###'));
 }