Pergunta

Tendo seguido cuidadosamente a resposta para lidar com itens de venda cruzada (Como aumentar o número de itens de venda cruzada no carrinho?) tudo parece funcionar bem... exceto a instrução final de adição:

protegido $_maxItemCount = Mage::getStoreConfig('mycompany_section/mycompany_group/mycompany_field');

gera um erro assim:

Erro de análise:erro de sintaxe, '(' inesperado, esperando ',' ou ';' em /home/xxx/public_html/app/code/local/xxx/Checkout/Block/Cart/Crosssell.php

Qualquer ajuda para este novato em Magento/PHP seria muito apreciada :)

Versão Magento.1.9.2.1

EDITAR:

Saída usando Crosssell.php com alteração @simonthesorcerer da seguinte forma:

class Abc_Checkout_Block_Cart_Crosssell extends Mage_Catalog_Block_Product_Abstract
{
/**
 * Items quantity will be capped to this value
 *
 * @var int
 */

      protected $_maxItemCount;

      protected function _construct() { 
$this->__maxItemCount = Mage::getStoreConfig('abc_section/abc_group/abc_input');
return parent::_construct(); }

/**
 * Get crosssell items
 *
 * @return array
 */
public function getItems()
{
    $items = $this->getData('items');
    if (is_null($items)) {
        $items = array();
        $ninProductIds = $this->_getCartProductIds();
        if ($ninProductIds) {
            $lastAdded = (int) $this->_getLastAddedProductId();
            if ($lastAdded) {
                $collection = $this->_getCollection()
                    ->addProductFilter($lastAdded);
                if (!empty($ninProductIds)) {
                    $collection->addExcludeProductFilter($ninProductIds);
                }
                $collection->setPositionOrder()->load();

                foreach ($collection as $item) {
                    $ninProductIds[] = $item->getId();
                    $items[] = $item;
                }
            }

            if (count($items) < $this->_maxItemCount) {
                $filterProductIds = array_merge($this->_getCartProductIds(), $this->_getCartProductIdsRel());
                $collection = $this->_getCollection()
                    ->addProductFilter($filterProductIds)
                    ->addExcludeProductFilter($ninProductIds)
                    ->setPageSize($this->_maxItemCount-count($items))
                    ->setGroupBy()
                    ->setPositionOrder()
                    ->load();
                foreach ($collection as $item) {
                    $items[] = $item;
                }
            }

        }

        $this->setData('items', $items);
    }
    return $items;
}

/**
 * Count items
 *
 * @return int
 */
public function getItemCount()
{
    return count($this->getItems());
}

/**
 * Get ids of products that are in cart
 *
 * @return array
 */
protected function _getCartProductIds()
{
    $ids = $this->getData('_cart_product_ids');
    if (is_null($ids)) {
        $ids = array();
        foreach ($this->getQuote()->getAllItems() as $item) {
            if ($product = $item->getProduct()) {
                $ids[] = $product->getId();
            }
        }
        $this->setData('_cart_product_ids', $ids);
    }
    return $ids;
}

/**
 * Retrieve Array of product ids which have special relation with products in Cart
 * For example simple product as part of Grouped product
 *
 * @return array
 */
protected function _getCartProductIdsRel()
{
    $productIds = array();
    foreach ($this->getQuote()->getAllItems() as $quoteItem) {
        $productTypeOpt = $quoteItem->getOptionByCode('product_type');
        if ($productTypeOpt instanceof Mage_Sales_Model_Quote_Item_Option
            && $productTypeOpt->getValue() == Mage_Catalog_Model_Product_Type_Grouped::TYPE_CODE
            && $productTypeOpt->getProductId()
        ) {
            $productIds[] = $productTypeOpt->getProductId();
        }
    }

    return $productIds;
}

/**
 * Get last product ID that was added to cart and remove this information from session
 *
 * @return int
 */
protected function _getLastAddedProductId()
{
    return Mage::getSingleton('checkout/session')->getLastAddedProductId(true);
}

/**
 * Get quote instance
 *
 * @return Mage_Sales_Model_Quote
 */
public function getQuote()
{
    return Mage::getSingleton('checkout/session')->getQuote();
}

/**
 * Get crosssell products collection
 *
 * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Link_Product_Collection
 */
protected function _getCollection()
{
    $collection = Mage::getModel('catalog/product_link')->useCrossSellLinks()
        ->getProductCollection()
        ->setStoreId(Mage::app()->getStore()->getId())
        ->addStoreFilter()
        ->setPageSize($this->_maxItemCount);
    $this->_addProductAttributesAndPrices($collection);

    Mage::getSingleton('catalog/product_status')->addSaleableFilterToCollection($collection);
    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
    Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($collection);

    return $collection;
}
}
Foi útil?

Solução

Você está declarando uma propriedade de classe, mas não pode chamar uma função ao fazer isso.

Em vez disso, altere a declaração assim:

protected $_myPropertyName;

Presumo que seu bloco estenda Mage_Core_Block_Abstract.Você deve então substituir a função _construct() e preencher a propriedade lá:

protected function _construct() { 
$this->_myPropertyName = Mage::getStoreConfig('configname');
return parent::_construct(); }

Desculpe pela formatação, estou no celular.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top