0

個々の製品ページに 2 つの追加タブを設定しました。これらのタブは、製品ごとに異なる CMS ブロックから情報を取得する必要があります。しかし、製品ページを表示すると、特定の製品の CMS ブロックからではなく、作成した CMS ブロックの 1 つからまったく同じ情報を取得しています。

トラブルシューティングを試みているときに気づいたことがいくつかあります。

1) Magento キャッシュを更新して製品ページに移動すると、そのページの正しい情報が表示されます。次に、他の製品ページに移動すると、Magento キャッシュを更新した後に最初に表示した製品の情報が常に表示されます。

2) これは商品カテゴリにも関係しているようです。2 つの製品カテゴリがあります。カテゴリ 1 のすべての製品には、同じ CMS ブロックの情報が表示されます。カテゴリ 2 のすべての製品には同じ CMS ブロックの情報が表示されますが、これらの製品の CMS ブロックの情報は実際にはカテゴリ 1 の製品とは異なりますが、すべて同じです。

すべてを設定した方法は次のとおりです。

1) 製品ごとに異なる情報を持つ個別の CMS ブロックを作成しました。

2) textarea 属性を作成し、正しい属性セットに追加しました。各製品について、その製品の CMS ブロックに ID を入力しました。再確認したところ、すべての製品に異なる ID が入力されています。

3) app/design/frontend/rwd/default/layout/catalog.xml に、2 つの新しいタブを表示するために以下を追加しました。

<!-- Features -->
<block type="catalog/product_view_attributes" name="product.features" as="features" template="catalog/product/view/features.phtml">
<action method="addToParentGroup"><group>detailed_info</group></action>
<action method="setTitle" translate="value"><value>Features</value></action>
</block>
<!-- END Features -->

<!-- TECH SPECS -->
<block type="catalog/product_view_attributes" name="product.tech_specs" as="techspecs" template="catalog/product/view/tech_specs.phtml">
<action method="addToParentGroup"><group>detailed_info</group></action>
<action method="setTitle" translate="value"><value>Tech Specs</value></action>
</block>
<!-- END TECH SPECS -->

4) 最後に、2 つのファイルを作成しました

app/design/frontend/rwd/default/template/catalog/product/view/features.phtml アプリ/design/frontend/rwd/default/template/catalog/product/view/tech_specs.phtml

コードは次のとおりです。

features.phtml

<?php
$_product = $this->getProduct();
$attribute = $_product->getResource()->getAttribute('features');

if ( is_object($attribute) ) {
    $identifier = $_product->getData("features");
}
?>

<?php if ($_sizeBlock = Mage::app()->getLayout()->createBlock('cms/block')->setBlockId($identifier)): ?>
    <div class="std">
        <?php echo $_sizeBlock->toHtml() ?>
    </div>
<?php endif; ?>

tech_specs.phtml

<?php
$_product = $this->getProduct();
$attribute = $_product->getResource()->getAttribute('tech_specs');
if ( is_object($attribute) ) {
    $identifier = $_product->getData("tech_specs");
}
?>

<?php if ($_sizeBlock = Mage::app()->getLayout()->createBlock('cms/block')->setBlockId($identifier)): ?>
    <div class="std">
        <?php echo $_sizeBlock->toHtml() ?>
    </div>
<?php endif; ?>

ここで何が起こっているのか誰にも分かりますか?

4

2 に答える 2

0

理解した。これは、Magento が CMS ブロックをキャッシュしているためです。

解決:

app/code/core/Mage/Cms/Block/Block.php をコピーします。

app/code/local/Mage/Cms/Block/ に (不足しているフォルダー階層を追加する必要がありました)

次に、Block.php を編集します。

保護された関数 _construct() 内

$this->setCacheLifetime(false); を変更します。

$this->setCacheLifetime(null); に

CMS ブロックのキャッシュが不要になり、動的コンテンツが期待どおりに表示されます。

于 2015-09-06T18:01:24.773 に答える
0

属性が動的である場合は、その内容をハッシュしてキャッシュ タグに追加することができます。「はい」または「いいえ」の属性の例を参照してください。

di.xml で Magento 2.1 ベンダーのブロックを書き換えた後、次の操作を行います。

namespace Dpl\Xxx\Block\Catalog\Product\View;

use Magento\Framework\Pricing\PriceCurrencyInterface;

class Attributes extends \Magento\Catalog\Block\Product\View\Attributes
{
    /**
     * Retrieve current product model
     *
     * @return \Magento\Catalog\Model\Product
     */
    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Framework\Registry $registry,
        PriceCurrencyInterface $priceCurrency,
        array $data = []
    ) {

        parent::__construct($context, $registry, $priceCurrency, $data);
        $this->setCacheTag($this->getProduct()->getId().'-'.$this->getProduct()->getXxxopen();
    }
}
?>

よろしく ;)

于 2017-11-17T17:19:31.957 に答える