5/16/2014 - 2:49 PM

Magento Snippets

Magento Snippets

Magento Snippets

Find all dispatched event observers

grep -r Mage::dispatchEvent /path/to/your/Magento/* > events.txt

Find all translatable strings

grep -shR "\->__('" *|sed "s/\(;|?>\)/\1\n/g;s/^[ \t]*//;s/[ \t]*$//;s/.*->__('\([^']\+\)'[^)]*).*/\1/g"

Export database with mysqldump minus log tables

Example: (with tables to ignore from Magento minus usual stuff like -u -p etc.)

mysqldump --ignore-table=db.log_customer -–ignore-table=db.log_quote -–ignore=db.log_summary –-ignore=db.log_summary_type –-ignore=db.log_url -–ignore=db.log_url_info -–ignore=db.log_visitor -–ignore=db.log_visitor_info --ignore=db.log_visitor_online –-ignore=db.log_summary –-ignore=db.enterprise_logging_event –-ignore=db.enterprise_logging_event_changes


Download extension manually using pear/mage

Pear for 1.4, mage for 1.5. File downloaded into /downloader/.cache/community/

./pear download magento-community/Shipping_Agent
./mage download community Shipping_Agent

Download Archived extension manually without pear/mage

If for some reason you need to download a Magento Connect extension archive from command line, use the following :

wget http://connect.magentocommerce.com/TYPE/get/EXTENSION_NAME-X.X.X.tgz

TYPE must be replaced with real extension type(usually core or community), EXTENSION_NAME with real(machine readable) extension name and X.X.X must be replaced with the real version number. To retrieve real TYPE and the real machine readable EXTENSION_NAME simply look at it’s extension key and take into a count it’s format magento-TYPE/EXTENSION_NAME.

For example:


Extension key: magento-core/Interface_Frontend_Default_Blank Version(at the time of writing): Download URL:

wget http://connect.magentocommerce.com/core/get/Interface_Frontend_Default_Blank-

Other example:


Extension key: magento-community/Yoast_Blank_Seo_Theme Version(at the time of writing): 1.4.1 Download URL:

wget http://connect.magentocommerce.com/community/get/Yoast_Blank_Seo_Theme-1.4.1.tgz

Clear cache/reindex

// clear cache
// reindex prices
1 = Product Attributes
2 = Product Attributes
3 = Catalog URL Rewrites
4 = Product Flat Data
5 = Category Flat Data
6 = Category Products
7 = Catalog Search Index
8 = Tag Aggregation Data
9 = Stock Status

Load category by id

$_category = Mage::getModel('catalog/category')->load(89);
$_category_url = $_category->getUrl();

Load product by id or sku

$_product_1 = Mage::getModel('catalog/product')->load(12); // won't include a valid stock item
$_product_2 = Mage::getModel('catalog/product')->loadByAttribute('sku','cordoba-classic-6-String-guitar'); // will include a valid stock item

Get Configurable product's Child products

// input is $_product and result is iterating child products
$childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null, $product);

Get Configurable product's Children's (simple product) custom attributes

