Pergunta

Percebo que o atributo 'produto em destaque' existe na versão mais recente do Magento.Como posso exibir meus produtos em destaque na página inicial do tema RWD?

Obrigado

Foi útil?

Solução

Não vejo esse atributo como padrão adicionado ao Magento 1.9.x; no entanto, é muito fácil criar uma coleção de produtos com base em um atributo de produto personalizado, ou seja,'produto em destaque'.

Depois de construir a coleção, você pode criar o HTML que deseja exibir por meio de um arquivo de modelo, ou seja,um recurso de produto único ou um controle deslizante de vários produtos.

As etapas para fazer isso são

  • crie um novo método personalizado de coleta de produtos
  • crie um novo bloco de layout
  • criar um novo modelo

Por exemplo, se eu quiser criar uma coleção de produtos para produtos visíveis com o atributo 'featured_product', crio um novo arquivo chamado Featured.php em magento/app/code/local/Mage/Catalog/Block/Product

<?php
class Mage_Catalog_Block_Product_Featured extends mage_Catalog_Block_Product_Abstract
{
    protected $_productsCount = null;
    protected $_categoryId = null;

    const DEFAULT_PRODUCTS_COUNT = 12;

/**
 * Initialize block's cache
 */
protected function _construct()
{
    parent::_construct();

    $this->addColumnCountLayoutDepend('empty', 6)
        ->addColumnCountLayoutDepend('one_column', 5)
        ->addColumnCountLayoutDepend('two_columns_left', 4)
        ->addColumnCountLayoutDepend('two_columns_right', 4)
        ->addColumnCountLayoutDepend('three_columns', 3);

    $this->addData(array(
        'cache_lifetime'    => 86400,
        'cache_tags'        => array(Mage_Catalog_Model_Product::CACHE_TAG),
    ));
}

/**
 * Get Key pieces for caching block content
 *
 * @return array
 */
public function getCacheKeyInfo()
{
    return array(
       'CATALOG_PRODUCT_NEW',
       Mage::app()->getStore()->getId(),
       Mage::getDesign()->getPackageName(),
       Mage::getDesign()->getTheme('template'),
       Mage::getSingleton('customer/session')->getCustomerGroupId(),
       'template' => $this->getTemplate(),
       $this->getProductsCount(),
       Mage::app()->getStore()->getCurrentCurrencyCode(),
       empty($this->_categoryId) ? "ALL" : $this->_categoryId
    );
}

/**
 * Prepare collection with new products and applied page limits.
 *
 * return Mage_Catalog_Block_Product_New
 */
protected function _beforeToHtml()
{
    $collection = Mage::getResourceModel('catalog/product_collection');
    $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());

    $collection = $this->_addProductAttributesAndPrices($collection)
        ->addStoreFilter()
        ->addAttributeToSelect('featured_product')
        ->addFieldToFilter(array(
            array('attribute'=>'ext_enable','eq'=>'1'),
        ))
        ->addAttributeToSort('name', 'desc')
        ->setPageSize($this->getProductsCount())
        ->setCurPage(1)
    ;

    // Limit to a specific category
    //if(!empty($this->_categoryId)) $collection->addCategoryFilter(Mage::getModel("catalog/category")->load($this->_categoryId));

    $this->setProductCollection($collection);

    return parent::_beforeToHtml();
}

/**
 * Set a specific category to take the products from.
 *
 * @param $catid
 * @return Mage_Catalog_Block_Product_New
 */
public function setCategory($catid)
{
    $this->_categoryId = (int)$catid;
    return $this;
}

/**
 * Set how much product should be displayed at once.
 *
 * @param $count
 * @return Mage_Catalog_Block_Product_New
 */
public function setProductsCount($count)
{
    $this->_productsCount = $count;
    return $this;
}

/**
 * Get how much products should be displayed at once.
 *
 * @return int
 */
public function getProductsCount()
{
    if (null === $this->_productsCount) {
        $this->_productsCount = self::DEFAULT_PRODUCTS_COUNT;
    }
    return $this->_productsCount;
    }
}

Em seguida, adiciono o seguinte ao meu layout, por ex.se eu quiser que o bloco apareça na página inicial, posso colocá-lo na seção cms_index_index

            <block type="catalog/product_featured" name="catalog.product.featured" alias="featured_products">
            <action method="setTemplate"><template>catalog/product/featured.phtml</template></action>
        </block>

Então, no meu modelo, crio um novo arquivo em catálogo/produto chamado feature.phtml, aqui posso percorrer a coleção de produtos e criar o html que desejo exibir, por exemplo.aqui está uma lista simples com marcadores.

    <?php
    $_helper = $this->helper('catalog/output');
    $_productCollection = $this->getProductCollection();
?>
<div class="featured-products">
    <p>Featured Products - <?php echo count($_productCollection) ?></p>
    <ol class="featured-products-list" id="featured-products-list">
    <?php foreach ($_productCollection as $_product): ?>
        <li><?php echo $_product->getName() ?></li>
    <?php endforeach; ?>
    </ol>
</div>

Quando eu atualizar os caches da minha loja e ir para a página inicial, o HTML do produto em destaque será exibido.

Existem muitos módulos que irão ajudá-lo a fazer isso, mas você pode conseguir isso rapidamente com este exemplo ou criando seu próprio módulo.

Aqui está um link para uma solução semelhante no wiki do Magento https://wiki.magento.com/display/m1wiki/How+to+Create+a+Featured+Product

Outras dicas

Siga este link para buscar o produto do recurso no homepage http://inchoo.net/magento/featured-products-on-magento-frontpage-tutorial/

http://inchoo.net/magento/featured-products-on-magento-frontpage /

Neste tutorial estou explicando como apresentar o produto na página inicial do Magento.

No arquivo phtml:

<?php
$featuredProducts = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('featured_product', 1)
->addAttributeToFilter('status', 1);

?> Em local.xml

<cms_index_index>
<reference name="content">
    <block type="core/template" name="home.featured.product" template="custom/featuredproduct.phtml"/>
</reference>

consulte o tutroial para obter uma explicação passo a passo.http://www.pearlbells.co.uk/adding-custom-product-attributes-in-magento/

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