Tạo Featured product trong Magento

Thảo luận trong 'Chức năng khác' bắt đầu bởi admin, 21 Tháng mười một 2012.

  1. admin

    admin Mai Văn Hải Staff Member

    Bước 1) Tạo thuộc tính "Featured"

    Bằng cách vào: Catalog > Attributes > Manage Attributes > Add New Attribute.

    Thông tin thuộc tính

    Attribute Identifier: featured
    Scope: Store View
    Catalog Input Type for Store Owner: Yes/No
    Unique Value (not shared with other products): No
    Values Required: No
    Input Validation for Store Owner: None
    Apply To: All Product Types

    Front End Properties

    Use in quick search: No
    Use in advanced search: Yes
    Comparable on Front-end: No
    Use In Layered Navigation (Can be used only with catalog input type ‘Dropdown’): No
    Visible on Catalog Pages on Front-end: Yes

    Manage Label/Options

    Default: Featured Product
    English: Featured Product

    Lưu thuộc tính lại vào vào Catalog → Attributes → Manage Attributes Để thêm thuộc tính vừa tạo vào nhóm thuộc tính bạn cận làm.

    Bước 2) Thêm Block vào catalog.xml

    Bạn mở file theo đường dẫn: /app/design/frontend/default/default/layout/catalog.xml.Tôi muốn thêm một <block> ở phía trên của block product_list Thêm đoạn mã sau vào line 108 (bên trong thẻ <catalog_category_layered> trong file catalog.xml).

    Mã:
    <block type="catalog/product_featured" name="product_featured" as="product_featured" template="catalog/product/featured.phtml"></block>
    Bước 3) Code file Featured.php


    Create a new file, and directories: app/code/local/MyCompany/Catalog/Block/Product/Featured.php

    Mã:
     <?php
        class MyCompany_Catalog_Block_Product_Featured extends Mage_Catalog_Block_Product_Abstract
        {
            public function getFeaturedProduct()
            {
                // instantiate database connection object
                $categoryId = $this->getRequest()->getParam('id', false);
                $resource = Mage::getSingleton('core/resource');
                $read = $resource->getConnection('catalog_read');
                $categoryProductTable = $resource->getTableName('catalog/category_product');
                //$productEntityIntTable = $resource->getTableName('catalog/product_entity_int'); // doesn't work :(
                $productEntityIntTable = (string)Mage::getConfig()->getTablePrefix() . 'catalog_product_entity_int';
                $eavAttributeTable = $resource->getTableName('eav/attribute');
           
                // Query database for featured product
                $select = $read->select()
                               ->from(array('cp'=>$categoryProductTable))
                               ->join(array('pei'=>$productEntityIntTable), 'pei.entity_id=cp.product_id', array())
                               ->joinNatural(array('ea'=>$eavAttributeTable))
                               ->where('cp.category_id=?', $categoryId)
                               ->where('pei.value=1')
                               ->where('ea.attribute_code="featured"');
               
                $row = $read->fetchRow($select);
                return Mage::getModel('catalog/product')->load($row['product_id']);
            }
        }
        ?>
    Bước 4) Mage_Catalog_Block_Category_View


    Tạo file mới app/code/local/MyCompany/Catalog/Block/Category/View.php.

    Mã:
     class MyCompany_Catalog_Block_Category_View extends Mage_Catalog_Block_Category_View
            {
                public function getFeaturedProductHtml()
                {
                    return $this->getBlockHtml('product_featured');
                }
            }
    Bước 5) Chỉnh sửa templates


    Sửa file app/design/frontend/default/default/template/catalog/category/view.phtml Thêm vào code dưới:

    Mã:
    <?=$this->getFeaturedProductHtml()?>
    Ngay trên dòng này:

    Mã:
        <?=$this->getProductListHtml()?>
    Tạo app/design/frontend/default/default/template/catalog/product/featured.phtml và thêm đoạn mã sau:

    Mã:
     <?php $_product=$this->getFeaturedProduct() ?>
        Check this out: <a href="<?php echo $_product->getProductUrl() ?>"><?php echo $this->htmlEscape($_product->getName()) ?></a>
    Bước 6) Thêm block mới vào app/etc/local.xml


    Thông tin code như sau:

    Mã:
    <blocks>
                <catalog>
                    <rewrite>
                        <product_featured>MyCompany_Catalog_Block_Product_Featured</product_featured>
                   </rewrite>
                    <rewrite>
                        <category_view>MyCompany_Catalog_Block_Category_View</category_view>
                    </rewrite>
                 </catalog>
            </blocks>

    Bài viết khác cùng chuyên mục:

  2. akiana

    akiana New Member

    Chào mọi người !
    Mình đọc trên trang onerutter.com thấy họ hướng dẫn tạo Featured product gồm 3 bước như thế này :
    - B1: Tạo ra category Featured Product là cate con của root :
    [​IMG]
    Trong đó :
    Include in Navigation Menu : No ( Để cho cate này không hiện thị trong Menu )
    Category Product : Chọn sản phẩm cần cho vào Featured product.
    Lưu ý : Lấy Id của category để dùng trong bước 3

    - B2: Tạo file featured-products.phtml trong /app/design/frontend/yourtheme/template/catalog/product/ :
    Mã:
    <?php
    /**
     * Magento
     *
     * NOTICE OF LICENSE
     *
     * This source file is subject to the Open Software License (OSL 3.0)
     * that is bundled with this package in the file LICENSE.txt.
     * It is also available through the world-wide-web at this URL:
     * http://opensource.org/licenses/osl-3.0.php
     * If you did not receive a copy of the license and are unable to
     * obtain it through the world-wide-web, please send an email
     * to license@magentocommerce.com so we can send you a copy immediately.
     *
     * DISCLAIMER
     *
     * Do not edit or add to this file if you wish to upgrade Magento to newer
     * versions in the future. If you wish to customize Magento for your
     * needs please refer to http://www.magentocommerce.com for more information.
     *
     * @category   design_default
     * @package    Mage
     * @copyright  Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
     * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
     */
    ?>
    <?php
    /**
     * Product list template
     *
     * @see Mage_Catalog_Block_Product_List
     */
    ?>
    <style>
    
    #home-list-product ul, #home-list-product li{
    	margin: 0;
    	padding: 0;
    	list-style: none;
    }
    #home-list-product li {
    	width: 195px;
    	height: 130px;
    	list-style: none;
    }
    div.left62{
    float: left;
    width:62px;
    display: block;
    margin: 0;
    }
    div.right120{
    margin-left: 62px;
    width:120px;
    display: block;
    text-align: center;
    }
    span.price {
    	font-size: 14px !important;
    }
    /* // home-list-product */
    </style>
    <?php $_productCollection=$this->getLoadedProductCollection() ?>
    <?php if(!$_productCollection->count()): ?>
    <div class="note-msg">
        <?php echo $this->__('There are no products matching the selection.') ?>
    </div>
    <?php else: ?>
    <?php // Grid Mode ?>
    <div class="listing-type-grid catalog-listing">
    <div id="home-list-product">
        <ul>
    <?php $_collectionSize = $_productCollection->count() ?>
        <?php $i=0; foreach ($_productCollection as $_product): ?>
            <?php if($i++%7==0): ?>
                	
    			    <?php endif ?>
    	<li>
    			
    		<div style="width:190px;float:left;">
    			        <strong><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><?php echo $this->htmlEscape($_product->getName()) ?></a></strong>
    		</div>
            <div style="width:190px;float:left;">
    			<div class="left62">
                        <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>" rel="nofollow">
                            <img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(60, 60); ?>" width="60" height="60" alt="<?php echo $this->htmlEscape($_product->getName()) ?>" />
                        </a>
    			</div>
    			<div class="right120">
    				<a href="<?php echo $_product->getProductUrl() ?>" rel="nofollow" title="<?php echo $this->htmlEscape($_product->getName()) ?>">
    				<?php echo $this->htmlEscape($_product->getSKU()) ?></a><br/>
    				<?php if($_product->isSaleable()): ?>
    						<?php if($_product->price!=0): ?>
                            	<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button>
    						<?php endif; ?>
                        	<?php else: ?>
                            	<p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
                       		<?php endif; ?>    
    			</div>
    					
    		</div>
    		<div>
    			<span>
    					<?php if($_product->price==0): ?>
         					<span class="zero-price"><a href="cong-ty/lien-he.html" rel="nofollow"><?php  echo $this->__('Call') ?></a></span>
    				<?php else: ?>
    						<?php echo $this->getPriceHtml($_product, true) ?>
    				<?php endif; ?>
    					</span>
    		</div>
    		    <?php if ($i%7==0 && $i!=$_collectionSize): ?>
    		    <?php endif ?>
    		 
    	</li>
        <?php endforeach ?>
        </ul>
    	</div>
        <!--script type="text/javascript">decorateGeneric($$('.grid-row'), ['last', 'odd', 'even']);</script-->
    </div>
    <?php endif; ?>
    
    - B3: Thêm đoạn code code sau vào trang CMS cần đặt module này ( Thường là Trang chủ ):
    Mã:
    {{block type="catalog/product_list" category_id="173" template="catalog/product/featured-products.phtml"}}
    Trong đó : category_id là id của category đã tạo ra trong B1 ở trên.
    >> Mọi người có thể thực hiện theo cách này, xem demo tại : http://store.3ce.vn
  3. iamiiamme

    iamiiamme New Member


    Em đã thử làm theo thế này nhưng nó không chạy anh ơi. em dùng Magento 1.7, nó không hiện sản phẩm ở trang category(không hiện bất sản phẩm nào cả, trắng luôn, h phải khắc phục thế nào a?
  4. hunglvcntt

    hunglvcntt New Member

    bạn đã chon product feadture chưa ?
  5. iamiiamme

    iamiiamme New Member

    mình đã chọn rồi bạn ạ, mình để ý thấy là khi thêm đoạn code
    Mã:
    <blocks>
                <catalog>
                    <rewrite>
                        <product_featured>MyCompany_Catalog_Block_Product_Featured</product_featured>
                   </rewrite>
                    <rewrite>
                        <category_view>MyCompany_Catalog_Block_Category_View</category_view>
                    </rewrite>
                 </catalog>
            </blocks>
    thì nó sẽ bị trắng cả list product như thế, bỏ đoạn code đấy đi thì vẫn chỉ hiển thị sản phẩm của list product

    đoạn code trên mình để trong tab
    Mã:
    <global></global>
    của app/etc/local.xml

    à mà thêm nữa là khi thiết lập attributed của mình không có cái này Visible on Catalog Pages on Front-end: mà chỉ có cái này thôi Visible on Product Pages on Front-end: không biết có phải do cái này không nữa???
  6. nopbongdem

    nopbongdem New Member

    Mình tạo xong lỗi luôn. Xóa nó đi thì vẫn bị báo lỗi ntn
    Fatal error: Class name must be a valid object or a string in E:\xampp\htdocs\khachhang\magento\app\code\core\Mage\Core\Model\Resource.php on line 215
    :oops:
  7. jambin

    jambin New Member

    Tôi nghĩ bạn kiểm tra lại tên module và thuộc tính trong admin xem đã add chưa, tôi làm chạy liền mà.
  8. saint

    saint New Member

    Em ko hiểu bước thứ 6
    Bước 6) Thêm block mới vào app/etc/local.xml

    Cái file này để khai bao csdl mà sao lại đưa vào đây đc

Chia sẻ trang này