2011-01-07 8 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()): ?>`. 

관련 항목을로드하는 데 도움을 주시면 도움이됩니다.

+0

간단한 빠른 참고서입니다. 4 줄짜리 줄을 들여 쓰기하면 코드 서식을 얻게되며,이 부분 주위에 코드 예제를 게시하는 것이 좋습니다. 이것이 편집 된 이유입니다. –

+0

시도했지만 작동하지 않았다. 그것은 내가 피곤할 때하는 일입니다. – Anthony

답변

5

나는 당신이하려는 것을 잘 따르지 않았지만, 왜 당신이 당신의 실수를하는지 알 수 있습니다. 당신은 누구의 클래스 별칭/클래스

catalog/product_view 
Mage_Catalog_Block_Product_View 

하지만 당신이 주식 catalog/product/list/related.phtml 템플릿이 catalog/product_list_related 블록 와 함께 사용하도록 만들어진

catalog/product/list/related.phtml 

으로이 블록의 템플릿을 설정하는 것입니다 블록을 만드는 만 있고 catalog/product_view 블록은 아닙니다.

catalog/product_list_related 블록 (Mage_Catalog_Block_Product_List_Related)에 대한 클래스 정의를 살펴보면 getItems() 메소드가 있음을 알 수 있습니다.

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

컬렉션을 반환합니다. 컬렉션은이 컬렉션은 당신이 당신의 오류를 얻고있는 이유입니다 catalog/product_view 블록으로 설정하지됩니다 _prepareData 방법

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

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

설정됩니다.

위의 코드에서 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; 

} 

ajax 호출을 통해 관련 블록의 html을 얻는 것은 제품이 장바구니에 추가 된 직후입니다. 비교적 도움이 될 수 있습니다.

관련 문제