Как сделать мои простые продукты доступными для поиска в Google, но перенаправить клиентов на конфигурируемый продукт - PullRequest
1 голос
/ 04 марта 2012

Вот моя проблема

У меня есть основной настраиваемый продукт Солнцезащитные очки Anne Klein 3104. Затем у меня есть простые продукты, которые более конкретно названы по цвету и размеру

Anne Klein Sunglasses 3104 color 205/06 size 55 
Anne Klein Sunglasses 3104 color 207/65 size 55 
Anne Klein Sunglasses 3104 color 305/10 size 55

У меня скрыты мои простые продукты, поэтому, когда клиенты находятся на моем веб-сайте, они видят только настраиваемый продукт, который затем дает им возможность выбрать нужный цвет или размер. Я не хочу, чтобы мои клиенты заходили на простую страницу продукта и не знали, что другие цвета доступны или существуют.

Моя проблема заключается в том, что я обнаружил, что большая часть моего трафика находится в поиске определенных цветов в Google, таких как Anne Klein Sunglasses 3104, цвет 205/06, и попадает на мои простые страницы продукта, на которых нет всей информации и параметров, которые можно настроить. продукт имеет. Как я могу это исправить, чтобы мои простые продукты с определенными цветами все еще отображались в Google, но когда клиент нажимает на ссылку, он перенаправляет их на страницу моего настраиваемого продукта со всеми вариантами цвета.

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Установите все ваши дочерние продукты, которые будут отображаться в каталоге и поиске.Поместите следующий код в список Observer для события catalog_controller_product_init.

/**
 * Executed on catalog_controller_product_init if the product is simple and part of a configurable
 * Replaces the current product to be rendered with its configurable parent 
 *
 * @return boolean
 */
public function replaceSimpleWithConfigurableParent($oObserver)
{
    $oProduct = Mage::registry('product');
    $oRequest = Mage::app()->getRequest();
    $aParams = $oRequest->getParams();
    if($oProduct->getTypeId()=='simple'){
        $aParents = Mage::getSingleton('catalog/product_type_configurable')->getParentIdsByChild($oProduct->getId());
        if (!empty($aParents) ) {
            $oParent = Mage::getModel('catalog/product')->load($aParents[0]);  //assumes that each child product only belongs to SINGLE configurable parent
            $oAction = new Mage_Core_Controller_Front_Action($oRequest, Mage::app()->getResponse());
            $oLayoutUpdate = Mage::app()->getLayout()->getUpdate();
            $oLayoutUpdate->addHandle('default');
            $oAction->addActionLayoutHandles();
            $oLayoutUpdate->addHandle('PRODUCT_TYPE_configurable');
            if ($oParent->getPageLayout()) {
                Mage::helper('page/layout')->applyHandle($oParent->getPageLayout());
            }
            $oRequest->setParam('color', $oProduct->getColor());
            $oRequest->setParam('id', $oParent->getId());
            Mage::unregister('product');  //take out the simple child product
            Mage::unregister('current_product');
            Mage::register('product', $oParent);
            Mage::register('current_product', $oParent);  //replace with its parent
            Mage::register('child_product', $oProduct);  //track the child for loading the image, sku and other attributes on PDP
        }
    } 
    return $this;
}

Преимущество этого подхода состоит в том, что (a) он не требует переопределения основного кода и (b) еготребуется только один цикл запроса / ответа для сервера и браузера.

0 голосов
/ 04 марта 2012

Я недавно читал об этой же проблеме в MagentoCommerce. Эта ветка поможет вам наверняка: http://www.magentocommerce.com/boards/viewthread/74229/. Я собираюсь опубликовать решение здесь с некоторыми небольшими модификациями, потому что эта ветка предлагает вам создавать базовые моды, чего вы никогда не должны делать.

Решение состоит из двух частей.

Во-первых,

Копировать \app\code\core\Mage\Catalog\Model\Product\Visibility.php в \app\code\local\Mage\Catalog\Model\Product\Visibility.php

Редактировать \app\code\local\Mage\Catalog\Model\Product\Visibility.php.

Найти:

public function getVisibleInSiteIds()
{
    return array(self::VISIBILITY_IN_SEARCH, self::VISIBILITY_IN_CATALOG, self::VISIBILITY_BOTH);
} 

и измените его на:

public function getVisibleInSiteIds()
{
    return array(self::VISIBILITY_IN_SEARCH, self::VISIBILITY_IN_CATALOG, self::VISIBILITY_BOTH, self::VISIBILITY_NOT_VISIBLE);
} 

Далее, откройте app/design/frontend/YOUR_PACKAGE/YOUR_THEME/template/product/view.phtml

Найти это:

 $_helper = $this->helper('catalog/output');
 $_product = $this->getProduct();

Вставьте этот код после него:

//redirect to parent product if a child product
$parentId = $_product->loadParentProductIds()->getData('parent_product_ids');
if(isset($parentId[0]))
{
      $parent = Mage::getModel('catalog/product')->load($parentId[0]);
      echo "<script>window. location='".$parent->getProductUrl()."';</script>"; 
} 
...