Перезаписать функцию getProducturl
-
16-10-2019 - |
Вопрос
Цель состоит в том, что мы хотим иметь возможность изменить 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
}
}
Очистите кеш, и все готово.