Magento多站点 - 在主站点和子站点中显示产品,但仅通过子站点进行订购

时间:2014-05-24 09:57:41

标签: php magento

我们有子域多站点设置。我们希望在主要网站(包含许多品牌/制造商)和一个专门迎合该品牌的单独子网站中列出产品。

主站点的访问者可以执行产品搜索或浏览类别以查找任何产品。如果他们点击产品查看其信息/订单,他们将被定向到子网站以显示产品

订购该商品将带他们完成子网站的购物车流程,并为该网站提供独特的送货延期等。

这可能吗?当然,如果产品列在根网站类别中但显示在两者中,我们应该能够调整脚本,以便指向子网站进行订购......

如果没有自定义,我们不希望这是可能的,但不确定如何去做。

2 个答案:

答案 0 :(得分:0)

您可以创建多个商店来实现主要网站和子网站。我需要创建URL重定向以将产品重定向到子网站。

答案 1 :(得分:0)

您希望在访问主站点上的产品页面时完全重定向到品牌网站。所以你可以做的是为事件controller_action_postdispatch_catalog_product_view写一个观察者,检查当前网站是否是主要网站,以及该产品是否在其他网站上可用。如果是,请重定向到此网站。我选择postdispatch over predispatch,因为此时产品已经加载,我们可以轻松检索网站信息。

为此,创建一个新模块(我在这里备用基础知识),配置观察者:

config.xml中

<frontend>
    <events>
        <controller_action_postdispatch_catalog_product_view>
            <observers>
                <your_module>
                    <class>your_module/observer</class>
                    <method>redirectToBrandSite</method>
                </your_module>
            </observers>
        </controller_action_postdispatch_catalog_product_view>
    </events>
</frontend>

并实现上面的逻辑:

Observer.php

class Your_Module_Model_Observer
{
    const MAIN_WEBSITE_ID = 1;

    public function redirectToBrandSite(Varien_Event_Observer $observer)
    {
        if (Mage::app()->getWebsite()->getCode() != self::MAIN_WEBSITE_ID) {
            return;
        }
        $product = Mage::registry('current_product');
        if (!$product instanceof Mage_Catalog_Model_Product) {
            return;
        }
        foreach ($product->getWebsiteIds() as $websiteId) {
            if ($websiteId != self::MAIN_WEBSITE_ID) {
                $redirectUrl = $product->setStoreId(
                    Mage::app()->getWebsite($websiteId)->getDefaultStore()->getId()
                )->getProductUrl();
                $observer->getControllerAction()->getResponse()->setRedirect($redirectUrl);
                return;
            }
        }
    }

您必须将MAIN_WEBSITE_ID常量设置为主网站的ID(而不是代码)。您可以在core_website数据库中查找。