// input is $_product and result is iterating child products
$conf = Mage::getModel('catalog/product_type_configurable')->setProduct($_product);
$col = $conf->getUsedProductCollection()->addAttributeToSelect('*')->addFilterByRequiredOptions();
foreach($col as $simple_product){

Log to custom file

<?php Mage::log('Your Log Message', Zend_Log::INFO, 'your_log_file.log'); ?>

Call Static Block

<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('block-name')->toHtml(); ?>

Add JavaScript to page

First approach: page.xml - you can add something like

<action method="addJs"><script>path/to/my/file.js</script></action>

Second approach: Find page/html/head.phtml in your theme and add the code directly to page.html.

Third approach: If you look at the stock page.html mentioned above, you'll see this line

<?php echo $this->getChildHtml() ?>

Normally, the getChildHtml method is used to render a specific child block. However, if called with no paramater, getChildHtml will automatically render all the child blocks. That means you can add something like

<!-- existing line --> <block type="page/html_head" name="head" as="head">
    <!-- new sub-block you're adding --> <block type="core/template" name="mytemplate" as="mytemplate" template="page/mytemplate.phtml"/>

to page.xml, and then add the mytemplate.phtml file. Any block added to the head block will be automatically rendered. (this automatic rendering doesn't apply for all layout blocks, only for blocks where getChildHtml is called without paramaters).

Programmatically update the layout from av event

@author moleman gist from from git://gist.github.com/1723022.git



PHP method:

 * Method that will be called when the controller_action_layout_generate_xml_before event is fired.
 * Adds layout update that removes catalog.topnav depending on if the hide categories attribute is
 * toggle on the logged in customer object.
 * @see Mage_Core_Controller_Varien_Action::generateLayoutXml()
 * @param Varien_Event_Observer $observer
public function onControllerActionLayoutGenerateXmlBefore($observer)
    /* @var $action Mage_Core_Controller_Varien_Action */
    $action = $observer->getEvent()->getAction();

    /* @var $layout Mage_Core_Model_Layout */
    $layout = $observer->getEvent()->getLayout();

    /* @var $session Mage_Customer_Model_Session */
    $session = Mage::getSingleton('customer/session');

    if (!is_null($session) && $session->isLoggedIn() === true &&
            addUpdate('<reference name="top.menu"><remove name="catalog.topnav" /></reference>');


Check if customer is logged in

<?php $logged_in = Mage::getSingleton('customer/session')->isLoggedIn(); // (boolean) ?>

Get the current category/product/cms page

$currentCategory = Mage::registry('current_category');
$currentProduct = Mage::registry('current_product');
$currentCmsPage = Mage::registry('cms_page');

Run Magento Code Externally

require_once('app/Mage.php'); //Path to Magento
// Run you code here

Programmatically change Magento’s core config data

// find 'path' in table 'core_config_data' e.g. 'design/head/demonotice'
$my_change_config = new Mage_Core_Model_Config();
// turns notice on
$my_change_config->saveConfig('design/head/demonotice', "1", 'default', 0);
// turns notice off
$my_change_config->saveConfig('design/head/demonotice', "0", 'default', 0);

Changing the Admin URL

Open up the /app/etc/local.xml file, locate the <frontName> tag, and change the ‘admin’ part it to something a lot more random, eg:


Clear your cache and sessions.

Magento: Mass Exclude/Unexclude Images

By default, Magento will check the 'Exclude' box for you on all imported images, making them not show up as a thumbnail under the main product image on the product view.

# Mass Unexclude
UPDATE`catalog_product_entity_media_gallery_value` SET `disabled` = '0' WHERE `disabled` = '1';
# Mass Exclude
UPDATE`catalog_product_entity_media_gallery_value` SET `disabled` = '1' WHERE `disabled` = '0';

getBaseUrl – Magento URL Path

// http://example.com/
echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
// http://example.com/js/
echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_JS);
// http://example.com/index.php/
echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK);
// http://example.com/media/
echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA);
// http://example.com/skin/
echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN);

Get The Root Category In Magento

$rootCategoryId = Mage::app()->getStore()->getRootCategoryId();
$_category = Mage::getModel('catalog/category')->load($rootCategoryId);
// You can then get all of the top level categories using:
$_subcategories = $_category->getChildrenCategories();

Get The Current URL In Magento

<?php echo Mage::helper('core/url')->getCurrentUrl(); ?>

Category Navigation Listings in Magento

Make sure the block that you’re working is of the type catalog/navigation. If you’re editing catalog/navigation/left.phtml then you should be okay.

