korbax
8/29/2016 - 3:40 PM

Create new type of product

Create new type of product

Create new type product

<?php

/** @var $installer Mage_Catalog_Model_Resource_Setup */
$installer = $this;
$installer->startSetup();

/**
 * Create new category
 */
Mage::register('isSecureArea', 1);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$category = Mage::getModel('catalog/category');
$category->setPath('1/2')
    ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID)
    ->setName('moduleB-3-top-product')
    ->setUrlKey('moduleB-3-top-product')
    ->setIsAnchor(0)
    ->setIncludeInMenu(0)
    ->setIsActive(1)
    ->save();
$categoryId = $category->getEntityId();


/**
 * Create new statick block used category: moduleB-3-top-product
 */
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$block = Mage::getModel('cms/block')->load('test-block');

if($block){
    $content = '{{block type="catalog/product_list" column_count="4" category_id="' . $categoryId . '" template="catalog/product/list.phtml"}}';
    $title = 'Test Block';
    $block = Mage::getModel('cms/block')->load('test-block');
    $block->setData('content',$content);
    $block->setData('title',$title);
    $block->save();
}
else {
    $staticBlock = array(
        'title' => 'Test Block',
        'identifier' => 'test-block',
        'content' => '{{block type="catalog/product_list" column_count="4" category_id="' . $categoryId . '" template="catalog/product/list.phtml"}}',
        'is_active' => 1,
        'stores' => array(0)
    );
    Mage::getModel('cms/block')->setData($staticBlock)->save();
}

$installer->endSetup();
<?php

/** @var $installer Mage_Catalog_Model_Resource_Setup */
$installer = $this;
$installer->startSetup();

$installer->addAttribute(
    Mage_Catalog_Model_Product::ENTITY,
    'promobox_link',
    array(
        'type'                    => 'text',
        'backend'                 => '',
        'frontend'                => '',
        'label'                   => 'Promo link',
        'input'                   => 'text',
        'class'                   => '',
        'source'                  => '',
        'global'                  => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
        'visible'                 => true,
        'required'                => false,
        'user_defined'            => false,
        'default'                 => '',
        'searchable'              => false,
        'filterable'              => false,
        'comparable'              => false,
        'visible_on_front'        => false,
        'unique'                  => false,
        'apply_to'                => 'promobox',
        'is_configurable'         => false,
        'used_in_product_listing' => false,
    )
);

$installer->addAttribute(
    Mage_Catalog_Model_Product::ENTITY,
    'promobox_type',
    array(
        'type'                    => 'int',
        'backend'                 => '',
        'frontend'                => '',
        'label'                   => 'Promo type',
        'input'                   => 'select',
        'class'                   => '',
        'source'                  => 'onerockwell_promobox/attribute_source_type',
        'global'                  => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
        'visible'                 => true,
        'required'                => false,
        'user_defined'            => false,
        'default'                 => '0',
        'searchable'              => false,
        'filterable'              => false,
        'comparable'              => false,
        'visible_on_front'        => false,
        'unique'                  => false,
        'apply_to'                => 'promobox',
        'is_configurable'         => false,
        'used_in_product_listing' => false,
        'option' =>
            array (
                'values' =>
                    array (
                        0 => 'Single',
                        1 => 'Double',
                    ),
            )
    )
);
<?xml version="1.0"?>

<config>
    <modules>
        <Onerockwell_PromoBox>
            <version>0.2.0</version>
        </Onerockwell_PromoBox>
    </modules>

    <global>
        <catalog>
            <product>
                <type>
                    <affiliate translate="label" module="onerockwell_promobox">
                        <label>Promo Box</label>
                        <model>onerockwell_promobox/product_type</model>
                        <is_qty>0</is_qty>
                        <composite>0</composite>
                        <can_use_qty_decimals>0</can_use_qty_decimals>
                    </affiliate>
                </type>
            </product>
        </catalog>

        <blocks>
            <onerockwell_promobox>
                <class>Onerockwell_PromoBox_Block</class>
            </onerockwell_promobox>
        </blocks>

        <helpers>
            <onerockwell_promobox>
                <class>Onerockwell_PromoBox_Helper</class>
            </onerockwell_promobox>
        </helpers>

        <models>
            <onerockwell_promobox>
                <class>Onerockwell_PromoBox_Model</class>
                <resourceModel>onerockwell_promobox_mysql4</resourceModel>
            </onerockwell_promobox>
        </models>

        <resources>
            <onerockwell_promobox_setup>
                <setup>
                    <module>Onerockwell_PromoBox</module>
                    <class>Mage_Sales_Model_Mysql4_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </onerockwell_promobox_setup>

            <onerockwell_promobox_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </onerockwell_promobox_write>

            <onerockwell_promobox_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </onerockwell_promobox_read>
        </resources>
    </global>

    <frontend>
        <routers>
            <onerockwell_promobox>
                <use>standard</use>
                <args>
                    <module>Onerockwell_PromoBox</module>
                    <frontName>onerockwell</frontName>
                </args>
            </onerockwell_promobox>
        </routers>

        <!--<layout>-->
            <!--<updates>-->
                <!--<onerockwell_promobox>-->
                    <!--<file>onerockwell/promobox.xml</file>-->
                <!--</onerockwell_promobox>-->
            <!--</updates>-->
        <!--</layout>-->
    </frontend>

    <adminhtml>
        <layout>
            <updates>
                <onerockwell_promobox>
                    <file>onerockwell/promobox.xml</file>
                </onerockwell_promobox>
            </updates>
        </layout>
    </adminhtml>
