21     protected $_aComponentNames = array(
'oxcmp_cur' => 1, 
'oxcmp_shop' => 1, 
'oxcmp_basket' => 1, 
'oxcmp_user' => 1);
 
  230         if ($sParentId && $this->_oParentProd === null) {
 
  231             $this->_oParentProd = 
false;
 
  232             $oProduct = 
oxNew(
'oxArticle');
 
  233             if (($oProduct->load($sParentId))) {
 
  235                 $this->_oParentProd = $oProduct;
 
  263             $oProduct->appendLink($sAddParams);
 
  274         return $this->
getConfig()->getConfigParam(
'bl_perfLoadReviews');
 
  284         if ($this->_blCanRate === null) {
 
  286             $this->_blCanRate = 
false;
 
  290                 $oRating = 
oxNew(
'oxrating');
 
  291                 $this->_blCanRate = $oRating->allowRating($oUser->getId(), 
'oxarticle', $this->
getProduct()->getId());
 
  307         if ($oUser = $this->
getUser()) {
 
  322         if ($this->_aAttributes === null) {
 
  324             $aArtAttributes = $this->
getProduct()->getAttributes();
 
  327             $this->_aAttributes = 
false;
 
  329             if (count($aArtAttributes)) {
 
  330                 foreach ($aArtAttributes as $sKey => $oAttribute) {
 
  331                     $this->_aAttributes[$sKey] = 
new stdClass();
 
  332                     $this->_aAttributes[$sKey]->title = $oAttribute->oxattribute__oxtitle->value;
 
  333                     $this->_aAttributes[$sKey]->value = $oAttribute->oxattribute__oxvalue->value;
 
  351         $oTagList = 
oxNew(
"oxArticleTagList");
 
  353         $oTagList->setArticleId($this->
getProduct()->getId());
 
  354         $oTagCloud = 
oxNew(
"oxTagCloud");
 
  355         $oTagCloud->setTagList($oTagList);
 
  356         $oTagCloud->setExtendedMode(
true);
 
  371         if ($this->_blCanEditTags === null) {
 
  372             $this->_blCanEditTags = 
false;
 
  374                 $this->_blCanEditTags = 
true;
 
  388         if ($this->_iLinkType === null) {
 
  390             if (
'vendor' == $sListType) {
 
  392             } elseif (
'manufacturer' == $sListType) {
 
  395             } elseif (
'tag' == $sListType) {
 
  399             } elseif (
'recommlist' == $sListType) {
 
  424         if (is_object($oList)) {
 
  425             $oList = clone $oList;
 
  429         if (isset($oList[$sOxId])) {
 
  430             unset($oList[$sOxId]);
 
  444         if ($this->_aVariantList === null) {
 
  448             if ($oParent = $oProduct->getParentArticle()) {
 
  451                 $oParent->setNoVariantLoading(
false);
 
  452                 $this->_aVariantList = $oParent->getFullVariants(
false);
 
  455                 if (count($this->_aVariantList) && 
$myConfig->getConfigParam(
'blVariantParentBuyable')) {
 
  457                     $oParent->enablePriceLoad();
 
  458                     $oParent->aSelectlist = $oParent->getSelectLists();
 
  459                     $this->_aVariantList = array_merge(array($oParent), $this->_aVariantList->getArray());
 
  463                 $this->_aVariantList = $oProduct->getFullVariants(
false);
 
  467             foreach ($this->_aVariantList as $oVariant) {
 
  496         if ($this->_oCaptcha === null) {
 
  497             $this->_oCaptcha = 
oxNew(
'oxCaptcha');
 
  510         if ($this->_aMediaFiles === null) {
 
  511             $aMediaFiles = $this->
getProduct()->getMediaUrls();
 
  512             $this->_aMediaFiles = count($aMediaFiles) ? $aMediaFiles : 
false;
 
  527         if ($this->_aLastProducts === null) {
 
  530             $sParentIdField = 
'oxarticles__oxparentid';
 
  531             $sArtId = $oProduct->$sParentIdField->value ? $oProduct->$sParentIdField->value : $oProduct->getId();
 
  533             $oHistoryArtList = 
oxNew(
'oxArticleList');
 
  534             $oHistoryArtList->loadHistoryArticles($sArtId, $iCnt);
 
  535             $this->_aLastProducts = $oHistoryArtList;
 
  548         if ($this->_oManufacturer === null) {
 
  549             $this->_oManufacturer = $this->
getProduct()->getManufacturer(
false);
 
  562         if ($this->_oVendor === null) {
 
  563             $this->_oVendor = $this->
getProduct()->getVendor(
false);
 
  576         if ($this->_oCategory === null) {
 
  577             $this->_oCategory = $this->
getProduct()->getCategory();
 
  590         if ($this->_aPicGallery === null) {
 
  607         return $aPicGallery[
'ActPic'];
 
  619         return $aPicGallery[
'MorePics'];
 
  631         return $aPicGallery[
'Icons'];
 
  643         return $aPicGallery[
'ZoomPic'];
 
  655         return $aPicGallery[
'ZoomPics'];
 
  665         if ($this->_aReviews === null) {
 
  666             $this->_aReviews = 
false;
 
  667             if ($this->
getConfig()->getConfigParam(
'bl_perfLoadReviews')) {
 
  668                 $this->_aReviews = $this->
getProduct()->getReviews();
 
  682         if ($this->_oCrossSelling === null) {
 
  683             $this->_oCrossSelling = 
false;
 
  685                 $this->_oCrossSelling = $oProduct->getCrossSelling();
 
  699         if ($this->_oSimilarProducts === null) {
 
  700             $this->_oSimilarProducts = 
false;
 
  702                 $this->_oSimilarProducts = $oProduct->getSimilarProducts();
 
  718         if ($this->_aSimilarRecommListIds === null) {
 
  719             $this->_aSimilarRecommListIds = 
false;
 
  722                 $this->_aSimilarRecommListIds = array($oProduct->getId());
 
  736         if ($this->_oAccessoires === null) {
 
  737             $this->_oAccessoires = 
false;
 
  739                 $this->_oAccessoires = $oProduct->getAccessoires();
 
  753         if ($this->_aAlsoBoughtArts === null) {
 
  754             $this->_aAlsoBoughtArts = 
false;
 
  756                 $this->_aAlsoBoughtArts = $oProduct->getCustomerAlsoBoughtThisProducts();
 
  772         $sFixedPriceField = 
'oxarticles__oxblfixedprice';
 
  773         if (isset($oProduct->$sFixedPriceField->value) && $oProduct->$sFixedPriceField->value) {
 
  810         $this->_sSearchTitle = $sTitle;
 
  820         $this->_sCatTreePath = $sActCatPath;
 
  832         return $oProduct->oxarticles__oxisconfigurable->value;
 
  843         if ($this->_dRatingValue === null) {
 
  844             $this->_dRatingValue = (double) 0;
 
  846                 $blShowVariantsReviews = $this->
getConfig()->getConfigParam(
'blShowVariantReviews');
 
  847                 $this->_dRatingValue = round($oDetailsProduct->getArticleRatingAverage($blShowVariantsReviews), 1);
 
  861         return $this->
getConfig()->getConfigParam(
'bl_perfLoadReviews');
 
  871         if ($this->_iRatingCnt === null) {
 
  872             $this->_iRatingCnt = 
false;
 
  874                 $blShowVariantsReviews = $this->
getConfig()->getConfigParam(
'blShowVariantReviews');
 
  875                 $this->_iRatingCnt = $oDetailsProduct->getArticleRatingCount($blShowVariantsReviews);
 
  899         if ($this->_sBidPrice === null) {
 
  900             $this->_sBidPrice = 
false;
 
  903             $oCur = $this->
getConfig()->getActShopCurrencyObject();
 
  920         $sParentIdField = 
'oxarticles__oxparentid';
 
  923             return $oParent->getVariantSelections($sVarSelId, $oProduct->getId());
 
  937         if ($aVariantSelections && $aVariantSelections[
'oActiveVariant'] && !$aVariantSelections[
'blPerfectFit']) {
 
  938             return $aVariantSelections[
'oActiveVariant'];
 
  954         if ($this->_oProduct === null) {
 
  961                 $myConfig->setConfigParam(
'blLoadVariants', 
true);
 
  966                 $this->_oProduct = 
oxNew(
'oxarticle');
 
  968                 if (!$this->_oProduct->load($sOxid)) {
 
  969                     $myUtils->redirect(
$myConfig->getShopHomeURL());
 
  970                     $myUtils->showMessageAndExit(
'');
 
  974                 $aVarSelections = $this->_oProduct->getVariantSelections($sVarSelId);
 
  975                 if ($aVarSelections && $aVarSelections[
'oActiveVariant'] && $aVarSelections[
'blPerfectFit']) {
 
  976                     $this->_oProduct = $aVarSelections[
'oActiveVariant'];
 
  980         if (!$this->_blIsInitialized) {
 
  993         if ($sSortingParameters) {
 
  994             list($sSortBy, $sSortDir) = explode(
'|', $sSortingParameters);
 
 1011         $oCategory = 
oxNew(
'oxCategory');
 
 1016         if (!$sCatId && $oProduct->getCategory()) {
 
 1017             $oCategory = $oProduct->getCategory();
 
 1019             $oCategory->load($sCatId);
 
 1029         $oLocator->setLocatorData($oProduct, $this);
 
 1042         if ($this->_blMdView === null) {
 
 1043             $this->_blMdView = 
false;
 
 1044             if ($this->
getConfig()->getConfigParam(
'blUseMultidimensionVariants')) {
 
 1045                 $iMaxMdDepth = $this->
getProduct()->getMdVariants()->getMaxDepth();
 
 1046                 $this->_blMdView = ($iMaxMdDepth > 1);
 
 1062         $sSeparator = $this->
getConfig()->getConfigParam(
"sTagSeparator");
 
 1076         if (!$this->_oProduct->isVisible()) {
 
 1077             $blContinue = 
false;
 
 1078         } elseif ($this->_oProduct->oxarticles__oxparentid->value) {
 
 1079             $oParent = $this->
_getParentProduct($this->_oProduct->oxarticles__oxparentid->value);
 
 1080             if (!$oParent || !$oParent->isVisible()) {
 
 1081                 $blContinue = 
false;
 
 1086             $myUtils->redirect(
$myConfig->getShopHomeURL());
 
 1087             $myUtils->showMessageAndExit(
'');
 
 1091         $this->_blIsInitialized = 
true;
 
 1106             if ($sSortBy = $oCategory->getDefaultSorting()) {
 
 1107                 $sSortDir = ($oCategory->getDefaultSortingMode()) ? 
"desc" : 
"asc";
 
 1108                 $aSorting = array(
'sortby' => $sSortBy, 
'sortdir' => $sSortDir);