<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Subesh Pokhrel&#039;s Blog - Magento Development Tips &#187; PHP</title>
	<atom:link href="http://subesh.com.np/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://subesh.com.np</link>
	<description>PHP &#38; Magento Tips and Tutorials</description>
	<lastBuildDate>Tue, 20 Mar 2012 18:15:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Custom Query In Magento a Zend Approach [Updated]</title>
		<link>http://subesh.com.np/2011/08/custom-query-in-magento-a-zend-approach/</link>
		<comments>http://subesh.com.np/2011/08/custom-query-in-magento-a-zend-approach/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 10:11:05 +0000</pubDate>
		<dc:creator>Subesh Pokhrel</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[Query]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://subesh.com.np/?p=300</guid>
		<description><![CDATA[I&#8217;ve already mentioned about custom query in Magento, before but now I think its time to upgrade that method to next level because it would always be good to have standard code for reference.So it is just a new improved way of using a custom query. First of all we will need is a connection [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve already mentioned about<a href="http://subesh.com.np/2009/12/using-custom-query-in-magento/"> custom query in Magento</a>, before but now I think its time to upgrade that method to next level because it would always be good to have standard code for reference.So it is just a new improved way of using a custom query.<br />
First of all we will need is a connection instance. Lets use default_setup instance because it can used for read and write purpose.</p>
<pre class="brush: php; title: ; notranslate">
$connection = Mage::getSingleton('core/resource')-&gt;getConnection('default_setup');
</pre>
<p>Then we will use this connection to instanciate Zend_Db_Select object and write query like</p>
<pre class="brush: php; title: ; notranslate">
$select = new Zend_Db_Select($connection);
$table = 'catalog_product_index_price';
$select-&gt;from($table, array('entity_id'))
	-&gt;where('entity_id = ?', $entityId);

// Getting result

$result = $select-&gt;query();
$rowCount = $result-&gt;rowCount();

if ($rowCount) {
	foreach ($result-&gt;fetchAll() as $data) {
		return $data['entity_id'];
	}
}
</pre>
<p>The above one is for select but what about inserting data? It is simple as well. All you have to do is create an associative array of data to be inserted and use connection to add data. For example</p>
<pre class="brush: php; title: ; notranslate">
$connection = Mage::getSingleton('core/resource')-&gt;getConnection('default_setup');
$table = 'catalog_product_index_price';

$insertData = array();
$insertData ['price'] = $productPrice;
$insertData ['final_price'] = $productPrice;
$insertData ['min_price'] = $productPrice;
$insertData ['max_price'] = $productPrice;
$insertData ['tier_price'] = $productPrice;

$connection-&gt;insert($table, $insertData);
</pre>
<p>I think this should be a good enough code for using custom query in Magento. About Zend_Db_Select please visit <a href="http://framework.zend.com/manual/en/zend.db.select.html">http://framework.zend.com/manual/en/zend.db.select.html</a>.</p>
<p><strong>[UPDATE]</strong></p>
<p>If you want to update the data with custom query and have a condition then you can send the conditions as array as third params to update function. For example.</p>
<pre class="brush: php; title: ; notranslate">
$connection = Mage::getSingleton('core/resource')-&gt;getConnection('default_setup');
$table = 'catalog_product_index_price';

$updateCond = array(); // Update condition array container.
$insertData = array();
$insertData ['price'] = $productPrice;
$insertData ['final_price'] = $productPrice;
$insertData ['min_price'] = $productPrice;
$insertData ['max_price'] = $productPrice;
$insertData ['tier_price'] = $productPrice;

$updateCond [] = 'store_id = 0';
$updateCond [] = 'entity_id = 3';

$connection-&gt;insert($table, $insertData, $updateCond);
</pre>
<p>Happy Brogramming!!</p>
]]></content:encoded>
			<wfw:commentRss>http://subesh.com.np/2011/08/custom-query-in-magento-a-zend-approach/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Generating Invoice/Order&#039;s Next Increment ID in Magento</title>
		<link>http://subesh.com.np/2010/12/generating-invoiceorders-next-increment-id-in-magento/</link>
		<comments>http://subesh.com.np/2010/12/generating-invoiceorders-next-increment-id-in-magento/#comments</comments>
		<pubDate>Thu, 16 Dec 2010 08:32:40 +0000</pubDate>
		<dc:creator>Subesh Pokhrel</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://subesh.com.np/?p=294</guid>
		<description><![CDATA[Magento has its own way of generating increment ID for new invoices and new orders after they are saved. But how about knowing them before hand, i.e before the invoice or the order is created! Lets first understand the working of those increment ID generation before jumping to the code. As all of us must [...]]]></description>
			<content:encoded><![CDATA[<p>Magento has its own way of generating increment ID for new invoices and new orders after they are saved. But how about knowing them before hand, i.e before the invoice or the order is created! Lets first understand the working of those increment ID generation before jumping to the code. As all of us must have known there are &#8220;Entity Types&#8221; in Magento. And those &#8220;Entity Types&#8221; are stored in table named <strong><em>eav_entity_type</em></strong>. If you look into that table for <strong>entity_type_code = order or invoice</strong>, in <strong>increment_model</strong> column you can see the Model alias used to generate new increment ID code. Lets take the case of invoice..so the increment model is <strong><em>eav/entity_increment_numeric</em></strong> and additionally this increment is store dependent as for this row <strong><em>increment_per_store</em></strong> is set to 1.</p>
<p>Next place to look into will be .. Yes! the model <strong><em>eav/entity_increment_numeric</em></strong>. And if you see the model class <strong>Mage_Eav_Model_Entity_Increment_Numeric</strong> there is only one Method in this class the <em>public function getNextId()</em> which is responsible to the the Next increment ID, needless to say its parent has other methods as well since you might have already understood. So if some how you can trigger the right Increment Model for any entity type and the call this method, you must get the next increment ID of order/invoice/shippment.</p>
<p>That was the &#8220;prose&#8221; part now lets get down to the &#8220;code poetry&#8221;. Here&#8217;s how you first find the appropriate increment ID and then fetch the new Increment ID.</p>
<pre class="brush: php; title: ; notranslate">
            //Get the Entity Type Increment Model you want, our case invoice
            // @var $entity_type_model Mage_Eav_Model_Entity_Type
            $entity_type_model=Mage::getSingleton('eav/config')-&gt;getEntityType('invoice');

            //Triggering the getNextId() of the Increment Model
            //@var $invoiceNew Mage_Sales_Model_Order_Invoice
            $new_incr_id = $entity_type_model-&gt;fetchNewIncrementId($invoiceNew-&gt;getOrder()-&gt;getStoreId());
</pre>
<p>Now, you have the generated Invoice Increment ID. This can be helpful in cases when you want to do something else before Invoice is created but you want to now the Increment Id before hand. Hope this helps.</p>
]]></content:encoded>
			<wfw:commentRss>http://subesh.com.np/2010/12/generating-invoiceorders-next-increment-id-in-magento/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Working with Ajax and JSON Objects in Magento [Case: Ajax Powered Login Functionality]</title>
		<link>http://subesh.com.np/2010/08/working-ajax-json-objects-magento-case-ajax-powered-login-functionality/</link>
		<comments>http://subesh.com.np/2010/08/working-ajax-json-objects-magento-case-ajax-powered-login-functionality/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 08:46:08 +0000</pubDate>
		<dc:creator>Subesh Pokhrel</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Block]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://subesh.com.np/?p=278</guid>
		<description><![CDATA[Previously I have written about Working With Ajax in Magento. And after a huge response I received from that post I was compelled to write more on implementing Ajax in Magento. And this time I want to say additionally about handling JSON (JavaScript Object Notation) along with Ajax, within the Magento enviornment. JSON Objects and [...]]]></description>
			<content:encoded><![CDATA[<p>Previously I have written about <a href="http://subesh.com.np/2009/11/working-with-ajax-in-magento/">Working With Ajax in Magento</a>. And after a huge response I received from that post I was compelled to write more on implementing Ajax in Magento. And this time I want to say additionally about handling JSON (<strong>JavaScript Object Notation</strong>) along with Ajax, within the Magento enviornment. JSON Objects and Ajax can be very helpful technique to get the work done. You can learn about JSON from <a href="http://www.json.org/">Here</a>.</p>
<p>I will try to describe this issue by taking a case of changing the Magento&#8217;s login functionality to a Ajax powered login functionality. So after this you will be able to implement a login function in a pop-up div in any page, unlike the default Magento&#8217;s seperate login page. I will leave the pop-up div part to you and get started with the real business (AJAX and JSON).</p>
<p>Presuming that you will use <strong>Mini-Login</strong> form. Here is how you proceed.</p>
<ol>
<li>Change Submit type button to Button type button.</li>
<li>Register OnClick Javascript event of that button and its Handler</li>
<li>In the Handler function call Ajax Request for login</li>
<li>Show Error Message or redirect to customer Dashboard</li>
</ol>
<p>Your mini.login.phtml should be like this</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form action=&quot;&lt;?php //echo $this-&gt;getPostActionUrl() ?&gt;&quot; id=&quot;mini-login-form&quot; method=&quot;post&quot;&gt;
    &lt;fieldset&gt;
        &lt;p&gt;&lt;label&gt;&lt;?php echo $this-&gt;__('Email') ?&gt;:&lt;/label&gt; &lt;input name=&quot;login[username]&quot; class=&quot;input-text&quot; /&gt;&lt;/p&gt;
        &lt;p&gt;&lt;label&gt;&lt;?php echo $this-&gt;__('Password') ?&gt;:&lt;/label&gt; &lt;input name=&quot;login[password]&quot; class=&quot;input-text&quot; /&gt;&lt;/p&gt;
        &lt;p&gt;&lt;input type=&quot;button&quot; onClick=&quot;handlerFunction()&quot; value=&quot;&lt;?php echo $this-&gt;__('Login') ?&gt;&quot; /&gt;&lt;/p&gt;
    &lt;/fieldset&gt;
&lt;/form&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
function handlerFunction(){

// Write These codes only after form Validation

// Making Ajax Request
		var request = new Ajax.Request(
			//Defining Ajax Request URL, We are calling custom Controller Ns_Mylogin_AccountController Class (Defined Below)
        	'&lt;?php echo $this-&gt;getUrl(&quot;mylogin/account/loginPost&quot;) ?&gt;',
           	{
            	method: 'post',
                onComplete: function(transport){ // Defining Complete Callback Function

                	// Getting Ajax Response Text Which is JSON Object
                	var jsonResponse=transport.responseText;
                	//Checking JSON Objects property and performing related action
                	// You will understand the response Text format after going through the controller description (Below)
                	if(jsonResponse.error){
                		alert(&quot;Error Occured&quot;);
						return false;
                	}
                	else{
                		window.location.href=jsonResponse.url;
                	}
                },
                parameters: Form.serialize($(&quot;mini-login-form&quot;))	// Seriallizing the form input values
        	}
        );
}
//--&gt;
&lt;/script&gt;
</pre>
<p>Please see inline comments for better understanding. Now our next set should be setting up our custom controller. I&#8217;ll not get into details of setting up modules and all but directly to our controller class <strong>Ns_Mylogin_AccountController</strong>. What I&#8217;ve done is just taken the core&#8217;s  <strong>loginPostAction </strong>function of <strong>Mage_Customer_AccountController</strong> and added some codes there. Please see there is a comment on each line added apart from the default Magento&#8217;s core code.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
require_once(&quot;Mage/Customer/controllers/AccountController.php&quot;);
class Ns_Mylogin_AccountController extends Mage_Customer_AccountController{
	/**
	 * Login post action
	 * @return JSON Object
	 */
	public function loginPostAction()
	{
		// Added Line #1
		$result[&quot;error&quot;]=0;

		$session = $this-&gt;_getSession();

		if ($this-&gt;getRequest()-&gt;isPost()) {
			$login = $this-&gt;getRequest()-&gt;getPost('login');
			if (!empty($login['username']) &amp;amp;&amp;amp; !empty($login['password'])) {
				try {
					$session-&gt;login($login['username'], $login['password']);
					if ($session-&gt;getCustomer()-&gt;getIsJustConfirmed()) {
						$this-&gt;_welcomeCustomer($session-&gt;getCustomer(), true);
					}
				} catch (Mage_Core_Exception $e) {
					switch ($e-&gt;getCode()) {
						case Mage_Customer_Model_Customer::EXCEPTION_EMAIL_NOT_CONFIRMED:
							//Added Line #2
							$result[&quot;error&quot;]=1;
							$message = Mage::helper('customer')-&gt;__('This account is not confirmed. &lt;a href=&quot;%s&quot;&gt;Click here&lt;/a&gt; to resend confirmation email.', 						Mage::helper('customer')-&gt;getEmailConfirmationUrl($login['username']));
							break;
						case Mage_Customer_Model_Customer::EXCEPTION_INVALID_EMAIL_OR_PASSWORD:
							//Added Line #3
							$result[&quot;error&quot;]=1;
							$message = $e-&gt;getMessage();
							break;
						default:
							//Added Line #4
							$result[&quot;error&quot;]=1;
							$message = $e-&gt;getMessage();
					}
					$session-&gt;addError($message);
					$session-&gt;setUsername($login['username']);
				} catch (Exception $e) {
					// Mage::logException($e); // PA DSS violation: this exception log can disclose customer password
				}
			} else {
				//Added Line #5
				$result[&quot;error&quot;]=1;
				$session-&gt;addError($this-&gt;__('Login and password are required'));
				//Added Line #6
				$this-&gt;getResponse()-&gt;setBody(Mage::helper('core')-&gt;jsonEncode($result));
			}
		}
		//Added Line #7
		$result[&quot;url&quot;]=$this-&gt;_loginPostRedirect();
		//Added Line #8
		$this-&gt;getResponse()-&gt;setBody(Mage::helper('core')-&gt;jsonEncode($result));
	}
</pre>
<p>What I&#8217;ve done is added an array <strong>$result</strong> that will hold value if there is error or not while processing the user&#8217;s request. If there is error that array will hold $result['error']=1 else it will be as initiallized in <em>Added Line #1</em>. From <em>Added Line #2</em> through <em>Added Line #5</em>, we have various condition to check for error and set our <strong>$result</strong> variable.</p>
<p>On <em>Added Line #7</em> we have called another function (which we we rewrite as well) that will give us the url location identifying which location should be redirect after successful login. The implementation of function is given below. Finally in <em>Added Line #8</em> and <em>Line #6</em> we have encoded our $result array into <strong>JSON</strong> format and send as the response.</p>
<p>For visuallization our $result array will be one of the following.</p>
<ol>
<li> Case (No Error) : $result["error"]=0; $result["url"]=&#8221;SOME Redirect URL&#8221;</li>
<li> Case (Error) 	 :	$result["error"]=1;</li>
</ol>
<p>This JSON encoded response will be then used by the ajax call back function defined and perform related action.</p>
<p>Here&#8217;s the <strong>_loginPostRedirect()</strong> function which I mentioned (Added Line #7).</p>
<pre class="brush: php; title: ; notranslate">
/**
	 * Define target URL and redirect customer after logging in
	 */
	protected function _loginPostRedirect()
	{
		$session = $this-&gt;_getSession();

		if (!$session-&gt;getBeforeAuthUrl() || $session-&gt;getBeforeAuthUrl() == Mage::getBaseUrl() ) {

			// Set default URL to redirect customer to
			$session-&gt;setBeforeAuthUrl(Mage::helper('customer')-&gt;getAccountUrl());

			// Redirect customer to the last page visited after logging in
			if ($session-&gt;isLoggedIn())
			{
				if (!Mage::getStoreConfigFlag('customer/startup/redirect_dashboard')) {
					if ($referer = $this-&gt;getRequest()-&gt;getParam(Mage_Customer_Helper_Data::REFERER_QUERY_PARAM_NAME)) {
						$referer = Mage::helper('core')-&gt;urlDecode($referer);
						if ($this-&gt;_isUrlInternal($referer)) {
							$session-&gt;setBeforeAuthUrl($referer);
						}
					}
				}
				else if ($session-&gt;getAfterAuthUrl()) {
					$session-&gt;setBeforeAuthUrl($session-&gt;getAfterAuthUrl(true));
				}
			} else {
				$session-&gt;setBeforeAuthUrl(Mage::helper('customer')-&gt;getLoginUrl());
			}
		} else if ($session-&gt;getBeforeAuthUrl() == Mage::helper('customer')-&gt;getLogoutUrl()) {
			$session-&gt;setBeforeAuthUrl(Mage::helper('customer')-&gt;getDashboardUrl());
		}
		else {
			if (!$session-&gt;getAfterAuthUrl()) {
				$session-&gt;setAfterAuthUrl($session-&gt;getBeforeAuthUrl());
			}
			if ($session-&gt;isLoggedIn()) {
				$session-&gt;setBeforeAuthUrl($session-&gt;getAfterAuthUrl(true));
			}
		}
		// Changed Here
		return $session-&gt;getBeforeAuthUrl(true);
	}
</pre>
<p>You can download the code From <a href="http://code.google.com/p/subeshexamples/downloads/detail?name=Ajax_Json_Magento_subesh.com.np.zip#makechanges">Here</a>.</p>
<p>Hope it helps! Happy Coding.</p>
]]></content:encoded>
			<wfw:commentRss>http://subesh.com.np/2010/08/working-ajax-json-objects-magento-case-ajax-powered-login-functionality/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Displaying Currency code after the price value in Magento</title>
		<link>http://subesh.com.np/2010/08/displaying-currency-code-after-the-price-value-in-magento/</link>
		<comments>http://subesh.com.np/2010/08/displaying-currency-code-after-the-price-value-in-magento/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 11:53:38 +0000</pubDate>
		<dc:creator>Subesh Pokhrel</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://subesh.com.np/?p=287</guid>
		<description><![CDATA[I had a time to research on Magento&#8217;s currency format and its display on Magento webshop. I then came across a block where I could change the format of currency display, in this case I am talking about moving the currency symbol to the right of the price value. In other words I found a [...]]]></description>
			<content:encoded><![CDATA[<p>I had a time to research on Magento&#8217;s currency format and its display  on Magento webshop. I then came across a block where I could change the  format of currency display, in this case I am talking about moving the  currency symbol to the right of the price value. In other words I found a  way to show $10.00 as 10.00$. Notice the <strong>$</strong> (Dollar) sign moving at the right of the price value.<br />
Here&#8217;s a description of how this can be achievable. The basic idea is to rewrite <strong>Mage_Core_Model_Locale</strong> class&#8217;s currency function and add additional code. First you must write a rewrite code in your module&#8217;s<strong> config.xml</strong>.</p>
<pre class="brush: xml; title: ; notranslate">
 &lt;core&gt;
 &lt;rewrite&gt;
 &lt;locale&gt;Namespace_Module_Model_Locale&lt;/locale&gt;
 &lt;/rewrite&gt;
 &lt;/core&gt;
 </pre>
<p>Then in <strong>Namespace_Module_Model_Locale</strong> class you can add the following code.</p>
<pre class="brush: php; title: ; notranslate">
 class Namespace_Module_Model_Locale extends Mage_Core_Model_Locale{
 /*
 * Code: subesh.com.np
 */

public function currency($currency)
 {
 Varien_Profiler::start('locale/currency');
 if (!isset(self::$_currencyCache[$this-&gt;getLocaleCode()][$currency])) {
 try {
 $currencyObject = new Zend_Currency($currency, $this-&gt;getLocale());

// Additionally Added Code
 // The options array's position key has other values as well.

// 	Zend_Currency::STANDARD
 // 	Zend_Currency::RIGHT
 //	Zend_Currency::LEFT

$options = array(
 'position'	=&gt; Zend_Currency::RIGHT
 );

$currencyObject-&gt;setFormat($options);

// END Additionally Added Code

} catch (Exception $e) {
 $currencyObject = new Zend_Currency($this-&gt;getCurrency(), $this-&gt;getLocale());
 $options = array(
 'name'      =&gt; $currency,
 'currency'  =&gt; $currency,
 'symbol'    =&gt; $currency
 );
 $currencyObject-&gt;setFormat($options);
 }

self::$_currencyCache[$this-&gt;getLocaleCode()][$currency] = $currencyObject;
 }
 Varien_Profiler::stop('locale/currency');
 return self::$_currencyCache[$this-&gt;getLocaleCode()][$currency];
 }

}
</pre>
<p>You can see the comment of the code above for more detail understanding.</p>
<p><strong><em>P.S: Be informed that you need to change the Class Name you are about to create on the basis of your Namespace and Module name.</em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://subesh.com.np/2010/08/displaying-currency-code-after-the-price-value-in-magento/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Analysis &amp; Usage of Collections in Magento</title>
		<link>http://subesh.com.np/2010/05/analysis-usage-collections-magento/</link>
		<comments>http://subesh.com.np/2010/05/analysis-usage-collections-magento/#comments</comments>
		<pubDate>Thu, 13 May 2010 12:20:25 +0000</pubDate>
		<dc:creator>Subesh Pokhrel</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Query]]></category>
		<category><![CDATA[String]]></category>

		<guid isPermaLink="false">http://subesh.com.np/?p=246</guid>
		<description><![CDATA[As a Magento Programmer I am fascinated by the use &#38; simplicity of collection used in Magento. Simplicity, does not really mean being simple (it is rather complex structured) but easy to use. With the help of one of my colleague, I got down to understand how collection really represents the &#8220;collection&#8221; of data we [...]]]></description>
			<content:encoded><![CDATA[<p>As a Magento Programmer I am fascinated by the use &amp; simplicity of collection used in Magento. Simplicity, does not really mean being simple (it is rather complex structured) but easy to use. With the help of one of my colleague, I got down to understand how collection really represents the &#8220;collection&#8221; of data we are actually trying to get from database. Here is what I found drilling down into the Magento&#8217;s Core. I may be &#8220;not quite right&#8221; with the analysis, you can always comment.</p>
<p>Almost all the collections found inside  <strong>app/code/codepool/Namespace/Module/Model/Mysql4/model/Collection.php</strong> are the child of parent Class <strong>Mage_Core_Model_Mysql4_Collection_Abstract</strong>. Primary thing done in the class constructor is initializing its resource and Model. If you look into one of the Collection class you can see in its constructor.</p>
<pre class="brush: php; title: ; notranslate">
/**
	 * @class Mage_Checkout_Model_Mysql4_Agreement_Collection
     * Initialize resource
     *
     */
    protected function _construct()
    {
        $this-&gt;_init('checkout/agreement');
    }
</pre>
<p>And this _init function has been implemented in its parent class as</p>
<pre class="brush: php; title: ; notranslate">
/**
     * Standard resource collection initalization
     *
     * @param string $model
     * @return Mage_Core_Model_Mysql4_Collection_Abstract
     */
    protected function _init($model, $resourceModel=null)
    {
        $this-&gt;setModel($model);
        if (is_null($resourceModel)) {
            $resourceModel = $model;
        }
        $this-&gt;setResourceModel($resourceModel);
        return $this;
    }
</pre>
<p>The resource class can be found in <strong>app/code/codepool/Namespace/Module/Model/Mysql4/model.php</strong>. And this resource class in turn initializes the database table to be used in the Module along with the table&#8217;s primary key.</p>
<pre class="brush: php; title: ; notranslate">
class Mage_Checkout_Model_Mysql4_Agreement extends Mage_Core_Model_Mysql4_Abstract
	{

	protected function _construct()
    {
        $this-&gt;_init('checkout/agreement', 'agreement_id');
    }
	......
	}
</pre>
<p>It is this resource class that actually works out the database connections, read/write adapters and performs transactions. So this is the basic deduction about the link of collection with the database and its tables. But how are those collection formed still remains a mystery, not anymore! In this section of the post I will try to explain how are the collections really formed.</p>
<p>If I can, &#8220;<strong>collection</strong>&#8221; can be defined as collection or array of its resource. And in Magento case, most of the resources are database&#8217;s query results. Simply you can visualize &#8220;<strong>collection</strong>&#8221; to be array of your model&#8217;s resource. If a &#8220;<strong>query</strong>&#8221; in Magento returns a collection of all the products then it would mean that the very collection is an array of all the individual product&#8217;s object. But one question still remains how will the database query&#8217;s result transform into a Magento &#8220;<strong>collection</strong>&#8220;. To understand that we need to understand the collection class and its parents.</p>
<p>The class Structure for <strong>Mage_Core_Model_Mysql4_Collection_Abstract</strong> is like this.</p>
<p>Mage_Core_Model_Mysql4_Collection_Abstract</p>
<p style="padding-left: 30px;">|__ Varien_Data_Collection_Db (C)</p>
<p style="padding-left: 60px;">|__	Varien_Data_Collection (C)</p>
<p style="padding-left: 90px;">|__ IteratorAggregate (I)</p>
<p style="padding-left: 90px;">|__ Countable (I)</p>
<p>You can see that all collection implements two Interfaces <strong>IteratorAggregate </strong>&amp; <strong>Countable</strong>.</p>
<p><a href="http://goo.gl/MjAT" target="_blank">IteratorAggregate </a> is predefined in Standard PHP Library that extends Abstract Base Class <a href="http://goo.gl/rzXS" target="_blank">Traversable </a>. On using this Interface you can then <a href="http://goo.gl/hgtI" target="_blank">Iterate Through Object</a> using &#8220;<strong>foreach</strong>&#8221; construct. Countable returns the size of the Collection Object.</p>
<p>Among the two Interfaces, <strong>IteratorAggregate </strong>is particularly important. As you can see in Class Hierarchy both the interfaces are implemented by<strong> Varien_Data_Collection</strong> concrete class. <strong>IteratorAggregate</strong> has abstract public method <strong>getIterator()</strong> which returns the Iterator interface and the concrete Class has to implement the method on its own. It is this Iterator that provides the real iteration functionality. You can get a detailed description about Iterator <a href="http://goo.gl/C9Nx" target="_blank">Here</a>.</p>
<p>So if you look into the <strong>Varien_Data_Collection</strong> you will find the <strong>getIterator()</strong> implemented like this.</p>
<pre class="brush: php; title: ; notranslate">
/**
	 * @class Varien_Data_Collection
     * Implementation of IteratorAggregate::getIterator()
     */
    public function getIterator()
    {
        $this-&gt;load();
        return new ArrayIterator($this-&gt;_items);
    }
</pre>
<p>As you can see that it first loads the &#8220;<strong>items</strong>&#8221; (I will get back to this Items) and instanciates the value to an internal Class <a href="http://goo.gl/8LAi" target="_blank">ArrayIterator </a>. And the Iterator returned by this function can then be iterated using <strong>foreach </strong>construct.</p>
<p>Looks like it is going to be a looonnnnng post, let be summarize what I&#8217;ve tried to point out until now. I&#8217;ve tried to show the link between the collection class or rather object with the database table and explain the iteration behavior of the collection object. But one question still remains how will the database query&#8217;s result transform into a Magento&#8217;s &#8220;<strong>collection</strong>&#8220;. This is where the &#8220;<strong>items</strong>&#8221; explanation need to be done.</p>
<p>&#8220;<strong>Items</strong>&#8221; are actually array if individual object (item) of the collection which represents the array of tuple of the database query result. As you see in the snippet above the <strong>ArrayIterator </strong>takes <strong>$this-&gt;_items</strong> are parameter. But <strong>$this-&gt;_items</strong> are not populated here on <strong>Varien_Data_Collection</strong> but rather on is child class <strong>Varien_Data_Collection_Db</strong>. Here&#8217;s the snippet from Varien_Data_Collection_Db.</p>
<pre class="brush: php; title: ; notranslate">
/**
     * Load data
     * @class Varien_Data_Collection_Db
     * @return  Varien_Data_Collection_Db
     */
    public function load($printQuery = false, $logQuery = false)
    {
        if ($this-&gt;isLoaded()) {
            return $this;
        }

        $this-&gt;_renderFilters()
             -&gt;_renderOrders()
             -&gt;_renderLimit();

        $this-&gt;printLogQuery($printQuery, $logQuery);

		// Getting Data from DB
        $data = $this-&gt;getData();

        $this-&gt;resetData();

        if (is_array($data)) {

		    // Looping on each result row
            foreach ($data as $row) {
			    // Creating Empty &quot;item&quot; Varien_Object's object
                $item = $this-&gt;getNewEmptyItem();

                if ($this-&gt;getIdFieldName()) {
                    $item-&gt;setIdFieldName($this-&gt;getIdFieldName());
                }

				// Setting Varien_Object's values to that of the row
                $item-&gt;addData($row);

				/**
				* Adding the &quot;item&quot; to the collection @class Varien_Data_Collection
				* So while referring to $this-&gt;_items @class Varien_Data_Collection it will return array of this &quot;item&quot;
				*/
                $this-&gt;addItem($item);
            }

        }

        $this-&gt;_setIsLoaded();
        $this-&gt;_afterLoad();
        return $this;
    }

    /**
     * Get all data array for collection
     * @class Varien_Data_Collection_Db
     * @return array
     */
    public function getData()
    {
        if ($this-&gt;_data === null) {
            $this-&gt;_renderFilters()
                 -&gt;_renderOrders()
                 -&gt;_renderLimit();

			// Fetching all the row with the Select query set
            $this-&gt;_data = $this-&gt;_fetchAll($this-&gt;_select);
            $this-&gt;_afterLoadData();
        }
        return $this-&gt;_data;
    }
</pre>
<p>You can go through the inline comments I&#8217;ve added. This is it, I&#8217;ve finally worked out the explanation of structure &amp; creation of Magento&#8217;s Collection and its iterative behavior. I&#8217;ve tried to show pictorially (below) what I have just described. Confused! Plz comment and of course please do comment if I am wrong, because there are &#8220;times&#8221; when you try to understand things even though they actually aren&#8217;t just like you think. I&#8217;d like to quote <strong>Paulo </strong> :<strong><em>&#8220;I see the world in terms of what I would like to see happen, not what actually does&#8221;</em></strong>!</p>
<p><img class="alignnone size-full wp-image-249" title="hierarchy" src="http://subesh.com.np/wp-content/uploads/2010/05/hierarchy.jpg" alt="hierarchy" width="505" height="604" /></p>
]]></content:encoded>
			<wfw:commentRss>http://subesh.com.np/2010/05/analysis-usage-collections-magento/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Solution: Error Message Not Showing up in Frontend in Magento</title>
		<link>http://subesh.com.np/2010/05/solution-error-message-showing-frontends-magento/</link>
		<comments>http://subesh.com.np/2010/05/solution-error-message-showing-frontends-magento/#comments</comments>
		<pubDate>Tue, 04 May 2010 12:22:40 +0000</pubDate>
		<dc:creator>Subesh Pokhrel</dc:creator>
				<category><![CDATA[Custom Module]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Block]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://subesh.com.np/?p=238</guid>
		<description><![CDATA[I recently got to a situation where I needed to add a new frontend template for some module and after some action show the error or success message. Not the first time though . Interesting thing was even if I added this code in the PHTML file. It did not work. Yes, after adding this [...]]]></description>
			<content:encoded><![CDATA[<p>I recently got to a situation where I needed to add a new frontend template for some module and after some action show the error or success message. Not the first time though <img src='http://subesh.com.np/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> . Interesting thing was even if I added this code in the PHTML file.</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php echo $this-&gt;getMessagesBlock()-&gt;getGroupedHtml() ?&gt;
</pre>
<p>It did not work. Yes, after adding this block it had worked before. In my case, the probable case might be that I had called the module&#8217;s template from CMS page. In other case it should work. So, I looked for work around and the following did the trick.</p>
<pre class="brush: php; title: ; notranslate">
// Getting Messages from Session
$messages=Mage::getSingleton(&quot;customer/session&quot;)-&gt;getMessages();

// Creating Block Mage_Core_Block_Messages
// Setting Message
// echoing the Message's HTML
echo $this-&gt;getLayout()-&gt;createBlock(&quot;core/messages&quot;)-&gt;setMessages($messages)-&gt;getGroupedHtml();
</pre>
<p>The Error/Success or Notice messages are set on session. So what I did was take those message/s from the session and create a new block, same as what <strong>$this->getMessagesBlock()</strong> might have called, and set those message to the created block and echoed its HTML.</p>
<p>Clever? or not?</p>
]]></content:encoded>
			<wfw:commentRss>http://subesh.com.np/2010/05/solution-error-message-showing-frontends-magento/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Redirect to some other location from Model or Observer in Magento</title>
		<link>http://subesh.com.np/2010/03/redirect-location-model-observer-magento/</link>
		<comments>http://subesh.com.np/2010/03/redirect-location-model-observer-magento/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 12:45:02 +0000</pubDate>
		<dc:creator>Subesh Pokhrel</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Controllers]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Query]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://subesh.com.np/?p=236</guid>
		<description><![CDATA[Redirection in Magento&#8217;s controller is simple. You just need to call a _redirect() or _forward() function and provide appropriate router/controller/action parameter. But if you want to redirect to some other page from Model or from Observer, then this can be tricky. Lets take an example, for explaining what I am referring to, Suppose you are [...]]]></description>
			<content:encoded><![CDATA[<p>Redirection in Magento&#8217;s controller is simple. You just need to call a <strong>_redirect() </strong>or <strong>_forward() </strong>function and provide appropriate router/controller/action parameter. But if you want to redirect to some other page from Model or from Observer, then this can be tricky. Lets take an example, for explaining what I am referring to, Suppose you are building a module that will only allow user of certain group to view a product in frontend. Then, you will have options like:</p>
<ul>
<ol>
Rewrite you catalog/product/view controller and add that logic.
</ol>
<ol>
Rewrite Block of that page and show error message accordingly.
</ol>
<ol>
Any other..?
</ol>
</ul>
<p>Yeha, I do have another option as well. The Event-Observer Method. You can observe an event <strong>controller_action_predispatch_catalog_product_view</strong> and set up an observer where you can write your own logic there and redirect accordingly.</p>
<p>You can observe that event by setting up your config something like this.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;controller_action_predispatch_catalog_product_view&gt;
	&lt;observers&gt;
		&lt;mymodel&gt;
			&lt;type&gt;singleton&lt;/type&gt;
			&lt;class&gt;mymodel/controller_observer&lt;/class&gt;
			&lt;method&gt;controller_action_predispatch_catalog_product_view&lt;/method&gt;
		&lt;/mymodel&gt;
	&lt;/observers&gt;
&lt;/controller_action_predispatch_catalog_product_view&gt;
</pre>
<p>And on the observer&#8217;s <strong>controller_action_predispatch_catalog_product_view</strong> method, you can check your logic for visibiliy of that product to the logged in user group and redirect if not visible.</p>
<p>Here&#8217;s the main point of this post (Did I take a lot of your time ?), in that same method you can directly redirect using the following snippet of code.</p>
<pre class="brush: php; title: ; notranslate">

Mage::app()-&gt;getResponse()-&gt;setRedirect(Mage::getUrl(&quot;myrouter/mycontroller/noview&quot;));
</pre>
<p>Adding an error message to the session would be a good idea, for user to understand what is happening. Else you can directly call a template in the redirected controller&#8217;s action with appropriate message.</p>
<p>I think this sums up the post for now..and as always hoping it helps somebody and waiting for the response.</p>
]]></content:encoded>
			<wfw:commentRss>http://subesh.com.np/2010/03/redirect-location-model-observer-magento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generating Backend-Admin URL with Key and Parameters in Magento</title>
		<link>http://subesh.com.np/2010/03/generating-backend-admin-url-key-parameters-magento/</link>
		<comments>http://subesh.com.np/2010/03/generating-backend-admin-url-key-parameters-magento/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 12:52:57 +0000</pubDate>
		<dc:creator>Subesh Pokhrel</dc:creator>
				<category><![CDATA[Custom Module]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://subesh.com.np/?p=228</guid>
		<description><![CDATA[When you log into adminstrator part of the Magento webshop, and look into the url you may see something like this. The part in &#8220;RED&#8221; are module controller(router)/action. And the part in &#8220;GREEN&#8221; is what we call as &#8220;Paramerters&#8221; and the &#8220;BLUE&#8221; part is the &#8220;Key&#8220;. The Key (which is also a URL parameter) in [...]]]></description>
			<content:encoded><![CDATA[<p>When you log into adminstrator part of the Magento webshop, and look into the url you may see something like this.<br />
<div id="attachment_230" class="wp-caption alignnone" style="width: 429px"><img src="http://subesh.com.np/wp-content/uploads/2010/03/adminurl.png" alt="Admin URL with Keys and Parameters" title="Admin URL with Keys and Parameters" width="419" height="42" class="size-full wp-image-230" /><p class="wp-caption-text">Admin URL with Keys and Parameters</p></div></p>
<p>The part in &#8220;RED&#8221; are module controller(router)/action. And the part in &#8220;GREEN&#8221; is what we call as &#8220;<strong>Paramerters</strong>&#8221; and the &#8220;BLUE&#8221; part is the &#8220;<strong>Key</strong>&#8220;. The Key (which is also a URL parameter) in the URL has been added for security reasons and is checked against the session&#8217;s values for every action. If store owner does not want to use the key in admin url, then it can be set off from administrator settings.</p>
<p>My point in this post is, if you are a developer and creating a module that has Admin controller and you are simply calling some action of your controller lets say,<strong> <em>mymodule/adminhtml_mycontroller/myaction/param1/1/param2/2</em> </strong>the it does not redirect you to your intended page, but will redirect to dashboard, IF key is enabled. You will have to add the key parameter to the URL to go to your page. So here is a simple snippet of code that will help you to build your URL with valid keys.</p>
<pre class="brush: php; title: ; notranslate">
echo Mage::helper(&quot;adminhtml&quot;)-&gt;getUrl(&quot;mymodule/adminhtml_mycontroller/myaction/&quot;,array(&quot;param1&quot;=&gt;1,&quot;param2&quot;=&gt;2));
</pre>
<p>The &#8220;adminhtml&#8221; helper will automatically create url with keys attached to the URL.</p>
<p>Next thing, if you see the key of various pages in admin you will see that those keys are not same, there is a different logic behind creating those key values. The keys generated depends upon the controller and action you are about to execute. Keys can be seperatly generated as follows.</p>
<pre class="brush: php; title: ; notranslate">
Mage::getSingleton('adminhtml/url')-&gt;getSecretKey(&quot;adminhtml_mycontroller&quot;,&quot;myaction&quot;);
</pre>
<p>Hope this helps, and this can be particularly helpful when you are using templates in admin modules and adding buttons to redirect to some other location. At least that was my case!</p>
]]></content:encoded>
			<wfw:commentRss>http://subesh.com.np/2010/03/generating-backend-admin-url-key-parameters-magento/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Magento Module Release: Uses Layout To List Post, made by AW Blog, on the basis of Category Identifier</title>
		<link>http://subesh.com.np/2010/03/magento-module-release-layout-list-post-aw-blog-basis-category-identifier/</link>
		<comments>http://subesh.com.np/2010/03/magento-module-release-layout-list-post-aw-blog-basis-category-identifier/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 06:27:23 +0000</pubDate>
		<dc:creator>Subesh Pokhrel</dc:creator>
				<category><![CDATA[Custom Module]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Layout]]></category>

		<guid isPermaLink="false">http://subesh.com.np/?p=222</guid>
		<description><![CDATA[I&#8217;ve always wanted to contribute something in Magento Community and I think today the day has arrived. The module is named as Sirius Blog Helper, just a name, Who cares about the &#8220;Name&#8221; unless it works . The basic function of the Module is to list the post made via AW Blog extension, categorized by [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always wanted to contribute something in Magento Community and I think today the day has arrived. The module is named as Sirius Blog Helper, just a name, Who cares about the &#8220;Name&#8221; unless it works <img src='http://subesh.com.np/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . The basic function of the Module is to list the post made via <a href="http://www.magentocommerce.com/extension/1516/blog">AW Blog</a> extension, categorized by category identifier of the post, using Layout. Yes, only through layout you can list the post anywhere you want. Not only that you can also restrict the size of the list through layout as well.</p>
<p>Suppose you want to list 5 recent post made under &#8220;news&#8221; category identifier. Here&#8217;s how you can do it easily, of course you have to install the module first. The Module can be currently downloaded from <a href="http://subeshexamples.googlecode.com/files/Sirius_Bloghelper.zip">Here</a>, and will be soon available in Magento Connect as well.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;reference name=&quot;right&quot;&gt;
	&lt;block type=&quot;sbloghelper/helper&quot; name=&quot;news.list&quot;&gt;
		&lt;action method=&quot;addCategoryIdentifier&quot;&gt;
			&lt;identifier&gt;news&lt;/identifier&gt;
		&lt;/action&gt;
		&lt;action method=&quot;addListSize&quot;&gt;
			&lt;size&gt;5&lt;/size&gt;
		&lt;/action&gt;
	&lt;/block&gt;
&lt;/reference&gt;
</pre>
<p>Simple isn&#8217;t it? You can place similar kind of code in layout out to list other post categorically. Hope this helps to someone. Please do post your feedbacks.</p>
<div id="attachment_226" class="wp-caption alignnone" style="width: 263px"><img src="http://subesh.com.np/wp-content/uploads/2010/03/frontend-253x300.png" alt="Frontend Screen Shots" title="Frontend Screen Shots" width="253" height="300" class="size-medium wp-image-226" /><p class="wp-caption-text">Frontend Screen Shots</p></div>
]]></content:encoded>
			<wfw:commentRss>http://subesh.com.np/2010/03/magento-module-release-layout-list-post-aw-blog-basis-category-identifier/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Creating Product Links in Magento Using Custom Query</title>
		<link>http://subesh.com.np/2010/03/creating-product-links-magento-custom-query/</link>
		<comments>http://subesh.com.np/2010/03/creating-product-links-magento-custom-query/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 06:28:27 +0000</pubDate>
		<dc:creator>Subesh Pokhrel</dc:creator>
				<category><![CDATA[Custom Module]]></category>
		<category><![CDATA[Import/Export]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[Import]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Query]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://subesh.com.np/?p=220</guid>
		<description><![CDATA[I&#8217;ve already made a post in this blog about Adding Related Product and other links to Product in Magento . But when I used the method to creating links among product&#8217;s, while importing very large number of products and creating large number of product links, it took a lot of time and resource. So I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve already made a post in this blog about <a href="http://subesh.com.np/2009/11/adding-related-product-and-other-links-to-product-in-magento/">Adding Related Product and other links to Product in Magento </a>. But when I used the method to creating links among product&#8217;s, while importing very large number of products and creating large number of product links, it took a lot of time and resource. So I thought why not give it a try by direclty creating a link using SQL? And YES! it worked.</p>
<p>Below is the code how I created those links using Custom SQL. But I have to tell you that the former methods looks organized, this is just a work around to a situation. You might know what I am trying to say!</p>
<pre class="brush: php; title: ; notranslate">
$resource 	= Mage :: getSingleton( 'core/resource' );
$read= $resource -&gt; getConnection( 'core_read' );
$write= $resource-&gt;getConnection('core_write');
$linkTable=$resource-&gt;getTableName('catalog/product_link');

// Creating Upsell Product link

$write-&gt;query(&quot;INSERT into $linkTable SET
							product_id='&quot;.$productId.&quot;',
							linked_product_id='&quot;.$linkProduct.&quot;',
							link_type_id='&quot;.Mage_Catalog_Model_Product_Link::LINK_TYPE_UPSELL.&quot;'
			&quot;);

// Creating Related Product link

$write-&gt;query(&quot;INSERT into $linkTable SET
							product_id='&quot;.$productId.&quot;',
							linked_product_id='&quot;.$linkProduct.&quot;',
							link_type_id='&quot;.Mage_Catalog_Model_Product_Link::LINK_TYPE_RELATED.&quot;'
			&quot;);

// Creating Crosssell Product Link
$write-&gt;query(&quot;INSERT into $linkTable SET
							product_id='&quot;.$productId.&quot;',
							linked_product_id='&quot;.$linkProduct.&quot;',
							link_type_id='&quot;.Mage_Catalog_Model_Product_Link::LINK_TYPE_CROSSSELL.&quot;'
			&quot;);
</pre>
<p>Happy Coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://subesh.com.np/2010/03/creating-product-links-magento-custom-query/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

