Ease Magento development with bootstrapped scripts

If you work in Magento a lot, you’ll come to many many points when you need to manipulate the models in Magento programmatically.

This could help you inspect the raw data stored against the models (Magento’s database structure is hideously complex), or it could be because you need to edit existing models or create new ones.

The bootstrap script

I suggest you create the bootstrap as its own script so you can include it in all your little scripts:

# from magento project root
mkdir scripts
touch scripts/bootstrap.php

Bootstrapping Magento requires a few lines - you can tweak the individual settings if you like:

// scripts/bootstrap.php

<?php
ini_set('memory_limit', '1024M');
set_time_limit(0);

/* Includes */
require_once realpath(__DIR__) . '/../app/Mage.php';

/* Enable developer mode */
Mage::setIsDeveloperMode(true);

Mage::app('admin')->setUseSessionInUrl(false);

$userModel = Mage::getModel('admin/user');
$userModel->setUserId(0);
Mage::getSingleton('admin/session')->setUser($userModel);

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

/* Undo Magento's hiding of errors */
error_reporting(-1);
ini_set('display_errors', 1);
?>

Once you’ve done this, you can use the Mage static to do whatever you like.

A use-case

Here’s a simple example that just retrieves the child IDs of the default category.

Note how this script includes the bootstrap script that we just made at the top:

// scripts/default-category-children.php

<?php
// Bootstrap Magento
require_once(realpath(__DIR__) . '/bootstrap.php');

// Get default category model
$defaultCategory = Mage::getModel('catalog/category')->getCollection()->addAttributeToSelect('*')->addFieldToFilter('category_code','default')->getFirstItem();

// Show a list of IDs of its children
echo $defaultCategory->getChildren();
?>

And now you can run this directly from the command-line:

$ php scripts/default-category-children.php
3,7,8

There are many useful things you can do with these scripts - not to mention writing them will increase your understanding of Magento like nothing else.

I will also post some good example scripts on this blog in the near future, and I’ll try to remember to add the links to those posts below.

By @nottrobin