Debugging Magento Code with Net Beans IDE

Sunday, September 23, 2012

Mostly people are aware of how the xdebug is used on debugging PHP applications. However there can be people out there, alone, killing their eyes trying to find out which class called which functions etc. Here is a quick tip for you! Especially if you are trying to find your way with Magento!

NetBeans is a great IDE with it’s support to PHP!By using NetBeans and xdebug, we can freely and easily debug our PHP applications. However as the web evolved, there are not anymore php files to debug but there are “user friendly” urls to debug. So you cannot give the filename to NetBeans and say debug! because most of the web applications out there are now MVC based as this is the new trend in the PHP world. MVC means, one file -index.php dispatches all the requests. So how to debug using friendly urls.

Well you can use your NetBeans IDE to listen requests coming from your browser. That’s what NetBeans does when you click on debug button, which opens the start page (index.php) with a get variable like: ?XDEBUG_SESSION_START=netbeans-xdebug. This value (netbeans-xdebug) can change from your NetBeans configuration (click on preferences and choose the PHP tab). When this parameter is given, you can send any request to the NetBeans and it will listen!

All you need to do:

How to use a external Script to run Magento Code.

To make any external script to perform any task we need to include ‘app/Mage.php‘ of our Magento installation. Then, we can use the code of magento in that external script.
For example, to fetch Product data from Magento shop in any external script.

/**
* Include Mage.php of your Magento installation
*/
require_once("../magento/app/Mage.php");

Mage::app('default');
/**
* To get Product Data
* For example productId is '11'
*/
$productId = 11;
$product = Mage::getModel('catalog/product')->load($productId);
/**
*To Print name,,sku, price and quantity of the product
*/
echo "Name: ".$product->getName();
echo "Sku: ".$product->geSku();
echo "Price: ".$product->getPrice();
echo "Quantity: ".$product->getStockItem()->getQty();

Insert ,Update ,Delete and Select Records from Database Tables in Magento

You can select,insert,update and delete data in the Magento wby using their models concept.
For example,a table named ‘testdata‘ with the following fields:-
id : int, auto increment, primary key
firstname: varchar
lastname: varchar

How to add Category Attributes in Magento

We can add attributes to categories by running sql query in our database ,but this is not a good way of doing. We can use better way that is, set up scripts feature of magento.
We can create a custom module and add a mysql set up file inside below location:
CustomNamespace/CustomModule/sql/custommodule_setup/
Add the following code inside it to add category attributes :
$installer = $this;
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();
$setup->addAttribute('catalog_category', 'custom_category_attribute', array(
'group' => 'General',
'input' => 'text',
'type' => 'varchar',
'label' => 'Custom New Category Attribute',
'backend' => '',
'visible' => 1,
'required' => 0,
'user_defined' => 1,
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
));
$installer->endSetup();

How to add breadcrumb in magento

Breadcrumb is necessary for making website pages user navigation friendly. It can be printed out in any of the php or phtml pages by below code: We can also add our own breadcrumbs as per our requirements in our custom module.A method defined in mage "Mage_Page_Block_Html_Breadcrumbs" Class.We can use it to add crumb:
addCrumb ($crumbName, $crumbInfo, $after=false)
There are two ways to add crumb i.e. one by xml layout and another by using code:
By using code we can add breadcrumb like this:
$breadcrumbs = $this->getLayout()->getBlock('breadcrumbs');
$breadcrumbs->addCrumb('home',array('label'=>Mage::helper('cms')->__('Home'), 'title'=>Mage::helper('cms')->__('Home Page'),
'link'=>Mage::getBaseUrl()));

Elastic Load Balancing with Sticky Sessions

Thursday, August 23, 2012
Before starting the post,i would like to explain about sticky session,
What is Session Affinity (Sticky Sessions)?
When you only have one application server talking to your clients life is easy:
all the session contexts can be stored in that application server’s memory for fast retrieval. But in the world of highly available and scalable applications there’s likely to be more than one application server fulfilling requests, behind a load balancer. The load balancer routes the first request to an application server, who stores the session context in its own memory and gives the client back a cookie. The next request from the same client will contain the cookie – and, if the same application server gets the request again, the application will rediscover the session context. But what happens if that client’s next request instead gets routed to a different application server? That application server will not have the session context in its memory – even though the request contains the cookie, the application can’t discover the context.

If you’re willing to modify your application you can overcome this problem. You can store the session context in a shared location, visible to all application servers: the database or memcached, for example. All application servers will then be able to lookup the cookie in the central, shared location and discover the context. Until now, this was the approach you needed to take in order to retain the session context behind an Elastic Load Balancer.

But not all applications can be modified in this way. And not all developers want to modify existing applications. Instead of modifying the application, you need the load balancer to route the same client to the same application server. Once the client’s request has been routed to the correct application server, that application server can lookup the session cookie in its own memory and recover the conversational context.

That’s what sticky sessions are:
the load balancer routing the same client to the same application server. And that’s why they’re so important: If the load balancer supports sticky sessions then you don’t need to modify your application to remember client session context.

"How to Use ELB with Sticky Sessions with Existing Applications

The key to managing ELB sticky sessions is the duration of the stickiness: how long the client should consistently be routed to the same back-end instance. Too short, and the session context will be lost, forcing the client to login again. Too long, and the load balancer will not be able to distribute requests equally across the application servers.

How to get all associated products to a configurable product in Magento

Saturday, August 18, 2012
Configurable product is the product which is created by some Associated product, If you have an configurable product and you want to get list of all associated product and it's attribute then, follow the below code:You must have your configurable product Id, My configurable product Id is 10
 
$proId=10; //Use your Configurable product Id
$_product = new Mage_Catalog_Model_Product();