Вопрос

Цель состоит в том, что мы хотим иметь возможность изменить URL -адрес в некоторых условиях для всех URL -адресов продукта. Похоже, что решением было бы добавить функцию к нашему модуле stemver.php. Я не могу заставить его бежать. Исходная функция

public function getProductUrl($product, $additional = array())
{
    if ($this->hasProductUrl($product)) {
        if (!isset($additional['_escape'])) {
            $additional['_escape'] = true;
        }
        return $product->getUrlModel()->getUrl($product, $additional);
    }

    return '#';
}

То, что я пытался сделать, это просто поместить в наш Observer.php

/**
 * Set the url to be based from it's store not based on the location it's currently showen
 *
 * @return String url
 */
public function getProductUrl($product, $additional = array()) {

    if ($this->hasProductUrl($product)) {
        $pstore_id = array_shift(array_values($_product->getStoreIds()));
        if(Mage::app()->getStore()->getStoreId() == $pstore_id){
            $purl = $product->getUrlModel()->getUrl($product, $additional);//$this->getProductUrl();
        }else{
            $base = Mage::app()->getStore($pstore_id)->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK);
            $purl = $base.$product->getUrlPath();
        }
        if (!isset($additional['_escape'])) {
            $additional['_escape'] = true;
        }
        return $purl;
    }
    return '#';
}

Но я пока не вижу никаких изменений. Что мне здесь не хватает. Спасибо. Приветствия -гереми

Это было полезно?

Решение

Нет никакого события, которое вы можете зацепить для изменения желаемого метода. Из разложенного вами кусочка кода я хочу переопределить getProductUrl Метод от Mage_Catalog_Block_Product_Abstract. Анкет Вы не можете сделать это, если вы не скопируете файл в свою локальную папку. Вот более подробная информация об этом..
Но вы можете переопределить модель продукта.
Для этого вам понадобится новый модуль (или использовать тот, который у вас уже есть).
Для нового модуля это необходимые вам файлы (не стесняйтесь изменить пространство имен):
app/etc/modules/Easylife_Catalog.xml - Файл объявления

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Catalog>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Catalog />
            </depends>
        </Easylife_Catalog>
    </modules>
</config>

app/code/local/easylife/catalog/etc/config.xml - файл конфигурации

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Catalog>
            <version>0.0.1</version>
        </Easylife_Catalog>
    </modules>
    <global>
        <models>
            <catalog>
                <rewrite>
                    <product>Easylife_Catalog_Model_Product</product>
                </rewrite>
            </catalog>
        </models>
    </global>
</config>

app/code/local/Easylife/Catalog/Model/Product.php - Ваша версия модели

<?php
class Easylife_Catalog_Model_Product extends Mage_Catalog_Model_Product {
    public function getProductUrl($useSid = null){
        //your version of the method here
    }
}

Очистите кеш, и все готово.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top