Pregunta

El objetivo es que queremos ser capaces de cambiar el url bajo algunas condiciones para todas las URL de productos. Parece que la solución sería añadir una función a nuestro módulo Observer.php. No acabo de conseguir que se ejecute. La función original es

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

    return '#';
}

Lo que tratamos de hacer es poner en nuestra 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 '#';
}

Pero no estoy viendo ningún cambio hasta el momento. Que me estoy perdiendo aqui. Gracias. Saludos -Jeremy

¿Fue útil?

Solución

No hay caso de que se puede enganchar en para cambiar el método que desee. Desde el trozo de código que envió llego a la conclusión de que deseas anular el método de getProductUrl Mage_Catalog_Block_Product_Abstract. No se puede hacer eso a menos que copie el archivo en la carpeta local. Aquí hay más detalles al respecto. .
Pero se puede reemplazar el modelo del producto.
Para esto se necesita un nuevo módulo (o utilizar uno que ya tiene).
Para un nuevo módulo que estos son los archivos que necesita (no dude en cambiar el espacio de nombres):
app/etc/modules/Easylife_Catalog.xml - el expediente de declaración

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

app / código / local / Easylife / Catálogo / etc / config.xml - el archivo de configuración

<?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 - su versión del modelo

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

Borrar la caché y ya está.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top