6

ホームページに固有のコンテンツを追加または非表示にするために、catalog/navigation/vert_nav.phtml で次の 2 つの方法を試しました。

if($this->getUrl('') == $this->getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true))):

また

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 の場合でも正常に動作します。

(マジェント 1.4.1.1)

4

5 に答える 5

4

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

app / code / core / Mage / Catalog / Block/Nagivation.phpをコピーするだけです。

に:

app / code / local / Mage / Catalog / Block / 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つのコピーをキャッシュします。

于 2012-09-13T11:13:15.473 に答える
4

ブロック Html キャッシュについて読みたいソースは次のとおりです。

  1. マジェントフォーラム
  2. いくつかのブログ
  3. inchoo ブログ

ブロックを完全に無効にするのではなく、キャッシュ キーを適切な方法で指定する方がパフォーマンスが向上します。したがって、次のことを行う必要があります。

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

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

    ご覧のとおり、ここでgetCacheKeyは抽象クラスのメソッドを使用しましたMage_Core_Block_Abstract

  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,
        );
    }
    

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

于 2012-09-13T10:32:41.467 に答える
2

現在のページ識別子が「ホーム」と等しいかどうかを確認することを提案するこれらの回答に追加するだけです。

と比較した方が間違いなく安全Mage::getStoreConfig('web/default/cms_home_page')です。

于 2015-05-26T17:19:53.943 に答える
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;
于 2014-08-12T12:01:25.117 に答える
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 ブロックを作成し、コンテンツを追加します。

于 2014-09-30T13:51:20.707 に答える