<div id="leftnav">
    <?php $helper = $this->helper('catalog/category') ?>
    <?php $categories = $this->getStoreCategories() ?>
    <?php if (count($categories) > 0): ?>
        <ul id="leftnav-tree" class="level0">
            <?php foreach($categories as $category): ?>
                <li class="level0<?php if ($this->isCategoryActive($category)): ?> active<?php endif; ?>">
                    <a href="<?php echo $helper->getCategoryUrl($category) ?>"><span><?php echo $this->escapeHtml($category->getName()) ?></span></a>
                    <?php if ($this->isCategoryActive($category)): ?>
                        <?php $subcategories = $category->getChildren() ?>
                        <?php if (count($subcategories) > 0): ?>
                            <ul id="leftnav-tree-<?php echo $category->getId() ?>" class="level1">
                                <?php foreach($subcategories as $subcategory): ?>
                                    <li class="level1<?php if ($this->isCategoryActive($subcategory)): ?> active<?php endif; ?>">
                                        <a href="<?php echo $helper->getCategoryUrl($subcategory) ?>"><?php echo $this->escapeHtml(trim($subcategory->getName(), '- ')) ?></a>
                                <?php endforeach; ?>
                            <script type="text/javascript">decorateList('leftnav-tree-<?php echo $category->getId() ?>', 'recursive')</script>
                        <?php endif; ?>
                    <?php endif; ?>
            <?php endforeach; ?>
        <script type="text/javascript">decorateList('leftnav-tree', 'recursive')</script>
    <?php endif; ?>

Debug using zend

<?php echo Zend_Debug::dump($thing_to_debug, 'debug'); ?>

$_GET, $_POST & $_REQUEST Variables

// $_GET
$productId = Mage::app()->getRequest()->getParam('product_id');
// The second parameter to getParam allows you to set a default value which is returned if the GET value isn't set
$productId = Mage::app()->getRequest()->getParam('product_id', 44);
$postData = Mage::app()->getRequest()->getPost();
// You can access individual variables like...
$productId = $postData['product_id']);

Get methods of an object

First, use get_class to get the name of an object's class.

<?php $class_name = get_class($object); ?>

Then, pass that get_class_methods to get a list of all the callable methods on an object

$class_name = get_class($object);
$methods = get_class_methods($class_name);
foreach($methods as $method)

Is product purchasable?