</config>
<?php

class Onerockwell_PromoBox_Model_Product_Type extends Mage_Catalog_Model_Product_Type_Simple
{
    const TYPE_AFFILIATE          = 'promobox';
    const XML_PATH_AUTHENTICATION = 'catalog/promobox/authentication';

    protected function _prepareProduct(Varien_Object $buyRequest, $product, $processMode)
    {
        if ($this->_isStrictProcessMode($processMode)) {
            return Mage::helper('onerockwell_promobox')->__(
                'Promobox product %s cannot be added to cart. ' .
                ' On the product detail page click the "Go to parent site"'.
                ' button to access the product.',
                $product->getName()
            );
        }
        return parent::_prepareProduct($buyRequest, $product, $processMode);
    }
}
<?php

class Onerockwell_PromoBox_Model_Attribute_Source_Type extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
{
    const SINGLE = 0;
    const DOUBLE = 1;

    public function getAllOptions()
    {
        if (is_null($this->_options)) {
            $this->_options = array(
                array(
                    'label' => Mage::helper('onerockwell_promobox')->__('Single'),
                    'value' => self::SINGLE
                ),
                array(
                    'label' => Mage::helper('onerockwell_promobox')->__('Double'),
                    'value' => self::DOUBLE
                ),
            );
        }
        return $this->_options;
    }

    public function toOptionArray()
    {
        return $this->getAllOptions();
    }

    public function addValueSortToCollection($collection, $dir = 'asc')
    {
        $adminStore  = Mage_Core_Model_App::ADMIN_STORE_ID;
        $valueTable1 = $this->getAttribute()->getAttributeCode() . '_t1';
        $valueTable2 = $this->getAttribute()->getAttributeCode() . '_t2';

        $collection->getSelect()->joinLeft(
            array($valueTable1 => $this->getAttribute()->getBackend()->getTable()),
            "`e`.`entity_id`=`{$valueTable1}`.`entity_id`"
            . " AND `{$valueTable1}`.`attribute_id`='{$this->getAttribute()->getId()}'"
            . " AND `{$valueTable1}`.`store_id`='{$adminStore}'",
            array()
        );

        if ($collection->getStoreId() != $adminStore) {
            $collection->getSelect()->joinLeft(
                array($valueTable2 => $this->getAttribute()->getBackend()->getTable()),
                "`e`.`entity_id`=`{$valueTable2}`.`entity_id`"
                . " AND `{$valueTable2}`.`attribute_id`='{$this->getAttribute()->getId()}'"
                . " AND `{$valueTable2}`.`store_id`='{$collection->getStoreId()}'",
                array()
            );
            $valueExpr = new Zend_Db_Expr("IF(`{$valueTable2}`.`value_id`>0, `{$valueTable2}`.`value`, `{$valueTable1}`.`value`)");

        } else {
            $valueExpr = new Zend_Db_Expr("`{$valueTable1}`.`value`");
        }



        $collection->getSelect()
            ->order($valueExpr, $dir);

        return $this;
    }

    public function getFlatColums()
    {
        $columns = array(
            $this->getAttribute()->getAttributeCode() => array(
                'type'      => 'int',
                'unsigned'  => false,
                'is_null'   => true,
                'default'   => null,
                'extra'     => null
            )
        );
        return $columns;
    }


    public function getFlatUpdateSelect($store)
    {
        return Mage::getResourceModel('eav/entity_attribute')
            ->getFlatUpdateSelect($this->getAttribute(), $store);
    }
}
<?php

class Onerockwell_PromoBox_Helper_Data extends Mage_Checkout_Helper_Cart
{

}