magento主页上的特色产品


Featured products in magento home page

我想在主页上展示特色产品。因此,我在app/code/local/FeaturedProduct/Catalog/block/Product/Featureed.php中创建了自定义模块和块文件

代码:

class FeaturedProduct_Catalog_Block_Product_Featured extends Mage_Catalog_Block_Product_List
{
protected $_productCollection;
public function fetchProducts()
{
   $this->productCollection =Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('*')
    ->addFieldToFilter('featured_products', array('eq' => '1'));
  return $this->productCollection;
}
}

app/code/local/FeaturedProduct/Catalog/etc/config.xml中创建了一个配置文件

代码:

<!--?xml version="1.0" encoding="UTF-8"?-->
<config>
<modules>
    <featuredproduct_catalog>
        <version>1.0.0</version>                        
    </featuredproduct_catalog>
</modules>
<global>
    <blocks>
        <featuredproducts>
            <class>FeaturedProduct_Catalog_Block</class>
        </featuredproducts>
    </blocks>
</global>
<frontend>
    <layout>
        <updates>
            <featuredproducts>
                <file>featuredproduct.xml</file>
            </featuredproducts>
        </updates>
    </layout>
</frontend>
</config>

已在app/design/frontend/rwd/default/layout/featuredproduct.xml位置创建featuredproduct.xml

代码:

<!--?xml version="1.0" encoding="UTF-8"?-->
<layout version="0.1.0">
<cms_index_index translate="label">
    <reference name="content">
        <block type="featuredproducts/products_featured" name="featured_product_collection" template="catalog/product/featured.phtml">
            <action method="setColumnCount">
                <columns>4</columns>
            </action>
        </block>
    </reference>
</cms_index_index>
</layout>

创建了一个视图文件"app/design/frontend/rwd/default/template/controlog/product/featureed.phtml"

代码:

<!--?php
$_featuredProductCollection = $this--->fetchProducts();
$_helper = $this->helper('catalog/output');
?>
<div>
<!--?php if (!$_featuredProductCollection--->count()): ?>
<h2><p><!--?php echo $this--->__('There are no products in the featured product list!!') ?></p></h2>
<!--?php else: ?-->
<div class="category-products-grid">
 <!--?php // Grid Mode ?-->
 <!--?php $_collectionSize = $_featuredProductCollection--->count() ?>
 <!--?php $_columnCount = $this--->getColumnCount(); ?>
 <!--?php $i = 0;
  foreach ($_featuredProductCollection as $_product): ?-->
    <!--?php if ($i++ % $_columnCount == 0): ?-->
    <ul class="products-grid first last odd">
    <!--?php endif ?-->
    <li class="item<?php if (($i - 1) % $_columnCount == 0): ?> first
               <?php elseif ($i % $_columnCount == 0): ?> last<?php endif; ?>">
    <div class="productGrid-description">
    <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo 
       $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image"><img src="<?php echo 
       $this->helper('catalog/image')->init($_product, 'small_image')->resize(135); ?>" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), 
               null, true) ?>"></a>
     <h3 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"><!--?php echo
   $_helper--->productAttribute($_product, $_product->getName(), 'name') ?></a></h3></div>
  <!--?php if ($_product--->getRatingSummary()): ?>
  <!--?php echo $this--->getReviewsSummaryHtml($_product, 'short') ?>
  <!--?php endif; ?-->
  <!--?php echo $this--->getPriceHtml($_product, true) ?>
  <!--?php if ($_product--->isSaleable()): ?>
    <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo 
              $this->getAddToCartUrl($_product) ?>')">
      <span class="btn-cart-container"><!--?php echo $this--->__('Add to Cart') ?></span>
   </button>
 <!--?php else: ?-->
     <p class="availability out-of-stock">
       <span><!--?php echo $this--->__('Out of stock') ?></span></p>
 <!--?php endif; ?-->
     </li>
         <!--?php if ($i % $_columnCount == 0 || $i == $_collectionSize): ?-->
 </ul>
<!--?php endif ?-->
<!--?php endforeach ?-->
</div>
<script type="text/javascript">decorateGeneric($$('ul.products-grid'), ['odd', 'even', 'first', 'last'])</script>
 </div>
 <!--?php endif; ?-->

在Magento Backend中为Store Owner下拉菜单的Catalog Input Type中创建了一个具有yes/no属性的特色属性,然后将其包含在属性集中,并从Catalog->Manage Products中将一个产品指定为特色"yes"。在我加载主页后,它什么也不显示。不知道我在哪里犯了错。我不想更改local.xml,所以采取了这个方法。我还需要做什么或创建其他文件吗?请帮忙。

@Melvin这里有一个展示特色产品的好教程,我认为它会对你有所帮助。请参阅教程。

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

请制作一个属性特色产品,并在html文件夹中制作一个featured.phtml文件,在featured.phtml上编写基于特色产品属性获取产品的代码。然后在cms中的magento主页上调用该文件。

块文件

class FeaturedProduct_Catalog_Block_Product_Featured  extends Mage_Catalog_Block_Product_Abstract
{           

    public function __construct()
    {
        $this->setLimit(40);
        $sort_by = 'name';
        $this->setItemsPerRow(4);

        switch ($sort_by) {
            case 0:
                $this->setSortBy("rand()");
            break;
            case 1:
                $this->setSortBy("created_at desc");
            break;
            default:
                $this->setSortBy("rand()");     
        }
    }
    protected function _beforeToHtml()
    {           
        $collection = Mage::getResourceModel('catalog/product_collection');
            $attributes = Mage::getSingleton('catalog/config')
                ->getProductAttributes();
            $collection->addAttributeToSelect($attributes)
                ->addMinimalPrice()
                ->addFinalPrice()
                ->addTaxPercents()
                ->addAttributeToFilter('featured_products', 1, 'left')
                ->addStoreFilter()
                ->getSelect()->order($this->getSortBy())->limit($this->getLimit());

            Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
            Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
            $this->_productCollection = $collection;
        $this->setProductCollection($collection);
        return parent::_beforeToHtml();
    }
}

app/design/frontend/rwd/default/template/controlog/product/featured.phtml

<?php if (($_products = $this->getProductCollection()) && $_products->getSize()): ?>
  <div class="clear"></div>  
  <div class="new_product_slider">
<div id="demo">
<div class="text_left"><?php echo Mage::helper('featuredproducts')->getConfigHeading();?></div>
<div class="text_right"> <?php echo $this->__('Fragtfri ved køb over 130 kr.')?> </div>
<div class="clear"></div>
<div id="owl-demo1" class="owl-carousel">

    <?php $i=1; foreach ($_products->getItems() as $_product): ?>
       <?php if($i > 1 ) { $j=2;} else { $j=1;} ?>
           <div class="item">
<ul>
<li>

                 <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>" class="prod"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(183, 183) ?>" width="183" height="183" alt="<?php echo $this->htmlEscape($_product->getName()) ?>" /></a>
                      <div class="cover"
   <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>" > <?php echo strip_tags(ucfirst($this->htmlEscape($_product->getName()))) ?></a></div>
   <h4><?php echo $this->getPriceHtml($_product, true, '-new') ?></h4>
   <aside class="læs_btn"><a href="<?php echo $_product->getProductUrl() ?>"><span><?php echo $this->__('Læs mere'); ?></span></a></aside>
                       <div class="clear"></div>
</li>
</ul>
</div>
                       <?php $i++; if($i%5==0) { $i=1; ?>
                <?php  } ?>

    <?php  endforeach; ?>
       </div>
</div>
</div>