21     protected $_aComponentNames = array(
'oxcmp_cur' => 1, 
'oxcmp_shop' => 1, 
'oxcmp_basket' => 1, 
'oxcmp_user' => 1);
 
  226         if ($sParentId && $this->_oParentProd === null) {
 
  227             $this->_oParentProd = 
false;
 
  228             $oProduct = 
oxNew(
'oxArticle');
 
  229             if (($oProduct->load($sParentId))) {
 
  231                 $this->_oParentProd = $oProduct;
 
  259             $oProduct->appendLink($sAddParams);
 
  270         return $this->
getConfig()->getConfigParam(
'bl_perfLoadReviews');
 
  280         if ($this->_blCanRate === null) {
 
  282             $this->_blCanRate = 
false;
 
  286                 $oRating = 
oxNew(
'oxrating');
 
  287                 $this->_blCanRate = $oRating->allowRating($oUser->getId(), 
'oxarticle', $this->
getProduct()->getId());
 
  301         if ($oUser = $this->
getUser()) {
 
  316         if ($this->_aAttributes === null) {
 
  318             $aArtAttributes = $this->
getProduct()->getAttributes();
 
  321             $this->_aAttributes = 
false;
 
  323             if (count($aArtAttributes)) {
 
  324                 foreach ($aArtAttributes as $sKey => $oAttribute) {
 
  325                     $this->_aAttributes[$sKey] = 
new stdClass();
 
  326                     $this->_aAttributes[$sKey]->title = $oAttribute->oxattribute__oxtitle->value;
 
  327                     $this->_aAttributes[$sKey]->value = $oAttribute->oxattribute__oxvalue->value;
 
  343         $oTagList = 
oxNew(
"oxArticleTagList");
 
  345         $oTagList->setArticleId($this->
getProduct()->getId());
 
  346         $oTagCloud = 
oxNew(
"oxTagCloud");
 
  347         $oTagCloud->setTagList($oTagList);
 
  348         $oTagCloud->setExtendedMode(
true);
 
  361         if ($this->_blCanEditTags === null) {
 
  362             $this->_blCanEditTags = 
false;
 
  364                 $this->_blCanEditTags = 
true;
 
  378         if ($this->_iLinkType === null) {
 
  380             if (
'vendor' == $sListType) {
 
  382             } elseif (
'manufacturer' == $sListType) {
 
  384             } elseif (
'tag' == $sListType) {
 
  386             } elseif (
'recommlist' == $sListType) {
 
  410         if (is_object($oList)) {
 
  411             $oList = clone $oList;
 
  415         if (isset($oList[$sOxId])) {
 
  416             unset($oList[$sOxId]);
 
  430         if ($this->_aVariantList === null) {
 
  434             if ($oParent = $oProduct->getParentArticle()) {
 
  437                 $oParent->setNoVariantLoading(
false);
 
  438                 $this->_aVariantList = $oParent->getFullVariants(
false);
 
  441                 if (count($this->_aVariantList) && 
$myConfig->getConfigParam(
'blVariantParentBuyable')) {
 
  443                     $oParent->enablePriceLoad();
 
  444                     $oParent->aSelectlist = $oParent->getSelectLists();
 
  445                     $this->_aVariantList = array_merge(array($oParent), $this->_aVariantList->getArray());
 
  449                 $this->_aVariantList = $oProduct->getFullVariants(
false);
 
  453             foreach ($this->_aVariantList as $oVariant) {
 
  480         if ($this->_oCaptcha === null) {
 
  481             $this->_oCaptcha = 
oxNew(
'oxCaptcha');
 
  494         if ($this->_aMediaFiles === null) {
 
  495             $aMediaFiles = $this->
getProduct()->getMediaUrls();
 
  496             $this->_aMediaFiles = count($aMediaFiles) ? $aMediaFiles : 
false;
 
  511         if ($this->_aLastProducts === null) {
 
  514             $sParentIdField = 
'oxarticles__oxparentid';
 
  515             $sArtId = $oProduct->$sParentIdField->value ? $oProduct->$sParentIdField->value : $oProduct->getId();
 
  517             $oHistoryArtList = 
oxNew(
'oxArticleList');
 
  518             $oHistoryArtList->loadHistoryArticles($sArtId, $iCnt);
 
  519             $this->_aLastProducts = $oHistoryArtList;
 
  532         if ($this->_oManufacturer === null) {
 
  533             $this->_oManufacturer = $this->
getProduct()->getManufacturer(
false);
 
  546         if ($this->_oVendor === null) {
 
  547             $this->_oVendor = $this->
getProduct()->getVendor(
false);
 
  560         if ($this->_oCategory === null) {
 
  561             $this->_oCategory = $this->
getProduct()->getCategory();
 
  574         if ($this->_aPicGallery === null) {
 
  591         return $aPicGallery[
'ActPic'];
 
  603         return $aPicGallery[
'MorePics'];
 
  615         return $aPicGallery[
'Icons'];
 
  627         return $aPicGallery[
'ZoomPic'];
 
  639         return $aPicGallery[
'ZoomPics'];
 
  649         if ($this->_aReviews === null) {
 
  650             $this->_aReviews = 
false;
 
  651             if ($this->
getConfig()->getConfigParam(
'bl_perfLoadReviews')) {
 
  652                 $this->_aReviews = $this->
getProduct()->getReviews();
 
  666         if ($this->_oCrossSelling === null) {
 
  667             $this->_oCrossSelling = 
false;
 
  669                 $this->_oCrossSelling = $oProduct->getCrossSelling();
 
  683         if ($this->_oSimilarProducts === null) {
 
  684             $this->_oSimilarProducts = 
false;
 
  686                 $this->_oSimilarProducts = $oProduct->getSimilarProducts();
 
  700         if ($this->_aSimilarRecommListIds === null) {
 
  701             $this->_aSimilarRecommListIds = 
false;
 
  704                 $this->_aSimilarRecommListIds = array($oProduct->getId());
 
  718         if ($this->_oAccessoires === null) {
 
  719             $this->_oAccessoires = 
false;
 
  721                 $this->_oAccessoires = $oProduct->getAccessoires();
 
  735         if ($this->_aAlsoBoughtArts === null) {
 
  736             $this->_aAlsoBoughtArts = 
false;
 
  738                 $this->_aAlsoBoughtArts = $oProduct->getCustomerAlsoBoughtThisProducts();
 
  754         $sFixedPriceField = 
'oxarticles__oxblfixedprice';
 
  755         if (isset($oProduct->$sFixedPriceField->value) && $oProduct->$sFixedPriceField->value) {
 
  792         $this->_sSearchTitle = $sTitle;
 
  802         $this->_sCatTreePath = $sActCatPath;
 
  814         return $oProduct->oxarticles__oxisconfigurable->value;
 
  825         if ($this->_dRatingValue === null) {
 
  826             $this->_dRatingValue = (double) 0;
 
  828                 $blShowVariantsReviews = $this->
getConfig()->getConfigParam(
'blShowVariantReviews');
 
  829                 $this->_dRatingValue = round($oDetailsProduct->getArticleRatingAverage($blShowVariantsReviews), 1);
 
  843         return $this->
getConfig()->getConfigParam(
'bl_perfLoadReviews');
 
  853         if ($this->_iRatingCnt === null) {
 
  854             $this->_iRatingCnt = 
false;
 
  856                 $blShowVariantsReviews = $this->
getConfig()->getConfigParam(
'blShowVariantReviews');
 
  857                 $this->_iRatingCnt = $oDetailsProduct->getArticleRatingCount($blShowVariantsReviews);
 
  881         if ($this->_sBidPrice === null) {
 
  882             $this->_sBidPrice = 
false;
 
  885             $oCur = $this->
getConfig()->getActShopCurrencyObject();
 
  902         $sParentIdField = 
'oxarticles__oxparentid';
 
  905             return $oParent->getVariantSelections($sVarSelId, $oProduct->getId());
 
  919         if ($aVariantSelections && $aVariantSelections[
'oActiveVariant'] && !$aVariantSelections[
'blPerfectFit']) {
 
  920             return $aVariantSelections[
'oActiveVariant'];
 
  936         if ($this->_oProduct === null) {
 
  943                 $myConfig->setConfigParam(
'blLoadVariants', 
true);
 
  948                 $this->_oProduct = 
oxNew(
'oxarticle');
 
  950                 if (!$this->_oProduct->load($sOxid)) {
 
  951                     $myUtils->redirect(
$myConfig->getShopHomeURL());
 
  952                     $myUtils->showMessageAndExit(
'');
 
  956                 $aVarSelections = $this->_oProduct->getVariantSelections($sVarSelId);
 
  957                 if ($aVarSelections && $aVarSelections[
'oActiveVariant'] && $aVarSelections[
'blPerfectFit']) {
 
  958                     $this->_oProduct = $aVarSelections[
'oActiveVariant'];
 
  962         if (!$this->_blIsInitialized) {
 
  975         if ($sSortingParameters) {
 
  976             list($sSortBy, $sSortDir) = explode(
'|', $sSortingParameters);
 
  993         $oCategory = 
oxNew(
'oxCategory');
 
  998         if (!$sCatId && $oProduct->getCategory()) {
 
  999             $oCategory = $oProduct->getCategory();
 
 1001             $oCategory->load($sCatId);
 
 1011         $oLocator->setLocatorData($oProduct, $this);
 
 1024         if ($this->_blMdView === null) {
 
 1025             $this->_blMdView = 
false;
 
 1026             if ($this->
getConfig()->getConfigParam(
'blUseMultidimensionVariants')) {
 
 1027                 $iMaxMdDepth = $this->
getProduct()->getMdVariants()->getMaxDepth();
 
 1028                 $this->_blMdView = ($iMaxMdDepth > 1);
 
 1042         $sSeparator = $this->
getConfig()->getConfigParam(
"sTagSeparator");
 
 1056         if (!$this->_oProduct->isVisible()) {
 
 1057             $blContinue = 
false;
 
 1058         } elseif ($this->_oProduct->oxarticles__oxparentid->value) {
 
 1059             $oParent = $this->
_getParentProduct($this->_oProduct->oxarticles__oxparentid->value);
 
 1060             if (!$oParent || !$oParent->isVisible()) {
 
 1061                 $blContinue = 
false;
 
 1066             $myUtils->redirect(
$myConfig->getShopHomeURL());
 
 1067             $myUtils->showMessageAndExit(
'');
 
 1071         $this->_blIsInitialized = 
true;
 
 1086             if ($sSortBy = $oCategory->getDefaultSorting()) {
 
 1087                 $sSortDir = ($oCategory->getDefaultSortingMode()) ? 
"desc" : 
"asc";
 
 1088                 $aSorting = array(
'sortby' => $sSortBy, 
'sortdir' => $sSortDir);