2012-09-13 43 views
6

を有効に検出しますまたははBLOCK_HTMLキャッシュで動作しますMagentoの.phtmlでのホーム・ページは、私がホームページに特定のコンテンツを追加したり、抑制するvert_nav.phtmlカタログ/ナビゲーション/で、次の二つの方法を試してみました

if(
Mage::getSingleton('cms/page')->getIdentifier() == 'home' && 
Mage::app()->getFrontController()->getRequest()->getRouteName() == 'cms' 
) : 

両方の作業罰金、BLOCK_HTMLキャッシュがオンになっているときしかし、それが最初に勤務し、後にホーム・ページは他のページ(else節の後に、私は下の使用のために意図されたコンテンツの表示を開始しながら、ダウン)。 BLOCK_HTMLを無効にすると、期待どおりに動作します。

興味深いことに私はpage/html/head.phtml(ホームページ固有のjavascript/css)とpage/html/header.phtml(ヘッダーバナーのホームページにのみ表示する必要があります)、BLOCK_HTMLがONの場合でも正常に動作します。

(Magentoの1.4.1.1)ここで

答えて

4

上記の答えが最善の解決策です。

は、あなたは、単にコピーすることができ、アプリ/コード/コア/メイジ/カタログ/ブロック/ Nagivation.php

へ:

アプリ/コード/ローカル/メイジ/カタログ/ブロック/ Nagivation。php

このようにgetCacheKeyInfo()メソッドを変更します。

/** 
* Get Key pieces for caching block content 
* 
* @return array 
*/ 
public function getCacheKeyInfo() 
{ 
    $shortCacheId = array(
     'CATALOG_NAVIGATION', 
     Mage::app()->getStore()->getId(), 
     Mage::getDesign()->getPackageName(), 
     Mage::getDesign()->getTheme('template'), 
     Mage::getSingleton('customer/session')->getCustomerGroupId(), 
     'template' => $this->getTemplate(), 
     'name' => $this->getNameInLayout(), 
     $this->getCurrenCategoryKey(), 
     // Your logic to make home/none home have different cache keys 
     Mage::getSingleton('cms/page')->getIdentifier() == 'home' ? '1' : '0' 
    ); 
    $cacheId = $shortCacheId; 

    $shortCacheId = array_values($shortCacheId); 
    $shortCacheId = implode('|', $shortCacheId); 
    $shortCacheId = md5($shortCacheId); 

    $cacheId['category_path'] = $this->getCurrenCategoryKey(); 
    $cacheId['short_cache_id'] = $shortCacheId; 

    return $cacheId; 
} 

この

ではなく、すべてのページで使用するための単一のテンプレートのコピーをキャッシュするよりも、2つのコピーをキャッシュしますホームページ/なし・ホームページのページのキー異なるキャッシュを行います。

+0

私のポストには、この行にちょっとしたタイプがあります: 'Mage :: getSingleton( 'cms/page') - > getIdentifier()== 'home'? '1'、 '0' - は 'Mage :: getSingleton( 'cms/page') - > getIdentifier()== 'home'にする必要がありますか? '1': '0'は正しく動作するようにしました。 –

+0

これはありがたいことですが、テストなしでブラウザに直接入力しました:) – Andrew

4

を使用すると、ブロックのHTMLキャッシュについて読みたいと思いますソースです:

  1. magento forum
  2. some blog
  3. inchoo blog

それブロックが完全に無効にならないようにパフォーマンスを改善するキャッシュキーをスマートな方法で指定してください。

  1. まず、.phtmlファイルのカスタムブロックを指定します。 Blockが何であるかわからない場合、またはブロックをテンプレートファイルに割り当てる方法は、here's Alan Stormのブログを参照してください。
  2. 第二に - あなたはブロックのコンストラクタに次のコードを追加する必要があります:

    $this->addData(array(
        'cache_lifetime' => 3600, 
        'cache_tags'  => array(Mage_Cms_Model_Block::CACHE_TAG), 
        'cache_key'  => $this->getCacheKey(), 
    )); 
    

    見ての通り、私は抽象クラスMage_Core_Block_AbstractからここgetCacheKey方法を使用していました。

  3. ここで、ロジックにcache_keyが機能することを確認する必要があります。 Mage_Core_Block_Abstract::getCacheKeyは実際にブロックの一意の値を指定する別の方法を使用します - getCacheKeyInfo。あなたのロジックを使用して、それを再定義する必要があります。

    public function getCacheKeyInfo() 
    { 
        $isHomepage = 0; 
        if (Mage::getSingleton('cms/page')->getIdentifier() == 'home') { 
         $isHomepage = 1; 
        } 
        return array(
         $this->getNameInLayout(), 
         $isHomepage, 
        ); 
    } 
    

    今、あなたはホームページのキャッシュキーは、他のすべてのあなたのページにキャッシュのキーとは異なりますし、あなたのキャッシュが有効な情報を返すことを確認することができます。

+0

優秀な回答、ありがとうございます。私はAndrewの答えを選んでしまいました。なぜなら、これは元々は書いていなかったテンプレートを使って作業していたため、すぐに修正されたからです。 – rwired

2

我々は使用

<!-- SNH CUSTOM --> 

    $route = Mage::app()->getFrontController()->getRequest()->getRouteName(); 

    $action = Mage::app()->getFrontController()->getRequest()->getActionName(); 

if($route == 'cms' && $action == 'index'): 

    <div class="grid_12"> 

     echo $this->getChildHtml('shopper_footer_partners'); 

    </div> 

endif; 
0

本当に最良の方法はあるに:

1更新あなたのレイアウトXML(local.xmlやテーマcustom.xml)

<!-- CUSTOM: ADD NEW FOOTER BLOCK AT BOTTOM FOR PARTNERS --> 
<cms_index_index> 
    <reference name="footer"> 
    <block type="cms/block" name="footer_block_extra"> 
     <action method="setBlockId"><block_id>footer_block_extra</block_id></action> 
    </block> 
    </reference> 
</cms_index_index> 

とステップ2追加テンプレート内のブロックを必要とするこのコードphtml(多くの場合/page/html/footer.phtml)

<!-- SNH CUSTOM --> 
<div class="grid_12"> 
    <?php echo $this->getBlockHtml('footer_block_extra'); ?> 
</div> 

と手順3は、ID「footer_block_extra」を使用してバックエンドに新しいCMSブロックを作成し、コンテンツを追加します。

2

現在のページ識別子が "home"と等しいかどうかを確認することを提案するだけです。

Mage::getStoreConfig('web/default/cms_home_page')と比較するのは間違いなく安全です。

関連する問題