2

サーバーにWordpressをインストールし、WordpressとMagentoを統合するFishpig拡張機能をインストールしました. フロントエンドの製品ページ (製品の説明とアップセル製品がある場所) の新しいタブに関連する投稿を追加して、ブログの投稿と製品を関連付ける拡張機能の機能を利用したいと考えています。製品ページには「関連するブログ投稿」というタイトルの新しいタブがあり、選択すると、投稿のタイトルと抜粋が希望どおりに表示されます。問題は、関連するブログ投稿がない場合でも、そのタブが表示されることです。空のときに非表示にするにはどうすればよいですか?

おそらく、私が見逃している単純なものがあります。タブを追加した方法は次のとおりです。

1) このファイルapp/design/frontend/base/default/layout/wordpress.xmlは、関連する投稿がフロントエンドの製品ページに表示されるブロックを確立します。このファイルの下部近くで、参照名をproduct.info.additionalから *related_blog_posts* に変更しました。

2) ファイル: app/design/frontend/default/{template}/layout/catalog.xmlの 210 行目付近に、次のコードを配置しました。製品説明と製品アップセルの同様のコード部分の間に挿入しました。

<action method="addTab" translate="title" module="catalog"><alias>related_blog_posts</alias><title>Related Blog Posts</title><block>catalog/product_list_relatedposts</block><template>catalog/product/list/relatedposts.phtml</template></action>

3) 新しいファイルを追加しました: app/code/local/Mage/Catalog/Block/Product/List/relatedposts.php このファイルに次のコードを追加しました:

class Mage_Catalog_Block_Product_List_Relatedposts extends Mage_Core_Block_Template
{
    protected $_list;
    public function __construct()
    {
        parent::__construct();
        $this->setTemplate('catalog/product/view/additional.phtml');
    }
    public function getChildHtmlList()
    {
        if (is_null($this->_list)) {
            $this->_list = array();
            foreach ($this->getSortedChildren() as $name) {
                $block = $this->getLayout()->getBlock($name);
                if (!$block) {
                    Mage::exception(Mage::helper('catalog')->__('Invalid block: %s.', $name));
                }
                $this->_list[] = $block->toHtml();
            }
        }
        return $this->_list;
    }
}

4) 新しいファイルapp/design/frontend/default/{template}/template/catalog/product/list/Relatedposts.phtmlを追加し、このファイルに次のコードを追加しました:

<?php foreach ($this->getChildHtmlList () as $_html): ?>
    <div class="collateral-box">
        <?php echo $_html ?>
    </div>
<?php endforeach; ?>

5) ファイルapp/design/frontend/base/default/template/wordpress/post/associated/list.phtmlで、次のコードを変更しました。

<ul>
<?php foreach($posts as $post): ?>
    <li>
        <a href="<?php echo $post->getPermalink() ?>" title="<?php echo $this->escapeHtml($post->getPostTitle()) ?>"><?php echo $this->escapeHtml($post->getPostTitle()) ?></a>
    </li>
<?php endforeach; ?>
</ul>

に:

<div class="related-posts">
    <?php foreach($posts as $post): ?>
        <h3><a href="<?php echo $post->getPermalink() ?>" title="<?php echo $this->escapeHtml($post->getPostTitle()) ?>"><?php echo $this->escapeHtml($post->getPostTitle()) ?></a></h3>
        <?php $post->setExcerptSize($this->getExcerptLength()) ?>
        <p class="related-post-excerpt"><?php echo $post->getPostExcerpt() ?></p>
    <?php endforeach; ?>
</div>

この最後の変更により、タイトルを表示するだけでなく、関連する各投稿に抜粋が追加されます。

6) キャッシュをクリアし、サイトを再コンパイルしました。

概要:フロントエンドの製品ページに新しいタブが表示され、関連するブログ投稿がタブ内に表示されます。ただし、その製品に関連するブログ投稿がない場合でも、タブは表示されます。Relatedposts.phtml のコードを if/count 条件でラップする複数の方法を試しましたが、何も動作しません。コンテンツがないときに新しいタブが表示されないようにするにはどうすればよいですか?

4

1 に答える 1

0

私はこのようなことを試してみるか、あなたがある種のカウントについて言及したように、

app/design/frontend/default/{template}/template/catalog/product/list/Relatedposts.phtml

<?php 
if($this->getChildHtmlList()): ?>
    <?php foreach ($this->getChildHtmlList () as $_html): ?>
        <div class="collateral-box">
            <?php echo $_html ?>
        </div>
    <?php endforeach; ?>
<?php endif; ?>

また、コンテンツとして解釈されてタブが作成されるため、このブロックが空白を返さないようにする必要もあります。カスタムタブもありましたが、これが問題でした。問題が発生した場合は、Zend_Debug::dump() で $this->getChildHtmlList() を実行し、何が生成されるかを確認してください。

于 2013-12-16T03:44:39.343 に答える