2011-01-07 11 views
1

私は、文字通りcatalog/product/view.phtmlページの横にある顧客の製品ページを持っています。基本的にはそのページとほんの少し例外があります。それは私が、製品情報を取得するためにDBからデータをフェッチしてロードを実行する必要があるので、私は通常の製品ページとそれを組み合わせることはできません基本的にタイプページ「当日の製品」だMagentoおよび関連製品のヘルプ

$_product = Mage::getModel('catalog/product')->load($row['productid']); 

へ長い話をすると、すべての作品(すべての子供のhtmlブロックを含む)は、関連する商品を例外として例外なく動作します。

:エラーを返してすべてが

echo $this->getLayout()->createBlock('catalog/product_view')->setTemplate('catalog/product/list/related.phtml')->toHtml();` 

:私は

Mage::register('product', $_product); 

でレジストリに製品を保存し、その後で関連商品をロードしようと負荷後

Fatal error: Call to a member function getSize() on a non-object in catalog/product/list/related.phtml on line 29`, 

であり、ライン29は

<?php if($this->getItems()->getSize()): ?>`. 

関連するものを読み込むのに役立つものは、appreicatedとなります。

+0

ちょっと速いFYI。行を4文字分インデントした場合、コードの書式設定が行われ、コード例がこれらの部分の周りに配置されるのが望ましい方法です。それが編集の理由です。 –

+0

私は試みましたが、うまくいかなかった。それは私が疲れているときにそれをするために得るものです。 – Anthony

答えて

5

私はあなたのやりたいことにはまったく従っていませんでしたが、なぜあなたのエラーが出ているのか分かります。あなたは、そのクラスのエイリアス/クラス

catalog/product_view 
Mage_Catalog_Block_Product_View 

ですが

catalog/product/list/related.phtml 

株式catalog/product/list/related.phtmlテンプレートがcatalog/product_list_relatedブロックで使用するために建設されたとして、あなたはこのブロックのテンプレートを設定しているブロックを作成しているブロックcatalog/product_viewではなく、のみです。

catalog/product_list_relatedブロック(Mage_Catalog_Block_Product_List_Related)のクラス定義を見てみると、getItems()メソッドがあることがわかります。

public function getItems() 
{ 
    return $this->_itemCollection; 
} 

コレクションを返します。コレクションは_prepareData方法

protected function _prepareData() 
{ 
    $product = Mage::registry('product'); 
    /* @var $product Mage_Catalog_Model_Product */ 

    $this->_itemCollection = $product->getRelatedProductCollection() 
    ... 

に設定されているこのコレクションは、あなたがエラーを取得している理由ですcatalog/product_viewブロック、で設定されることはありません。

上記のコードでは、catalog/product_list_relatedブロックの作成に切り替えると、エラーはなくなります。

+0

もちろん、それは動作します。今、完璧な意味合いがあります。ありがとう。 – Anthony

0
public function relatedproductsAction(){ 

    $this->loadLayout(); 
    $relatedBlock = ""; 

    $rec_prod_id = Mage::getSingleton('checkout/session')->getLastAddedProductId(true); 
    $_product = Mage::getModel('catalog/product')->load($rec_prod_id); 
    Mage::register('product', $_product); 


    $relatedBlock = $this->getLayout()->createBlock('catalog/product_list_related')->setTemplate('catalog/product/related.phtml')->toHtml(); 

    echo $relatedBlock; 
    exit; 

} 

商品がカートに追加された直後に、関連ブロックのhtmlをajax呼び出しで取得します。比較的役に立ちます。

関連する問題