Agregar una excepción a la modificación de los títulos de la página de navegación en capas

magento.stackexchange https://magento.stackexchange.com/questions/10751

  •  16-10-2019
  •  | 
  •  

Pregunta

Estamos usando el siguiente código en app/code/local/Mage/Page/Block/Html/Head.php para detectar cuándo un filtro está activo desde la navegación en capas y luego enmendar el título de la página y la meta descripción basada en esto de la obtención de Designar.

public $layerFilters;
public $currentFilters;
public function getLayersMeta(){

    $this->layerFilters = '';
    $state_block = $this->getLayout()->createBlock("catalog/layer_state");
    $this->currentFilters = $state_block->getActiveFilters();

    if(!empty($this->currentFilters)) {
        foreach($this->currentFilters as $filter) {

            $this->layerFilters .= ($this->layerFilters!='') ? ', '.$filter->getName() : $filter->getName();

            $attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $filter->getFilter()->getRequestVar());
            foreach($attribute->getSource()->getAllOptions(true, true) as $option) {
                if($filter->getValue() == $option['value']) {
                    $this->layerFilters .= ' - '.strtr($option['label'],array('"'=>"''"));
                }
            }
        }
        $this->layerFilters = ($this->layerFilters!='') ? $this->__('Shopping by: ').$this->layerFilters.' - ' : '';
    }

Esto funciona bien y agrega datos adicionales al título de la página para todas las páginas con filtros de navegación en capas (parámetros de consulta) en la URL.

Lo que nos gustaría hacer es agregar una excepción en el getLayersMeta función que formatea el título de la página de manera diferente cuando el filtro es fabricante.

No estoy seguro de si necesito agregar un elseif declaración para atrapar el parámetro de consulta 'fabricante' como if($this->getRequest()->getParam('manufacturer') {}.

Extendiendo con la respuesta de @mpaeper ...

/**
 * Modifying the page titles for layered navigation (filters) pages.
 *
 * 
 * 
 */ 
public $layerFilters;
public $currentFilters;
public $orderBy;
public $currentPage;
public function getLayersMeta(){

    $manufacturer = Mage::app()->getRequest()->getParam('manufacturer');
       if (!empty($manufacturer)) {
       $this->_handleManufacturerMeta();
       return false;
    }

    $this->layerFilters = '';
    $state_block = $this->getLayout()->createBlock("catalog/layer_state");
    $this->currentFilters = $state_block->getActiveFilters();

    if(!empty($this->currentFilters)) {
        foreach($this->currentFilters as $filter) {

            $this->layerFilters .= ($this->layerFilters!='') ? ', '.$filter->getName() : $filter->getName();

            $attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $filter->getFilter()->getRequestVar());
            foreach($attribute->getSource()->getAllOptions(true, true) as $option) {
                if($filter->getValue() == $option['value']) {
                    $this->layerFilters .= ' - '.strtr($option['label'],array('"'=>"''"));
                }
            }
        }
        $this->layerFilters = ($this->layerFilters!='') ? $this->__('Shopping by: ').$this->layerFilters.' - ' : '';
    }

    $this->orderBy = '';

    if($this->getRequest()->getParam('order') && $this->getRequest()->getParam('dir')) {
        $this->orderBy .= $this->__('Sort by ').$this->__(htmlspecialchars($this->getRequest()->getParam('order')));
        $this->orderBy .= (htmlspecialchars($this->getRequest()->getParam('dir')) == 'asc') ? ', '.$this->__('ascending') : ', '.$this->__('descending');
    }

    if($this->getRequest()->getParam('limit') && is_numeric($this->getRequest()->getParam('limit'))) {
        $this->orderBy .= (($this->orderBy!='') ? ', ' : $this->__('show')).' '.$this->getRequest()->getParam('limit').' '.$this->__('per page');
    }

    if($this->getRequest()->getParam('p') && is_numeric($this->getRequest()->getParam('p'))) {
        $this->currentPage = $this->__('Page').' '.$this->getRequest()->getParam('p').' - ';
    }

    $this->orderBy = ($this->orderBy!='') ? $this->orderBy.' - ' : '';

    return $this->layerFilters.$this->orderBy.$this->currentPage;
}

protected function _handleManufacturerMeta() {
        // Add manufacturer metas
    }
¿Fue útil?

Solución

Sí, esta sería una opción:

public function getLayersMeta() {
   $manufacturer = Mage::app()->getRequest()->getParam('manufacturer');
   if (!empty($manufacturer)) {
       return $this->_handleManufacturerMeta();
   }

   // Your other logic which handles everything but manufacturer
}

protected function _handleManufacturerMeta() {
   $manufacturer = $this->getRequest()->getParam('manufacturer');
   $manufacturerValue = '';
   $attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 'manufacturer');
        foreach($attribute->getSource()->getAllOptions(true, true) as $option) {
            if($manufacturer == $option['value']) {
                $manufacturerValue = $option['label'];
            }
        }
   return $this->__('My manufacturer is: ').$manufacturerValue;
}

Editar: actualicé mi ejemplo y agregué código de muestra. El método _handlemanufacturermeta necesitaría su código personalizado para mostrar el texto que desea para los fabricantes. La lógica es que cuando el método GetLayersMeta () detecta a un fabricante, devuelve el texto de _handlemanufacturersmeta. Si no, devuelve su texto que tenía hasta ahora.

Sin embargo, tenga en cuenta que la forma en que la entrada en el bloque describe esto no es un estilo muy agradable (sobrescribir una clase central en el espacio de código local): sería mejor usar reescrituras o incluso mejorar algún observador.

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