2012-01-26 10 views
1

Magento 1.5サイトのフロントエンドレイアウトを変更しています。製品のレビューを別のページから「詳細情報」の1つに移動しようとしています。カタログ内の製品ページの下部にあるタブをクリックします。その結果、このタブのコンテンツを条件付きにしたい - 既存のレビューが存在する場合はタブを表示し、まだレビューがない場合はレビュー作成フォームを表示するようにします。条件付きで商品ページタブでブロックを表示

これまで私が試したことは、私がまとめようとしているものです。

/app/design/frontend/our-site/default/review.xml:

<catalog_product_view translate="label"> 
    <label>Catalog Product View</label> 
    <reference name="product.info.tabs"> 
     <action method="addTab" translate="title" module="review"> 
      <alias>product.reviews</alias> 
      <title>Reviews</title> 
      <block>review/form</block> 
      <template>review/form.phtml</template> 
     </action> 
    </reference> 
</catalog_product_view>            

"レビュー" と呼ばれるタブの下に表示されている 'あなたのレビューを残して' 形式でこのXML結果製品ページに表示されます。

私は/app/code/core/Mage/Catalog/Block/Product/View/Tabs.phpで 'addTab関数を追跡しました。私はちょっとそんなことができます。しかし、私はXMLを使ってページ上に何を表示するかを条件付きで判断する方法を見たことはないと思います。

私はsummary.phtmlファイルは、私が欲しいもののような何かをすることに気づいた:それはあります。それはレビューがある場合、まだ、レビューがありません場合、これは、そうでないんです」の条件付きの機能を持っているように見えます

if ($this->getReviewsCount()): ?> 
    <div class="ratings"> 
     <?php if ($this->getRatingSummary()):?> 
      <div class="rating-box"> 
       <div class="rating" style="width:<?php echo $this->getRatingSummary() ?>%"></div> 
      </div> 
    <?php endif;?> 
     <p class="rating-links"> 
      <a href="<?php echo $this->getReviewsUrl() ?>"><?php echo $this->__('%d Review(s)', $this->getReviewsCount()) ?></a> 
      <span class="separator">|</span> 
      <a href="<?php echo $this->getReviewsUrl() ?>#review-form"> 
       <?php echo $this->__('Add Your Review') ?></a> 
     </p> 
    </div> 
<?php elseif ($this->getDisplayIfEmpty()): ?> 
    <p class="no-rating"> 
     <a href="<?php echo $this->getReviewsUrl() ?>#review-form"> 
      <?php echo $this->__('Be the first to review this product') ?> 
     </a> 
    </p> 
<?php endif; ?> 

。どのようにレンダリングチェーンの早い段階で呼び出して、ページにレンダリングされるブロックのコンテキストを決定するのですか?これはXML部分のphtml部分で行う必要があるタスクですか?

答えて

1

あなた自身のphtmlファイルを作成し、その要約を開始点としてコピーする必要がありますが、他のページに含まれているブロックをレンダリングする代わりに、elseにコピーする必要があります。そのブロックのxmlファイルを調整して、テンプレート属性を置き換えて新しいテンプレートファイルを使用するよう指示することができます。レビューフォームブロックをxmlレイアウトを使用して子として追加し、次にecho $this->getChildHtml('as_field_of_block');を使用するか、テンプレートにこれをハードコードすることもできます。前者のオプションはおそらくより柔軟ですが、xmlを少し微調整する必要があります。

+0

だから私は、config XMLだけで条件を表現する方法がないこと、そしてこれを(正確には反対に)素早くやりたいのであれば、 .phtml'ファイルのPHP - そうですか? –

+0

判明したように、私がやりたいことをした既存の.phtmlファイルがありましたので、私はそれを使用しました。私はあなたのアドバイスを使って、phtmlファイルが私が望んだことを実現したことに気付きました。私はこの答えを受け入れています。ありがとう。 :) –

関連する問題