Domanda

Come posso creare una categoria predefinita Meta Titolo per tutte le pagine di categoria?

Mi piacerebbe che sia qualcosa del genere:

<title>{{category name}} - blah blah blah blah</title>
.

Voglio che sia l'impostazione predefinita solo per le pagine di categoria.

è possibile?

È stato utile?

Soluzione

Aggiungi il seguente codice nel head.phtml

if (Mage::registry(current_category)) {
    echo '<title> Categoryname- keyword1 keyword2 keyword3"';
}
.

modifica

Per quanto ne so che Mage::registry('current_category') può essere utilizzato per verificare se siamo in una categoria.Vedi Risposta di Alanstorm .Le parti importanti di questa risposta si aggiungono di seguito per riferimento

Versioni attuali di Magento Registrano alcune variabili globali (non i globali PHP, ma le cose globali del sistema magento) su determinate pagine.

Chiamare il seguente

   $category = Mage::registry('current_category');         
   $product  = Mage::registry('current_product');
   $product  = Mage::registry('product');
.

restituirà null se gli oggetti non sono stati impostati (I.e. Sei su una pagina senza una categoria o un prodotto) o di ritorno categoria e oggetti del prodotto.

Se viene restituito un oggetto prodotto, sei su una pagina del prodotto.

Se nessun oggetto prodotto viene restituito, ma un oggetto di categoria è, sei in una pagina di categoria.

Quindi puoi stampare quello che vuoi.

Altri suggerimenti

Il modo più pulito per eseguire questo è osservando all'evento controller_action_layout_generate_blocks_after. Quindi le parti importanti del tuo modulo (Namespace_Module) sarebbero

File: app\code\local\Namespace\Module\etc\config.xml

<config>
    <frontend>
        <events>
            <controller_action_layout_generate_blocks_after>
                <observers>
                    <change_category_page_title>
                        <class>namespace_module/observer</class>
                        <method>setCategoryPageTitle</method>
                    </change_category_page_title>
                </observers>
            </controller_action_layout_generate_blocks_after>
        </events>
    </frontend>
</config>
.

Qui stiamo registrando un osservatore all'evento controller_action_layout_generate_blocks_after. Questo particolare evento verrà attivato, dopo che ogni blocco è generato dal layout. Quindi in questo particolare momento, possiamo accedere ad ogni blocco nel layout. Il blocco che siamo interessati qui è head Block (cioè Mage_Page_Block_Html_Head). Questo blocco è contiene l'elemento title.

File: app\code\local\Namespace\Module\Model\Observer.php

<?php
class Namespace_Module_Model_Observer
{

    const CATEGORY_TITLE_CONSTANT = 'blah blah blah blah';

    public function setCategoryPageTitle(Varien_Event_Observer $observer)
    {
        //ensure modification applies only for category page.
        if (Mage::registry('current_category')) {
            //get head block
            $head = $observer->getLayout()->getBlock('head');
            $title = $this->_prepareCategoryTitle();
            //set new title
            $head->setTitle($title);
        }
    }

    protected function _prepareCategoryTitle()
    {
        return Mage::registry('current_category')->getName()
            . '-'
            . self::CATEGORY_TITLE_CONSTANT;
    }
}
.

Questa è la nostra classe di osservatore. Il metodo che alterrà il titolo della categoria è setCategoryPageTitle(). Cosa fa questa funzione è semplice. Assicura che siamo in una pagina di categoria. Quindi afferrerà il blocco head e imposterà un nuovo titolo. Per impostare un nuovo titolo, stiamo utilizzando una funzione protetta _prepareCategoryTitle(). Ho definito questa funzione in base alla necessità di questa domanda. Attualmente ritornerà category name + blah blah blah. Quindi puoi modificare questo metodo e modificare il titolo in base alle tue esigenze.

.

Nota: qui nessuna modifica principale, nessuna alternanza nei modelli predefiniti. Questo è Perché questo è il metodo più pulito.

Fondamentalmente, il titolo di pagine dal campo del titolo Meta della categoria.

Per i vostri requisiti, è necessario riscrivere la classe Mage_Catalog_Block_Category_View su di lì è necessario controllare il titolo corrente utilizzando il blocco della testa di controllo getTitle() value e reset it value to default quando ha alcun valore.

Classe di riscrittura:

<?php
class Dev_AmitCatalog_Block_Catalog_Category_View extends Mage_Catalog_Block_Category_View
{
   protected function _prepareLayout()
    {
        parent::_prepareLayout();

        $this->getLayout()->createBlock('catalog/breadcrumbs');

        if ($headBlock = $this->getLayout()->getBlock('head')) {
            $category = $this->getCurrentCategory();
    if (!$headBlock->getTitle()) {
                $headBlock->setTitle($category->getName().' - blah blah blah blah');
            }
    }
}
.

config.xml:

  <global>
    ....
    <blocks>
      <amitcatalog>
        <class>Dev_AmitCatalog_Block</class>
      </amitcatalog>
            <catalog>
                <rewrite>
                    <category_view>Dev_AmitCatalog_Block_Catalog_Category_View</category_view>
                </rewrite>
            </catalog>
    </blocks>
.....
  </global>
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top