정확합니다. 나는 이것이 버그인지 잘 모르겠다. (하지만 기능적으로 현명하다. 버그 일 것이다.)
그래서 1.6 (및 이전 버전)/1.7의 차이는 다음과 같습니다
모델
Mage_Sales_Model_Order
는
protected function _getItemsRandomCollection($limit, $nonChildrenOnly = false){
$(...)->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInSiteIds()) // This is Visibility check (its fine)
foreach ($collection as $item) {
$product = $productsCollection->getItemById($item->getProductId());
if ($product) {
$item->setProduct($product); // Set Object Data ('product') if it exists
}
}
}
그래서이 방법을 가지고 있습니다 마지막으로 주문한 아이템 컬렉션에있는 이전 코드 erty는 반환 된 제품 객체와 반환되지 않은 객체를 보유하는 '제품'이라고합니다.
위의 코드는 문제가 없으며 아무런 문제가 없습니다. 모델
에서
Mage_Sales_Block_Reorder_Sidebar
getItems 방법은 다음과 같습니다
/**
* Get list of last ordered products
*
* @return array
*/
public function getItems()
{
$items = array();
$order = $this->getLastOrder();
$limit = 5;
if ($order) {
$website = Mage::app()->getStore()->getWebsiteId();
foreach ($order->getParentItemsRandomCollection($limit) as $item) {
if ($item->getProduct() && in_array($website, $item->getProduct()->getWebsiteIds())) {
$items[] = $item;
}
}
}
return $items;
}
=================== ========================================================================================================== ============ Magento 1.6 및 이전 버전
으로 전화 할 때 $ item-> getProduct(); (- 제품 인스턴스 - Mage_Catalog_Model_Product) 사이드 블록,
그것은 객체 속성 반환 (_getItemsRandomCollection())
상기 방법으로 설정되거나 설정되지 않은 경우에는 NULL 반환한다.이 제품 객체를 반환하는 경우
그래서 항목은 ============= 사이드 바 블록에 표시됩니다 그렇지 않은 경우 반환 배열은 가상 항목이
포함되지 않습니다 ========================================================================================================== ==================
당신이 $ 항목 -> getProduct를 호출 젠토 1.7에서 (); 사이드 블록,
=== >>이 방법은 모델에서 구현
Mage_Sales_Model_Order_Item
는 메소드를 호출 할 때, 그것은 (그것을 모델에서 실행될 객체 속성을 찾지 않습니다.)
그래서 방법 (_getItemsRandomCollection은()) 때문에 보이지 또는 무언가 (객체 속성 '제품'을 설정하지 않은 경우는 경우
/**
* Retrieve product
*
* @return Mage_Catalog_Model_Product
*/
public function getProduct()
{
if (!$this->getData('product')) { // If no object attribute set with name ('product')
$product = Mage::getModel('catalog/product')->load($this->getProductId()); // it will always return product instance with that product id.
$this->setProduct($product); // set it to the current sidebar item
}
return $this->getData('product'); // return the object property 'product'
}
그래서 메소드 구현을 살펴 경우 이 방법은
가 예 나는이 버그 고려한다. 직접 시정 또는 아무것도 확인하지 않고 제품 ID에 의해 할당하고이 고정 될 필요가
그 이유에 대한 대답은
================== ===========================
해결책은 매우 간단합니다.
1. 맞춤 모듈을 만듭니다.
2. 모델을 확장/다시 작성하십시오.
Mage_Sales_Model_Order_Item
3.Override 방법 및 (코멘트 코드 블록) 또는 방법에서의 가시성 검사를 추가한다. 해결 방법 1 (항목 제품을 설정하는 코드 블록에 주석 달기).
/**
* Retrieve product
*
* @return Mage_Catalog_Model_Product
*/
public function getProduct()
{
/** comment from here
*if (!$this->getData('product')) {
* $product = Mage::getModel('catalog/product')->load($this->getProductId());
* $this->setProduct($product);
*}
* Till here.
*/
return $this->getData('product');
}
또는
해결 방법 2 : 아래와 같은 방법으로 가시성 검사를 추가합니다.
/**
* Retrieve product
*
* @return Mage_Catalog_Model_Product
*/
public function getProduct()
{
if (!$this->getData('product')) {
$product = Mage::getModel('catalog/product')->load($this->getProductId());
if(!$product->isVisibleInSiteVisibility()) // add visibility check here
{
$this->setProduct($product);
}
}
return $this->getData('product');
}
나는 이것을하는 데 약간의 시간을 보냈다.
플러그인 이름은 무엇입니까? – Meabed
직접 개발했습니다.나는 코드를 공유하거나 개발자 환경에 접근 할 수있다. 링크는 다음과 같다 : http://www.magentocommerce.com/boards/viewthread/327899/ – shredding
당신의 질문은 모호하다. 항목이 1.6과 1.7 모두에서'getItems()'에 있었는지 여부는 확실하지 않습니다. 위에서 언급 한 블록에 해당하는 블록 템플릿'/ app/design/frontend/base/default/template/sales/reorder/sidebar.phtml '을 사용하고 있습니까? 맞춤 코드 또는 템플릿을 사용하는 경우 게시하십시오. 또한 원하는 동작을 게시하십시오. –