<?php if($_product->isSaleable()) { // do stuff } ?>

Load Products by Category ID

$_category = Mage::getModel('catalog/category')->load(47);
$_productCollection = $_category->getProductCollection();
if($_productCollection->count()) {
    foreach( $_productCollection as $_product ):
        echo $_product->getProductUrl();
        echo $this->getPriceHtml($_product, true);
        echo $this->htmlEscape($_product->getName());

Update all subscribers into a customer group (e.g. 5)

    customer_entity.`group_id` = 5
    customer_entity.`entity_id` = newsletter_subscriber.`customer_id`
    newsletter_subscriber.`subscriber_status` = 1;

Get associated products

In /app/design/frontend/default/site/template/catalog/product/view/type/

<?php $_helper = $this->helper('catalog/output'); ?>
<?php $_associatedProducts = $this->getAllowProducts() ?>
<?php //var_dump($_associatedProducts); ?>
<br />
<br />
<?php if (count($_associatedProducts)): ?>
    <?php foreach ($_associatedProducts as $_item): ?> 
        <a href="<?php echo $_item->getProductUrl() ?>"><?php echo $_helper->productAttribute($_item, $_item->getName(), 'name') ?> | <?php echo $_item->getName() ?> | <?php echo $_item->getPrice() ?></a>
        <br />
        <br />
    <?php endforeach; ?>
<?php endif; ?>

Get An Array of Country Names/Codes in Magento

$countryList = Mage::getResourceModel('directory/country_collection')
    echo '<pre>';
    print_r( $countryList);

Create a Country Drop Down in the Frontend of Magento

$_countries = Mage::getResourceModel('directory/country_collection')
                                    ->toOptionArray(false) ?>
<?php if (count($_countries) > 0): ?>
    <select name="country" id="country">
        <option value="">-- Please Select --</option>
        <?php foreach($_countries as $_country): ?>
            <option value="<?php echo $_country['value'] ?>">
                <?php echo $_country['label'] ?>
        <?php endforeach; ?>
<?php endif; ?>

Create a Country Drop Down in the Magento Admin

    $fieldset->addField('country', 'select', array(
        'name'  => 'country',
        'label'     => 'Country',
        'values'    => Mage::getModel('adminhtml/system_config_source_country')->toOptionArray(),

Return Product Attributes

// The following returns the option IDs for an attribute that is a multiple-select field: 
$_product->getData('color'); // i.e. 456,499
// The following returns the attribute object, and instance of Mage_Catalog_Model_Resource_Eav_Attribute: 
$_product->getResource()->getAttribute('color'); // instance of Mage_Catalog_Model_Resource_Eav_Attribute
// The following returns an array of the text values for the attribute: 
$_product->getAttributeText('color') // Array([0]=>'red', [1]=>'green')
// The following returns the text for the attribute
if ($attr = $_product->getResource()->getAttribute('color')):
    echo $attr->getFrontend()->getValue($_product); // will display: red, green

Cart Data

$cart = Mage::getModel('checkout/cart')->getQuote()->getData();
$cart = Mage::helper('checkout/cart')->getCart()->getItemsCount();
$session = Mage::getSingleton('checkout/session');
foreach ($session->getQuote()->getAllItems() as $item) {
    echo $item->getName();

Get Simple Products of a Configurable Product

if($_product->getTypeId() == "configurable") {
    $ids = $_product->getTypeInstance()->getUsedProductIds();
    foreach ($ids as $id) {
        $simpleproduct = Mage::getModel('catalog/product')->load($id);
            echo $simpleproduct->getName() . " - " . (int)Mage::getModel('cataloginventory/stock_item')->loadByProduct($simpleproduct)->getQty();

Turn template hints on/off via database

`value` = 0
`path` = "dev/debug/template_hints"
`path` = "dev/debug/template_hints_blocks";

Delete all products

TRUNCATE TABLE `catalog_product_bundle_option`;
TRUNCATE TABLE `catalog_product_bundle_option_value`;
TRUNCATE TABLE `catalog_product_bundle_selection`;
TRUNCATE TABLE `catalog_product_entity_datetime`;
TRUNCATE TABLE `catalog_product_entity_decimal`;
TRUNCATE TABLE `catalog_product_entity_gallery`;
TRUNCATE TABLE `catalog_product_entity_int`;
TRUNCATE TABLE `catalog_product_entity_media_gallery`;
TRUNCATE TABLE `catalog_product_entity_media_gallery_value`;
TRUNCATE TABLE `catalog_product_entity_text`;
TRUNCATE TABLE `catalog_product_entity_tier_price`;
TRUNCATE TABLE `catalog_product_entity_varchar`;
TRUNCATE TABLE `catalog_product_link`;
TRUNCATE TABLE `catalog_product_link_attribute_decimal`;
TRUNCATE TABLE `catalog_product_link_attribute_int`;
TRUNCATE TABLE `catalog_product_link_attribute_varchar`;
TRUNCATE TABLE `catalog_product_option`;
TRUNCATE TABLE `catalog_product_option_price`;
TRUNCATE TABLE `catalog_product_option_title`;
TRUNCATE TABLE `catalog_product_option_type_price`;
TRUNCATE TABLE `catalog_product_option_type_title`;
TRUNCATE TABLE `catalog_product_option_type_value`;
TRUNCATE TABLE `catalog_product_super_attribute`;
TRUNCATE TABLE `catalog_product_super_attribute_label`;
TRUNCATE TABLE `catalog_product_super_attribute_pricing`;
TRUNCATE TABLE `catalog_product_super_link`;
TRUNCATE TABLE `catalog_product_enabled_index`;
TRUNCATE TABLE `catalog_product_website`;
TRUNCATE TABLE `catalog_product_entity`;
TRUNCATE TABLE `cataloginventory_stock_item`;
TRUNCATE TABLE `cataloginventory_stock_status`;

Getting Configurable Product from Simple Product ID in Magento 1.5+

$simpleProductId = 465;
$parentIds = Mage::getResourceSingleton('catalog/product_type_configurable')
$product = Mage::getModel('catalog/product')->load($parentIds[0]);
echo $product->getId(); // ID = 462 (aka, Parent of 465)

Block Caching

getCacheLifetime: cache lifetime

  • 0 = unlimited
  • false = unlimited
  • null = no caching
  • any other integer value = cache lifetime in seconds

getCacheKeyInfo: array of values, the cache depends on

getCacheTags: array of values to segment the cache

  • default value: array('block_html')
  • example: array('block_html', 'navi'), after that you could clean your cache partially: Mage::app()->cleanCache(array(‘navi’))

Get last order from checkout

$order = Mage::getModel('sales/order')->loadByIncrementId(Mage::getSingleton('checkout/session')->getLastRealOrderId());

Get order and product information

        //$order = Mage::getModel('sales/order')->loadByIncrementId(Mage::getSingleton('checkout/session')->getLastRealOrderId());
            $order = Mage::getModel('sales/order')->loadByIncrementId(100000001);

            foreach ($order->getItemsCollection() as $item)
                    //load the product from the order
                    $product = Mage::getModel('catalog/product')->load($item->getData('product_id'));
                    //loop trhough ignoring any configurables
                    if($product->getTypeId() == 'simple')
                        echo $product->getData('licence_qty');


Filter Custom (non eav) Collection

->addFieldToFilter('code', array('eq' => $licenceCodeIn))

Log all layout updates

//Full path to the log file:
$logPath = Mage::getConfig()->getOptions()->getVarDir().DS.$file_name.time().'.xml';

//Layout model: Mage_Core_Model_Layout
$layout = Mage::getSingleton('core/layout');

//Generate our xml with Mage_Core_Layout_Update model and save it in a file
$xml = '<'.'?xml version="1.0"?'.'>';
$xml .= '<layout>'.trim($layout->getUpdate()->asString()).'</layout>';
file_put_contents($logPath, $xml);

Defining configuration in xml files (local.xml), instead of db

            <!-- config value for a store  (web/unsecure/base_url)  -->
            <!-- config value for a website  (web/unsecure/base_url)  -->
      <!-- default config value (web/unsecure/base_url) -->

Clean re-integration of console.log in Chrome for Magento

    <reference name="content">
        <block type="core/text" name="fix.console" as="fix.console">
            <action method="setText">
                <text><![CDATA[<script type="text/javascript">
                    iframe                  = document.createElement('iframe');
                    iframe.style.display    = 'none';
                    window.console          = iframe.contentWindow.console;
                    console.firebug         = "faketrue";                   

Disable local modules


Working with Mage_Core_Model_Cache

// Save 
$cache->save(date("r"), "nick_date", array("nicks_cache"), 10);
$cache->save("hello world - " . time(), "nick_helloworld", array("nicks_cache"), 60*60);
// Load
// Remove
// Flush group

Magento Notifications types

/* There are few 'notification types' in Magento you can utilize: */
// error:
Mage::getSingleton('core/session')->addError('Custom error here');
// warning:
Mage::getSingleton('core/session')->addWarning('Custom warning here');
// notice:
Mage::getSingleton('core/session')->addNotice('Custom notice here');
// success:
Mage::getSingleton('core/session')->addSuccess('Custom success here');

If is homepage

$routeName = Mage::app()->getRequest()->getRouteName();
$identifier = Mage::getSingleton('cms/page')->getIdentifier();
if($routeName == 'cms' &amp;&amp; $identifier == 'home') {
    echo 'You are in Homepage!';
} else {
    echo 'You are NOT in Homepage!';

Delete ALL Customers

-- reset customers
TRUNCATE customer_address_entity;
TRUNCATE customer_address_entity_datetime;
TRUNCATE customer_address_entity_decimal;
TRUNCATE customer_address_entity_int;
TRUNCATE customer_address_entity_text;
TRUNCATE customer_address_entity_varchar;
TRUNCATE customer_entity;
TRUNCATE customer_entity_datetime;
TRUNCATE customer_entity_decimal;
TRUNCATE customer_entity_int;
TRUNCATE customer_entity_text;
TRUNCATE customer_entity_varchar;
TRUNCATE log_customer;
TRUNCATE log_visitor;
TRUNCATE log_visitor_info;

ALTER TABLE customer_address_entity AUTO_INCREMENT=1;
ALTER TABLE customer_address_entity_datetime AUTO_INCREMENT=1;
ALTER TABLE customer_address_entity_decimal AUTO_INCREMENT=1;
ALTER TABLE customer_address_entity_int AUTO_INCREMENT=1;
ALTER TABLE customer_address_entity_text AUTO_INCREMENT=1;
ALTER TABLE customer_address_entity_varchar AUTO_INCREMENT=1;
ALTER TABLE customer_entity_datetime AUTO_INCREMENT=1;
ALTER TABLE customer_entity_decimal AUTO_INCREMENT=1;
ALTER TABLE customer_entity_int AUTO_INCREMENT=1;
ALTER TABLE customer_entity_text AUTO_INCREMENT=1;
ALTER TABLE customer_entity_varchar AUTO_INCREMENT=1;
ALTER TABLE log_visitor_info AUTO_INCREMENT=1;

Create Order Programmatically


require_once 'app/Mage.php';


$quote = Mage::getModel('sales/quote')

if ('do customer orders') {
    // for customer orders:
    $customer = Mage::getModel('customer/customer')
} else {
    // for guesr orders only:

// add product(s)
$product = Mage::getModel('catalog/product')->load(8);
$buyInfo = array(
    'qty' => 1,
    // custom option id => value id
    // or
    // configurable attribute id => value id
$quote->addProduct($product, new Varien_Object($buyInfo));

$addressData = array(
    'firstname' => 'Test',
    'lastname' => 'Test',
    'street' => 'Sample Street 10',
    'city' => 'Somewhere',
    'postcode' => '123456',
    'telephone' => '123456',
    'country_id' => 'US',
    'region_id' => 12, // id from directory_country_region table

$billingAddress = $quote->getBillingAddress()->addData($addressData);
$shippingAddress = $quote->getShippingAddress()->addData($addressData);


$quote->getPayment()->importData(array('method' => 'checkmo'));


$service = Mage::getModel('sales/service_quote', $quote);
$order = $service->getOrder();

printf("Created order %s\n", $order->getIncrementId());

Assign/Unassign (merge) list of simple productids to existing configurable product

private function _attachProductToConfigurable( $_childProduct, $_configurableProduct ) {
   $loader = Mage::getResourceModel( 'catalog/product_type_configurable' )->load( $_configurableProduct );

   $ids = $_configurableProduct->getTypeInstance()->getUsedProductIds(); 
   $newids = array();
   foreach ( $ids as $id ) {
      $newids[$id] = 1;

   $newids[$_childProduct->getId()] = 1;

   $loader->saveProducts( $_configurableProduct->getId(), array_keys( $newids ) );                

Add Options to ERP Attributes from Code/Installer scripts

$installer = Mage::getModel('eav/entity_setup', 'core_setup');
$options = array(); 
$options['value']['option_1'][0] = 'RED 2';
$options['attribute_id'] = $installer->getAttributeId('catalog_product', 'color');

Admin set filters on redirect from controller action code

Redirect to Order Grid with search filter set from controller action code

    $filter_params = array('sort' => 'created_at', 'dir' => 'desc', 'filter' => base64_encode('real_order_id='.$orig_order_original_increment_id));
    $this->_redirect('*/sales_order/index', $filter_params);