<?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>Magento Design and Development</title>
	<atom:link href="http://inchoo.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://inchoo.net</link>
	<description>Magento Design and Magento Development Professionals - Inchoo</description>
	<lastBuildDate>Tue, 22 May 2012 16:07:20 +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>Case Study from Australia: Clickable Automotive</title>
		<link>http://inchoo.net/ecommerce/case-study-magento-australia-clickable-automotive/</link>
		<comments>http://inchoo.net/ecommerce/case-study-magento-australia-clickable-automotive/#comments</comments>
		<pubDate>Tue, 22 May 2012 09:50:10 +0000</pubDate>
		<dc:creator>Lyssandro Reis</dc:creator>
				<category><![CDATA[E-Commerce]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[conversion rate optimization]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=14872</guid>
		<description><![CDATA[I would like to share with the community another Magento Case and a fine example of collaboration between Clickable Automotive, Inchoo Australia and Inchoo Headquarters. This article also provides a &#8230;]]></description>
			<content:encoded><![CDATA[<p>I would like to share with the community another Magento Case and a fine example of collaboration between Clickable Automotive, Inchoo Australia and Inchoo Headquarters. This article also provides a good overview of how we approach a previously developed Magento store with the objective to establish a long-term relationship with our client and ensure satisfaction.</p>
<p><span id="more-14872"></span></p>
<h2>The Client</h2>
<p>Clickable Automotive is a highly specialized online car parts store that targets the European automotive enthusiasts from Australia, New Zealand and surrounding countries.</p>
<p>If you need quality parts for your BMW for instance, you’ve found it: <a title="Australia's online BMW parts specialist | Clickable Automotive" href="http://clickableautomotive.com.au">clickableautomotive.com.au</a>. In no time you will also find parts for your Audi, Volkswagen and other European makes and models.</p>
<p><a title="Follow Lucas O'Brien - Manager of Clickable Automotive." href="https://twitter.com/#!/clickableauto">Lucas O’Brien</a> is the Managing Director of the company located in Port Melbourne, Australia. Since the beginning, it was clear to us how knowledgeable and passionate he is about his business as well as his commitment to quality.</p>
<p>The store’s look-and-feel made it obvious that we were dealing with a business that is well aligned with the modern web and has a very refined taste for design. I must give the credits for the design to <a href="https://twitter.com/#!/gabelopez">Gabe Lopez</a> from Brave Nu Digital. Great work guys!</p>
<h2>The Project</h2>
<p>Lucas approached us with a recently developed store-front with a hybrid Magento and WordPress integration. He wasn’t overly happy with some User Experience details and wanted to make sure that the SEO best practices were in place to accelerate growth, achieve better rankings and establish an improved conversion rate from the beginning.</p>
<h2>Inchoo’s Approach</h2>
<p>At Inchoo, we get a lot of enquires for fixes and modifications. Sometimes, behind a small fix or apparent contained issue, lies a hacked Magento core, tons of extensions and badly written custom features &#8211; which often gets you into a scenario where you fix one problem followed by three new ones in a never ending loop.</p>
<p>That is the reason why we prefer not to try to win the deal with deliberate low-cost “guesstimates”. If we can not ensure quality and a perfectly stable and bug-free Magento store, we would rather not get the job. That’s part of our commitment to our clients’ satisfaction.</p>
<p>For most existing Magento stores and modules/extension fixes we prefer to provide our estimate after taking a good look at it. We call it the ‘Assessment Approach’.</p>
<p>During the assessment phase, we do a complete screening of Magento’s current situation:</p>
<ul>
<li>Magento core files, theme and configurations;</li>
<li>Custom features and modules;</li>
<li>User Experience;</li>
<li>Complete in-site/off-site SEO;</li>
<li>Conversion analysis.</li>
</ul>
<p>The deliverables at this stage are a full report on the findings with our suggestions for improvements and a quote for achieving all the initial requests and recommended improvements.</p>
<p>This assessment phase happens before any work is done. For Clickable Automotive, we assigned two of our Magento Certified Developers: <a title="Ivan Weiler - Magento Certified Developer - Inchoo" href="http://inchoo.net/author/weiler/">Ivan Weiler</a> and <a title="Domagoj Potkoc - Magento Certified Developer - Inchoo" href="http://inchoo.net/author/domagoj/">Domagoj Potkoc</a> to the development side assessment.</p>
<p><a title="Toni Anicic - Magento SEO and Online Marketing Specialist • Inchoo" href="http://inchoo.net/author/toni/">Toni Anicic</a> conducted the on-site/off-site SEO assessment while I performed the UX and E-Commerce Design analysis.</p>
<p>The whole process was very transparent and Lucas didn’t have any trouble to provide us with instant feedback and establish excellent communication with our team.</p>
<p>This approach has been proven to be the most effective, especially when both sides envision the long-term relationship. During the assessment, we will understand the client’s business objectives better while the client will receive valuable advice on how to get the most out of Magento. At the end, we will achieve mutual understanding on how to work together, build trust and make data-driven decisions for the next steps.</p>
<h2>Our Findings</h2>
<h3>Development</h3>
<p>From the Magento’s back-end standpoint, the store was in pretty good shape. While the theme coding needed some polishing, the Magento Core was untouched &#8211; which is a great thing.</p>
<p>Clickable Automotive was a hybrid of Magento and WordPress. All the articles and content pages were being handled on WordPress, while Magento was used only for the shop. The integration needed some polishing to ensure stability, upgradability and make it seamless from the user standpoint.</p>
<p>To mention the two most important issues: the search functionality was not showing results from articles and products. Secondly, the user couldn’t readily know if he was logged in or not on his Magento account and, when logged in, he could not log out.</p>
<p>Our team also suggested a few configuration adjustments and a few front-end observations.</p>
<h3>SEO</h3>
<p>Toni has found a few important changes to be made. Firstly, the category navigation were passing more than 8000 uniques URLs to Google, which is a lot for a store in its early days with around 102 products and a handful of blog posts. The majority of these links were serving duplicated content due to the way the layered navigation were implemented.</p>
<p>At that time, the website had just been launched, which explains why many SEO measures were not in place yet. Such as: the <a title="How to implement rel=prev and rel=next to Magento’s pagination • Inchoo" href="http://inchoo.net/ecommerce/magento/how-to-implement-relprev-and-relnext-to-magentos-pagination/">rel=prev and rel=next pagination attributes</a> and many other details, such as the meta tags, meta titles and so on.</p>
<h3>User Experience/Design</h3>
<p>Even before starting this part of the assessment, we already had the client’s heads-up regarding the most important issues that were related to the WordPress + Magento integration. Such as the problem with the ‘My Account’ accessibility and the search feature.</p>
<p>Overall, the design is clean, modern and well aligned to the business goals and targeted audience. However, it wasn’t clear at the first glance that it was mainly an online store. Let’s see the wire-frames:</p>
<h4>Home-page</h4>
<p>We suggested the inclusion of featured products on the home-page together with the ‘Quick Finder’ feature, in an effort to make a clear statement that we sell car parts. Before, you could only see products under the ‘Products’ tab, which was also replaced by ‘Store’.</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/05/home-clickable.png"><img class="aligncenter size-medium wp-image-14886" title="Clickable Automotive User Experience Assessment - 01" src="http://inchoo.net/wp-content/uploads/2012/05/home-clickable-600x216.png" alt="Wireframe of the home-page featured products - Clickable Automotive" width="600" height="216" /></a></p>
<h4>Header</h4>
<p>We suggested to add a drop-down shopping cart in the header.</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/05/header-clickable.png"><img class="aligncenter size-medium wp-image-14885" title="Clickable Automotive User Experience Assessment - 02" src="http://inchoo.net/wp-content/uploads/2012/05/header-clickable-600x156.png" alt="Wireframe of the header suggestions - Clickable Automotive" width="600" height="156" /></a></p>
<h4>Category Page</h4>
<p>On the category page, we suggested the inclusion of the ‘Sales and Assistance’ banner in an effort to improve trust and ensure the visitor has the assistance number handy.</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/05/category-clickable.png"><img class="aligncenter size-medium wp-image-14884" title="Clickable Automotive User Experience Assessment - 03" src="http://inchoo.net/wp-content/uploads/2012/05/category-clickable-600x522.png" alt="Wireframe of category page - Clickable Automotive" width="600" height="522" /></a></p>
<p>Other than that, we advised about a few minor details that were mostly related to contrast and minor e-commerce particularities. We also suggested a few minor improvements to the product rollover with the addition of a button for the link to the product page. A more clear organization of the elements was also suggested for the product page.</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/05/product-clickable.png"><img class="aligncenter size-medium wp-image-14887" title="Clickable Automotive User Experience Assessment - 04" src="http://inchoo.net/wp-content/uploads/2012/05/product-clickable-600x551.png" alt="Wireframe of the product page - Clickable Automotive" width="600" height="551" /></a></p>
<h2>Assessment Conclusions</h2>
<p>As explained at the beginning of this article, the assessment would bring the full report on the findings and the quote for completion of the requested and suggested tasks. In Clickable Automotive’s case, we had to decide how to proceed in regards to the WordPress + Magento Integration and the ‘Quick Finder’ feature. After that, it is just a matter of doing the work.</p>
<h4>WordPress + Magento Integration</h4>
<p>We often come across WP + Magento integrations. It is always a bit tricky to make the integration of Magento with WordPress seamless. We have performed this many times and are still doing it. However, we advise our clients that it brings another layer of issues when upgrading the two CMS and adding features, in most cases it is not really needed.</p>
<p>From the administrative standing point it makes maintaining your website a bit more complex than it already is. The client needs to log into two different admin panels, one to add articles and another to manage the shop.</p>
<p>If the plan is to blog one or two times per week then it may not be worth going through the trouble and it would be more beneficial to have a store that will be much faster, more manageable, cheaper to maintain, easier to upgrade and to include more features.</p>
<p>On the other hand, if you have somebody posting articles in a daily basis and your blog is responsible for a considerable amount of your traffic, you are right to go with the WordPress integration, you will definitely miss a few WordPress features.</p>
<p>Then, we could polish the WordPress integration or move away from WordPress and use a the aHeadWorks Blog Extension. Lucas chose to adopt a Magento Blog Extension, leaving WordPress behind &#8211; it just makes sense in this case.</p>
<h4>Quick Finder Feature</h4>
<p>The development of the Quick Finder module requires a project of its own. We even considered integrating it with an external database to populate the part numbers and the technical specification of each item. Although it is achievable, it would make more sense to look at it at a later stage, once the store has achieved a greater variety of products.</p>
<p>Lucas suggested that we provided an estimate for the development of the feature without the integration and considered the utilisation of third-party extensions. If we could find one extension that works well and suffice to our immediate needs, we could look into developing a tailored solution in a few months, after the new store has started generating a revenue that justifies it. Wise decision, totally supported by our team.</p>
<p>We were all in agreement and tested a handful of extensions where Lucas could understand how each one worked and how they would influence the site administration and product inclusion.</p>
<p>In order to do that, we install the extension on a clean Magento installation, understand how it works and test its functionalities. If it looks ok, we install on our production branch, then test again. Just to make sure it does not conflict with other custom features and extensions.</p>
<p>Thankfully, we found one extension that does the job. Although it adds a few extra steps when adding products to the store, we found an excellent starting feature.</p>
<h2>The Job Execution</h2>
<p>I have been mostly involved in the UX assessment, management tasks while promoting the communication between the team and the client. It was a great experience and I am very proud of the collaboration and results achieved.</p>
<p><a title="Vanja Devcic - Magento Front-end Developer • Inchoo" href="http://inchoo.net/author/vanja-devcic">Vanja Devcic</a> one of our most experienced front-end developers showed great organisational skills. He has taken the lead during most of the project execution, handled all the communication with the client and provided Lucas with the support he needed to make decisions and achieve the most suitable solution when adjustments were needed or an additional requirement was brought in.</p>
<p>It is also important to mention that this project was ‘man-powered’ by the Certified Magento Developers: <a title="Ivan Weiler - Magento Certified Developer - Inchoo" href="http://inchoo.net/author/weiler/">Ivan Weiler</a> and <a title="Domagoj Potkoc - Magento Certified Developer - Inchoo" href="http://inchoo.net/author/domagoj/">Domagoj Potkoc</a>, members of the Casablanca team.</p>
<h2>Interview</h2>
<p>To give you a clearer picture of how the project went we asked Lucas to write a few words about his experience.</p>
<h4 style="color: #4f5631; font-size: 16px;">Lucas, would you be able to give us a few words about your experience with Inchoo and your view on the approach to the project?</h4>
<p>Sure, working with everyone at Inchoo has been awesome. I originally discovered Inchoo while making the decision to use Magento as our eCommece platform, and some of your blog posts were a big help in guiding our decision. When we launched the original site back in late November last year &#8211; we immediately found we were on the back foot chasing a whole list of issues without anyone to support us. Lyssandro was one of the first people I reached out to &#8211; to help me get things under control. Right away the suggested approach showed maturity and we quickly connected with the same point of view and understanding of our goals. During the whole process communication was exceptional, and I am thankful to everyone that was willing to take the time to help me understand the technical side of the decisions we were making.</p>
<h4 style="color: #4f5631; font-size: 16px;">How would you qualify our methodology? What are the strongest or weakest points</h4>
<p>What I most respect about Inchoo is their approach to quality, the great team of people and their desire to share knowledge through their blog. It&#8217;s great for me to have confidence in the team knowing they&#8217;re committed to quality and to ensure we end up with the final product we are looking for.</p>
<h4 style="color: #4f5631; font-size: 16px;">We are always open for learning, what do you believe could have been done differently?</h4>
<p>It would be great to see you switch from using activeCollab to Basecamp in the future. <img src='http://inchoo.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h4 style="color: #4f5631; font-size: 16px;">Given that you are located in Melbourne, Australia; the I am in Sydney and the developers are in Croatia; did you encounter any communication or time difference challenges?</h4>
<p>No, not really &#8211; I was satisfied with the overlap we had in our time zones to be able to effectively communicate with the team in Croatia.</p>
<h4 style="color: #4f5631; font-size: 16px;">Do you regret not keeping the WordPress integration? Is there any special feature that you miss?</h4>
<p>The backend in WordPress was nice &#8211; but otherwise the integration between the two was really clumsy, and it&#8217;s a relief to not have to worry about it anymore.</p>
<h4 style="color: #4f5631; font-size: 16px;">Lastly, our developers want to know when are we going to develop our own ‘Quick Finder&#8217; module? =D</h4>
<p>Haha! Certainly developing our own &#8216;Quick Finder&#8217; is something we will need to discuss implementing further down the road, and I know you and the team are really excited to get started working on it! Me? I just look forward to never having to see another CSV file in my life! <img src='http://inchoo.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>In Response&#8230;</h2>
<p>To be honest, I also find Basecamp much easier to use &#8211; in fact, we were using Basecamp until the end of last year. The reason why we use activeCollab now is that it has a powerful reporting tool and administration features that help us to keep better track of the project progress.</p>
<p>We made this move in anticipation for the <a title="activeCollab 3 Sneak Preview" href="http://www.activecollab.com/version-3/">ActiveCollab Version 3</a> that is going to be released soon. It will bring many improvements and we are confident that it will be much easier to use.</p>
<p>Regarding the custom ‘Quick Finder’ development &#8211; we understand your position and we will patiently look forward to it. <img src='http://inchoo.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Custom module development is the work and the hobby for most of our developers, that’s all. <img src='http://inchoo.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I would like to thank you for your collaboration and for the opportunity to work on this project. Clickable Automotive was our first Australian launch and a great start for <a title="Magento Design, Development &amp; Consulting in Australia  • Inchoo" href="http://inchoo.com.au/">Inchoo Australia</a>. I hope we will continue collaborating and growing our businesses together for years to come.</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/ecommerce/case-study-magento-australia-clickable-automotive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inchoo Flickr Gallery Magento Extension</title>
		<link>http://inchoo.net/ecommerce/inchoo-flickr-gallery-magento-module/</link>
		<comments>http://inchoo.net/ecommerce/inchoo-flickr-gallery-magento-module/#comments</comments>
		<pubDate>Mon, 21 May 2012 10:28:48 +0000</pubDate>
		<dc:creator>Srdjan Stojiljkovic</dc:creator>
				<category><![CDATA[E-Commerce]]></category>
		<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[gallery]]></category>
		<category><![CDATA[module]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=14830</guid>
		<description><![CDATA[Inchoo Flick Gallery is an easy-to-use Magento extension that will integrate any Flickr gallery into your Magento website. It is fully customizable using a simple Magento back-end configuration page and &#8230;]]></description>
			<content:encoded><![CDATA[<p>Inchoo Flick Gallery is an easy-to-use Magento extension that will integrate any Flickr gallery into your Magento website. It is fully customizable using a simple Magento back-end configuration page and it uses Flickr API to get all the required information and data. Extension is tested on Magento 1.6 and 1.7 but it&#8217;s still the first version so be careful if you decide to use it on your live site.<span id="more-14830"></span></p>
<h2>Features</h2>
<ul>
<li>Automatically gets all the photosets from the specified user and makes them available in Magento back-end</li>
<li>Allows you to choose which photosets you want to display on the site</li>
<li>Configurable pagination</li>
<li>Configurable thumbnail size</li>
<li>Configurable tooltips with different skin styles to choose from</li>
<li>Integrated Lightbox that can be disabled if you want to use your own</li>
<li>Fully customizable carousel block that can be added to any page</li>
<li>Fully customizable Flickr API response caching for increased performance</li>
<li>Using AJAX to eliminate the page loading delay caused by Flickr API requests</li>
</ul>
<h2>How to install?</h2>
<p>Download Inchoo Flickr Gallery extension files to your Magento root directory. You can find it on github at <a title="Inchoo Flickr Gallery on github" href="https://github.com/srka/Inchoo-Flickr-Gallery" target="_blank">https://github.com/srka/Inchoo-Flickr-Gallery</a>. Extension files will be extracted into the base package / default template so if you have your own package just copy the extension files to your package / template directories.</p>
<p>If you are logged in to your Magento back-end you have to log out and then log in again. Clearing the cache would also be a good idea.</p>
<h2>Configuration</h2>
<p>Inchoo Flickr Gallery extension is made to be fully and easily configurable from Magento back-end. Just go to <strong>System -&gt; Configuration -&gt; Inchoo -&gt; Flickr Gallery</strong> to find all the available configuration options.</p>
<p>To get started you’ll need to have a Flickr API Key and User ID. Go to <a href="http://www.flickr.com/services/api/misc.api_keys.html">http://www.flickr.com/services/api/misc.api_keys.html</a> to get your own Flickr API Key and <a href="http://idgettr.com/">http://idgettr.com/</a> for your User ID. Once you enter your API Key and User ID save your configuration and you will get the list of all the photosets available for the user specified with the User ID. You can select all of them or just the ones you want to show on the site and save your configuration. That should be enough get the gallery up and running.</p>
<p>All other configuration options are pretty straightforward with useful descriptions so there is no need to explain them separately.</p>
<h2>How to access the gallery on the front-end?</h2>
<p>By default, Inchoo Flickr Gallery extension adds a link to the footer but you can open the gallery directly at www.yoursite.com/<strong>gallery</strong></p>
<h2>Screenshots</h2>

<a href='http://inchoo.net/ecommerce/inchoo-flickr-gallery-magento-module/attachment/inchoo-flickr-gallery-homepage-carousel/' title='inchoo-flickr-gallery-homepage-carousel'><img width="300" height="279" src="http://inchoo.net/wp-content/uploads/2012/05/inchoo-flickr-gallery-homepage-carousel-300x279.jpg" class="attachment-thumbnail" alt="inchoo-flickr-gallery-homepage-carousel" title="inchoo-flickr-gallery-homepage-carousel" /></a>
<a href='http://inchoo.net/ecommerce/inchoo-flickr-gallery-magento-module/attachment/inchoo-flickr-gallery-homepage-carousel-hover/' title='inchoo-flickr-gallery-homepage-carousel-hover'><img width="300" height="279" src="http://inchoo.net/wp-content/uploads/2012/05/inchoo-flickr-gallery-homepage-carousel-hover-300x279.jpg" class="attachment-thumbnail" alt="inchoo-flickr-gallery-homepage-carousel-hover" title="inchoo-flickr-gallery-homepage-carousel-hover" /></a>
<a href='http://inchoo.net/ecommerce/inchoo-flickr-gallery-magento-module/attachment/inchoo-flickr-gallery-ajax-loader/' title='inchoo-flickr-gallery-ajax-loader'><img width="300" height="233" src="http://inchoo.net/wp-content/uploads/2012/05/inchoo-flickr-gallery-ajax-loader-300x233.jpg" class="attachment-thumbnail" alt="inchoo-flickr-gallery-ajax-loader" title="inchoo-flickr-gallery-ajax-loader" /></a>
<a href='http://inchoo.net/ecommerce/inchoo-flickr-gallery-magento-module/attachment/inchoo-flickr-gallery-photosets/' title='inchoo-flickr-gallery-photosets'><img width="251" height="300" src="http://inchoo.net/wp-content/uploads/2012/05/inchoo-flickr-gallery-photosets-251x300.jpg" class="attachment-thumbnail" alt="inchoo-flickr-gallery-photosets" title="inchoo-flickr-gallery-photosets" /></a>
<a href='http://inchoo.net/ecommerce/inchoo-flickr-gallery-magento-module/attachment/inchoo-flickr-gallery-photoset/' title='inchoo-flickr-gallery-photoset'><img width="300" height="233" src="http://inchoo.net/wp-content/uploads/2012/05/inchoo-flickr-gallery-photoset-300x233.jpg" class="attachment-thumbnail" alt="inchoo-flickr-gallery-photoset" title="inchoo-flickr-gallery-photoset" /></a>
<a href='http://inchoo.net/ecommerce/inchoo-flickr-gallery-magento-module/attachment/inchoo-flickr-gallery-photoset-hover/' title='inchoo-flickr-gallery-photoset-hover'><img width="300" height="233" src="http://inchoo.net/wp-content/uploads/2012/05/inchoo-flickr-gallery-photoset-hover-300x233.jpg" class="attachment-thumbnail" alt="inchoo-flickr-gallery-photoset-hover" title="inchoo-flickr-gallery-photoset-hover" /></a>
<a href='http://inchoo.net/ecommerce/inchoo-flickr-gallery-magento-module/attachment/inchoo-flickr-gallery-photoset-photo/' title='inchoo-flickr-gallery-photoset-photo'><img width="300" height="233" src="http://inchoo.net/wp-content/uploads/2012/05/inchoo-flickr-gallery-photoset-photo-300x233.jpg" class="attachment-thumbnail" alt="inchoo-flickr-gallery-photoset-photo" title="inchoo-flickr-gallery-photoset-photo" /></a>
<a href='http://inchoo.net/ecommerce/inchoo-flickr-gallery-magento-module/attachment/inchoo-flickr-gallery-config/' title='inchoo-flickr-gallery-config'><img width="117" height="300" src="http://inchoo.net/wp-content/uploads/2012/05/inchoo-flickr-gallery-config-117x300.jpg" class="attachment-thumbnail" alt="inchoo-flickr-gallery-config" title="inchoo-flickr-gallery-config" /></a>
<a href='http://inchoo.net/ecommerce/inchoo-flickr-gallery-magento-module/attachment/inchoo-flickr-gallery/' title='Inchoo Flickr Gallery'><img width="300" height="118" src="http://inchoo.net/wp-content/uploads/2012/05/Inchoo-Flickr-Gallery-300x118.jpg" class="attachment-thumbnail" alt="Inchoo Flickr Gallery" title="Inchoo Flickr Gallery" /></a>

]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/ecommerce/inchoo-flickr-gallery-magento-module/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magentic &#8211; an iOS and Android Magento log viewer app</title>
		<link>http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/</link>
		<comments>http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/#comments</comments>
		<pubDate>Fri, 18 May 2012 11:24:28 +0000</pubDate>
		<dc:creator>Branko Ajzele</dc:creator>
				<category><![CDATA[Mobile Apps]]></category>
		<category><![CDATA[inchooapp]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=14797</guid>
		<description><![CDATA[Magentic is a mobile iOS and Android app that works seamlessly with our Inchoo_Magentic Magento extension, enabling you to easily view all your Magento logs. Magento developers and merchants meet &#8230;]]></description>
			<content:encoded><![CDATA[<p><strong>Magentic is a mobile iOS and Android app that works seamlessly with our Inchoo_Magentic Magento extension, enabling you to easily view all your Magento logs.</strong><br />
Magento <strong>developers and merchants meet Magentic</strong>, your Magento logs for the take off!</p>
<p>Having a quick and on time access to your Magento website logs can sometimes be crucial to your business. Since Magento does not have native way of reading log files other than accessing them trough FTP/SSH, Magentic is here to fill in the blank. Just touch the screen of your iOS based device and your logs are here.<span id="more-14797"></span></p>
<p>&nbsp;</p>
<h2>We prepared a short demo / promo video:</h2>
<p><iframe src="http://www.youtube.com/embed/kgsb_ZFSw_o" frameborder="0" width="630" height="350"></iframe></p>
<h3>Outstanding features:</h3>
<ul style="list-style-type: disc; padding: 0  0 0 30px; text-shadow: 0 1px 0 rgba(240, 255, 200, 0.4); color: #444738;">
<li>Quick, simple and user friendly access to latest Magento log file entries</li>
<li>Add multiple Magento installations, not limited to just one</li>
<li>View aggregated log messages from all var/log/*.log files</li>
<li>Get basic Magento version/edition info</li>
<li>Get total customers/orders/newsletter-subscribers info</li>
<li>Get list of existing websites and their stores</li>
<li>Email your developer/friend/coworker specific log message</li>
</ul>
<h3>Cool, I want it! Where do I start?</h3>
<ol style="list-style-type: decimal; padding: 0  0 15px 30px; margin: 10px 0 10px; text-shadow: 0 1px 0 rgba(240, 255, 200, 0.4); color: #444738;">
<li>Get Magentic from <a title="Get Magentic from iTunes" href="http://itunes.apple.com/us/app/magentic/id525377201?ls=1&#038;mt=8" target="_blank">iTunes</a> or <a title="Get Magentic from Google Play" href="https://play.google.com/store/apps/details?id=com.inchoo.magentic" target="_blank">Google Play</a> ( <em>just $1.99</em> )</li>
<li><a title="Get Inchoo_Magentic Magento extension" href="http://www.magentocommerce.com/magento-connect/catalog/product/view/id/13001/" target="_blank">Get Inchoo_Magentic</a> Magento extension from Magento Connect ( <em>free</em> )</li>
<li>Configure iOS Magentic app to point to your Magento store</li>
<li>Enjoy using the app&#8230;</li>
</ol>
<h2>Support</h2>
<p>If you have some support or Q&amp;A questions for Magentic please write on <a title="magentic@inchoo.net" href="mailto:magentic@inchoo.net">magentic@inchoo.net</a> or contact the <a href="https://twitter.com/#!/MagenticApp">Magentic team trough Twitter</a>. We will give our best to reply if possible.</p>
<p>In case you need extra info about the Inchoo_Magentic extension <a title="Inchoo_Magentic Documentation" href="https://docs.google.com/document/d/1ZSpy2xER_J2da3aVqGG5xT8HMaA1TYKjW30938pjHxQ/edit" target="_blank">here is the Google Document link</a> with detailed description of extension. And below are some screenshots of the Magentic iOS app.</p>
<h2>Screenshots</h2>

<a href='http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/attachment/1-2/' title='1'><img width="300" height="200" src="http://inchoo.net/wp-content/uploads/2012/05/1-300x200.png" class="attachment-thumbnail" alt="1" title="1" /></a>
<a href='http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/attachment/10/' title='10'><img width="200" height="300" src="http://inchoo.net/wp-content/uploads/2012/05/10-200x300.png" class="attachment-thumbnail" alt="10" title="10" /></a>
<a href='http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/attachment/2-2/' title='2'><img width="300" height="200" src="http://inchoo.net/wp-content/uploads/2012/05/2-300x200.png" class="attachment-thumbnail" alt="2" title="2" /></a>
<a href='http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/attachment/3-2/' title='3'><img width="300" height="200" src="http://inchoo.net/wp-content/uploads/2012/05/3-300x200.png" class="attachment-thumbnail" alt="3" title="3" /></a>
<a href='http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/attachment/4-2/' title='4'><img width="300" height="200" src="http://inchoo.net/wp-content/uploads/2012/05/4-300x200.png" class="attachment-thumbnail" alt="4" title="4" /></a>
<a href='http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/attachment/5-2/' title='5'><img width="300" height="200" src="http://inchoo.net/wp-content/uploads/2012/05/5-300x200.png" class="attachment-thumbnail" alt="5" title="5" /></a>
<a href='http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/attachment/6/' title='6'><img width="200" height="300" src="http://inchoo.net/wp-content/uploads/2012/05/6-200x300.png" class="attachment-thumbnail" alt="6" title="6" /></a>
<a href='http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/attachment/7/' title='7'><img width="200" height="300" src="http://inchoo.net/wp-content/uploads/2012/05/7-200x300.png" class="attachment-thumbnail" alt="7" title="7" /></a>
<a href='http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/attachment/8/' title='8'><img width="200" height="300" src="http://inchoo.net/wp-content/uploads/2012/05/8-200x300.png" class="attachment-thumbnail" alt="8" title="8" /></a>
<a href='http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/attachment/9/' title='9'><img width="200" height="300" src="http://inchoo.net/wp-content/uploads/2012/05/9-200x300.png" class="attachment-thumbnail" alt="9" title="9" /></a>
<a href='http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/attachment/magentic-3/' title='Magentic'><img width="300" height="118" src="http://inchoo.net/wp-content/uploads/2012/05/magentic1-300x118.png" class="attachment-thumbnail" alt="Magentic" title="Magentic" /></a>

]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/mobile-development/apps/magentic-an-ios-and-android-magento-log-viewer-app/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to add static blocks to main navigation dropdown?</title>
		<link>http://inchoo.net/ecommerce/magento/how-to-add-static-blocks-to-main-navigation-dropdown/</link>
		<comments>http://inchoo.net/ecommerce/magento/how-to-add-static-blocks-to-main-navigation-dropdown/#comments</comments>
		<pubDate>Wed, 09 May 2012 10:59:52 +0000</pubDate>
		<dc:creator>Srdjan Stojiljkovic</dc:creator>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[dropdown]]></category>
		<category><![CDATA[nav]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[Static blocks]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=14614</guid>
		<description><![CDATA[Many stores require some additional information in the main navigation drop-down section. Displaying only subcategories might not always be enough and I noticed this is becoming a trend on shopping &#8230;]]></description>
			<content:encoded><![CDATA[<p>Many stores require some additional information in the main navigation drop-down section. Displaying only subcategories might not always be enough and I noticed this is becoming a trend on shopping sites now days. Although there are many ways to accomplish this (including building you own custom module) I would like to show you a more clever way that will allow you to use static blocks and easily connect them with product categories. <span id="more-14614"></span>To better understand what I am talking about see the sample image of the end result below.</p>
<p style="text-align: center;"><a href="http://inchoo.net/ecommerce/magento/how-to-add-static-blocks-to-main-navigation-dropdown/attachment/sample-01/" rel="attachment wp-att-14615"><img class="size-full wp-image-14615 aligncenter" title="Static block in main navigation" src="http://inchoo.net/wp-content/uploads/2012/05/sample-01.jpg" alt="Static block in main navigation" width="384" height="415" /></a></p>
<h2>The idea</h2>
<p><strong>Magento 1.6 and earlier</strong><br />
The general idea is to use static blocks because they are easily editable and can hold many different types of content. The problem with static blocks is that you cannot assign them directly to product categories in Magento, or can you? Here&#8217;s an idea, set the &#8220;Identifier&#8221; value of the static block to be the same as the &#8220;URL Key&#8221; of the desired category. Now you have a logical connection between your static block and a product category. We just have to display the appropriate static blocks in the main navigation drop-down.</p>
<p><strong>Magento 1.7<br />
</strong>Now, in version 1.7 Magento introduced a completely new way of rendering menu items (thanks Johnboy for reminding me) that require some changes for this to work. The general idea is the same as above (for Magento 1.6) but this time we need to use something else instead of &#8220;URL Key&#8221; to connect our static block to a category. This time we will use the category ID value with a simple string prefix.</p>
<h2>The implementation</h2>
<p><strong>Magento 1.6 and earlier</strong><br />
To implement this simple idea we need to override a core Magento block class and add a few lines of code to a single function. How simple is that <img src='http://inchoo.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ol>
<li>First we need to override the core Magento block class by copying the block file from core to local folder. We are going to use <strong>&#8220;Mage_Catalog_Block_Navigation&#8221;</strong>class so we need to copy:
<pre class="brush: php; title: ; notranslate">/app/code/core/Mage/Catalog/Block/Navigation.php</pre>
<p>to</p>
<pre class="brush: php; title: ; notranslate">/app/code/local/Mage/Catalog/Block/Navigation.php</pre>
<p>If you don’t have a folder structure in your local folder you will need to create it.</li>
<li>Find the <strong>protected function _renderCategoryMenuItemHtml </strong>(should begin at around line 218).<strong> </strong>This is the function that will render all the menu items which is exactly what we need.</li>
<li>Now find this piece of code (lines 309-312):
<pre class="brush: php; title: ; notranslate">

$html[] = '&lt;ul class=&quot;level' . $level . '&quot;&gt;';
$html[] = $htmlChildren;
$html[] = '&lt;/ul&gt;';
</pre>
</li>
<li>Add the following code just above the line with the closed ul tag:
<pre class="brush: php; title: ; notranslate">

$staticBlock = trim($this-&gt;getLayout()-&gt;createBlock('cms/block')-&gt;setBlockId(strtolower($category-&gt;getUrlKey()))-&gt;toHtml());
if(!empty($staticBlock)){
	$html[] = '&lt;span class=&quot;nav-static-block&quot; style=&quot;background:#fff; border-top:1px solid #ccc; padding:10px;&quot;&gt;';
	$html[] = $staticBlock;
	$html[] = '&lt;/span&gt;';
}
</pre>
<p><span>The end result should look like this:</span></p>
<pre class="brush: php; title: ; notranslate">

$html[] = '&lt;ul class=&quot;level' . $level . '&quot;&gt;';
$html[] = $htmlChildren;
$staticBlock = trim($this-&gt;getLayout()-&gt;createBlock('cms/block')-&gt;setBlockId(strtolower($category-&gt;getUrlKey()))-&gt;toHtml());
if(!empty($staticBlock)){
	$html[] = '&lt;span class=&quot;nav-static-block&quot; style=&quot;background:#fff; border-top:1px solid #ccc; padding:10px;&quot;&gt;';
	$html[] = $staticBlock;
	$html[] = '&lt;/span&gt;';
}
$html[] = '&lt;/ul&gt;';
</pre>
<p><span>The implementation is simple, check if there is a static block with the identifier value that is the same as the current category URL Key. If so, add the static block to the menu.</span></p>
<p><span>I used some inline CSS for the sake of simplicity but you should use your own.</span></li>
<li>Now you need to create a static block with the identifier value set to whatever category URL Key you want and you are all done! I used the default Magento sample data and created a static block with the identifier set to &#8220;furniture&#8221; because that is the URL Key of the Furniture category.</li>
</ol>
<p><strong>Magento 1.7<br />
</strong>This time we need to override a different Magento core class because in 1.7 Magento uses  <strong>Mage_Page_Block_Html_Topmenu</strong> to render the main menu.</p>
<ol>
<li>First we need to override the core Magento block class by copying the block file from core to local folder. We need to copy:
<pre class="brush: php; title: ; notranslate">/app/code/core/Mage/Page/Block/Html/Topmenu.php</pre>
<p>to</p>
<pre class="brush: php; title: ; notranslate">/app/code/local/Mage/Page/Block/Html/Topmenu.php</pre>
<p>If you don’t have a folder structure in your local folder you will need to create it.</li>
<li>Find the <strong>protected function _getHtml </strong>(should begin at around line 84).<strong></strong></li>
<li>Now find this piece of code (lines 121-123):
<pre class="brush: php; title: ; notranslate">

$html .= '&lt;ul&gt;';
$html .= $this-&gt;_getHtml($child, $childrenWrapClass);
$html .= '&lt;/ul&gt;';
</pre>
</li>
<li>Add the following code just above the line with the closed ul tag:
<pre class="brush: php; title: ; notranslate">

$staticBlock = trim($this-&gt;getLayout()-&gt;createBlock('cms/block')-&gt;setBlockId($child-&gt;getId())-&gt;toHtml());
if(!empty($staticBlock)){
	$html .= '&lt;span style=&quot;background:#fff; border-top:1px solid #ccc; padding:10px;&quot;&gt;';
	$html .= $staticBlock;
	$html .= '&lt;/span&gt;';
}
</pre>
<p>The end result should look like this:</p>
<pre class="brush: php; title: ; notranslate">

$html .= '&lt;ul class=&quot;level' . $childLevel . '&quot;&gt;';
$html .= $this-&gt;_getHtml($child, $childrenWrapClass);
$staticBlock = trim($this-&gt;getLayout()-&gt;createBlock('cms/block')-&gt;setBlockId($child-&gt;getId())-&gt;toHtml());
if(!empty($staticBlock)){
	$html .= '&lt;span class=&quot;nav-static-block&quot; style=&quot;background:#fff; border-top:1px solid #ccc; padding:10px;&quot;&gt;';
	$html .= $staticBlock;
	$html .= '&lt;/span&gt;';
}
$html .= '&lt;/ul&gt;';
</pre>
<p>The implementation is simple, check if there is a static block with the identifier value set to current category ID with a prefix <strong>&#8220;category-node-&#8221;</strong>. If so, add the static block to the menu. The prefix is used because if you inspect the value of <strong>$chlid-&gt;getId()</strong> you will see that it returns a category ID with that prefix so, for example, if the category ID is <strong>&#8220;10&#8243;</strong> you will get <strong>&#8220;category-node-10&#8243;</strong>. I used this value because it is unique for each individual category.</p>
<p>I used some inline CSS for the sake of simplicity but you should use your own.</li>
<li>Now you need to create a static block with the identifier value set to whatever category <strong>Prefix+Category ID</strong> you want and you are all done! I used the default Magento sample data and created a static block with the identifier set to <strong>&#8220;category-node-10&#8243;</strong> because Furniture category has the id of 10. That&#8217;s it.</li>
</ol>
<p>Hope you&#8217;ll find this post helpful.</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/ecommerce/magento/how-to-add-static-blocks-to-main-navigation-dropdown/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Inchoo Demostore extension</title>
		<link>http://inchoo.net/ecommerce/magento/inchoo-demostore-extension/</link>
		<comments>http://inchoo.net/ecommerce/magento/inchoo-demostore-extension/#comments</comments>
		<pubDate>Tue, 08 May 2012 07:22:44 +0000</pubDate>
		<dc:creator>Darko Goles</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Tools & Frameworks]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13715</guid>
		<description><![CDATA[In my last project, during development of API extension for Mageboard application, when started to develope Apple Push Notifications Services integration, one problem came out that took me too much &#8230;]]></description>
			<content:encoded><![CDATA[<p>In my last project, during development of API extension for <a title="Mageboard - your mobile dashboard" href="http://mageboard.inchoo.net/" target="_blank">Mageboard application</a>, when started to develope Apple Push Notifications Services integration, one problem came out that took me too much time each day to solve: Push notifications are supposed to be active only if some new order and/or customer is made on site.</p>
<p>So if there are no constant new orders and/or new customers, I can not test my APNS integration.<span id="more-13715"></span></p>
<p>At first I started to enter orders and customers manually on dev server, but it took much time, so I decided to do something to solve it.<br />
After some searching, i didn&#8217;t find the suitable extension to solve automatic creation of customers and orders as I need, so that&#8217;s the reason a new extension was made.</p>
<p>So let me list the features that I needed in new extension:</p>
<ul>
<li>Automatic creation of random customers with fully random names and addresses, e-mail adresses and other random personal data.</li>
<li>Automatic creation of orders with random order items in basket.</li>
<li>Automatic shipment</li>
<li>Automatic invoice</li>
<li>Make all of this features random</li>
<li>Work with cron job, so generation is happening periodically (every minute, or depends how my Magento cron is set).</li>
</ul>
<p>One interesting thing that I found when searching inside Magento core source code is a class Mage_Adminhtml_Model_Sales_Order_Random.</p>
<p>When I looked in code, it was obvious for me that this class was made for some purpose, but when trying to find where this class is used, I didn&#8217;t find nothing. Anyway, I decided to try this class to see if it works well, but this class has some serious issues in code that have to be rewritten in order to make it work.</p>
<p>So, here is my new order creation source code:</p>
<pre class="brush: php; title: ; notranslate">

&lt;!--?php &lt;br ?--&gt;
/*
 * @category Inchoo
 * @package Inchoo_Demostore
 * @author Darko Goleš
 * @copyright Inchoo
 * @license http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

class Inchoo_Demostore_Model_Sales_Order_Random {

    protected $_quote;
    protected $_order;
    protected $_store;
    protected $_customer;
    protected $_productCollection;
    protected static $_storeCollection;
    protected static $_customerCollection;

    public function __construct() {
        $this-&gt;_quote = Mage::getModel('sales/quote')-&gt;save();
        $this-&gt;_order = Mage::getModel('sales/order');
    }

    protected function _getStores() {
        if (!self::$_storeCollection) {
            self::$_storeCollection = Mage::getResourceModel('core/store_collection')
                    -&gt;load();
        }
        return self::$_storeCollection-&gt;getItems();
    }

    protected function _getCustomers() {
        if (!self::$_customerCollection) {
            self::$_customerCollection = Mage::getResourceModel('customer/customer_collection')
                    -&gt;addAttributeToSelect('*')
                    -&gt;joinAttribute('billing_country_id', 'customer_address/country_id', 'default_billing', null, 'inner')
                    -&gt;joinAttribute('shipping_country_id', 'customer_address/country_id', 'default_shipping', null, 'inner')
                    -&gt;load();
        }

        return self::$_customerCollection-&gt;getItems();
    }

    protected function _getProducts() {
        if (!$this-&gt;_productCollection) {
            $this-&gt;_productCollection = Mage::getResourceModel('catalog/product_collection');
            Mage::getSingleton('catalog/product_status')-&gt;addVisibleFilterToCollection($this-&gt;_productCollection);
            $this-&gt;_productCollection-&gt;addAttributeToSelect('name')
                    -&gt;addAttributeToSelect('sku')
                    -&gt;addAttributeToFilter('type_id', Mage_Catalog_Model_Product_Type::TYPE_SIMPLE)
                    -&gt;load();
        }

        return $this-&gt;_productCollection-&gt;getItems();
    }

    protected function _getCustomer() {
        if (!$this-&gt;_customer) {
            $items = $this-&gt;_getCustomers();
            $randKey = array_rand($items);
            $this-&gt;_customer = $items[$randKey];
        }
        return $this-&gt;_customer;
    }

    protected function _getRandomProduct() {
        $items = $this-&gt;_getProducts();
        $randKey = array_rand($items);
        return isset($items[$randKey]) ? $items[$randKey] : false;
    }

    protected function _getStore() {
        if (!$this-&gt;_store) {
            $items = $this-&gt;_getStores();
            $randKey = array_rand($items);
            $this-&gt;_store = $items[$randKey];
        }
        return $this-&gt;_store;
    }

    public function createOrder() {
        $customer = $this-&gt;_getCustomer();

        $this-&gt;_quote-&gt;setStore($this-&gt;_getStore())
                -&gt;setCustomer($customer)-&gt;setCustomerIsGuest(0);
        $this-&gt;_quote-&gt;getBillingAddress()-&gt;importCustomerAddress($customer-&gt;getDefaultBillingAddress());
        $this-&gt;_quote-&gt;getShippingAddress()-&gt;importCustomerAddress($customer-&gt;getDefaultShippingAddress());

        $productCount = rand(3, 10);
        for ($i = 0; $i &lt; $productCount; $i++) {             $product = $this-&gt;_getRandomProduct();
            if ($product) {
                $product-&gt;setQuoteQty(1);

                $stockData = $product-&gt;getStockData();
                if (!$stockData) {
                    $product = $product-&gt;load($product-&gt;getId());
                    $stockData = array(
                        'manage_stock' =&gt; 1,
                        'is_in_stock' =&gt; 1,
                        'qty' =&gt; 1
                    );

                    $product-&gt;setStockData($stockData);
                    $product-&gt;save();
                }
                $this-&gt;_quote-&gt;addProduct($product);
            }
        }

        $this-&gt;_quote-&gt;getPayment()-&gt;setMethod('checkmo');
        $this-&gt;_quote-&gt;getShippingAddress()-&gt;setShippingMethod('flatrate_flatrate'); //-&gt;collectTotals()-&gt;save();
        $this-&gt;_quote-&gt;getShippingAddress()-&gt;setCollectShippingRates(true);
        $this-&gt;_quote-&gt;collectTotals()
                -&gt;save();
        $this-&gt;_quote-&gt;save();

        $service = Mage::getModel('sales/service_quote', $this-&gt;_quote);
        $service-&gt;submitAll();

        $order = $service-&gt;getOrder();
        $rand = rand(1, 4);

        switch ($rand) {
            case 1:
                $this-&gt;invoiceOrder($order);
                break;
            case 2:
                $this-&gt;shipOrder($order);
                break;
            case 3:
                $this-&gt;invoiceOrder($order);
                $this-&gt;shipOrder($order);
                break;
            default:
                break;
        }

        return $this;
    }

    protected function invoiceOrder($order) {

        try {

            if (!$order-&gt;canInvoice()) {
                $order-&gt;addStatusHistoryComment('Inchoo_Invoicer: Order cannot be invoiced.', false);
                $order-&gt;save();
            }

            $invoice = Mage::getModel('sales/service_order', $order)-&gt;prepareInvoice();

            $invoice-&gt;setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE);
            $invoice-&gt;register();

            $invoice-&gt;getOrder()-&gt;setCustomerNoteNotify(false);
            $invoice-&gt;getOrder()-&gt;setIsInProcess(true);
            $order-&gt;addStatusHistoryComment('Automatically INVOICED by Inchoo_Invoicer.', false);

            $transactionSave = Mage::getModel('core/resource_transaction')
                    -&gt;addObject($invoice)
                    -&gt;addObject($invoice-&gt;getOrder());

            $transactionSave-&gt;save();
        } catch (Exception $e) {
            Mage::logException($e);
        }
    }

    protected function shipOrder($order) {

        try {
            $shipment = $order-&gt;prepareShipment();
            $shipment-&gt;register();

            $order-&gt;setIsInProcess(true);
            $order-&gt;addStatusHistoryComment('Automatically SHIPPED by Inchoo_Invoicer.', false);

            $transactionSave = Mage::getModel('core/resource_transaction')
                    -&gt;addObject($shipment)
                    -&gt;addObject($shipment-&gt;getOrder())
                    -&gt;save();
        } catch (Exception $e) {
            Mage::logException($e);
        }
    }

}
</pre>
<p>As you can see from source code, invoice and shipment will not be generated every time, but random sometimes shipment, sometimes order, sometimes both and sometimes nothing.</p>
<pre class="brush: php; title: ; notranslate">

       $order = $service-&gt;getOrder();
        $rand = rand(1, 4);

        switch ($rand) {
            case 1:
                $this-&gt;invoiceOrder($order);
                break;
            case 2:
                $this-&gt;shipOrder($order);
                break;
            case 3:
                $this-&gt;invoiceOrder($order);
                $this-&gt;shipOrder($order);
                break;
            default:
                break;
        }
</pre>
<p>There are bunch of articles here on inchoo.net about programatically creating orders and/or customers, so this article is not about how to do it, but rather to inform the community that the extension that I am talking about is available on Magento Connect under name: Inchoo Demostore, so, Dear developers, if you need to save some time, feel free to install it to dynamically &#8211; periodically create new customers and orders on your development or some demo server.</p>
<p>I am aware that this extension can be improved with possible configuration options added, maybe on admin side, adding additional features for creating orders, random quantities for order items, but, hey &#8211; this extension is made for developers to save their time, and I don&#8217;t see a problem if someone wants to improve it. For me, it it enough to give fresh data to demo store for <a title="Mageboard" href="http://mageboard.inchoo.net/" target="_blank">Mageboard Application</a>.</p>
<p>Cheers.</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/ecommerce/magento/inchoo-demostore-extension/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento mobile theme &#8211; imobile</title>
		<link>http://inchoo.net/ecommerce/magento/magento-mobile-theme-imobile/</link>
		<comments>http://inchoo.net/ecommerce/magento/magento-mobile-theme-imobile/#comments</comments>
		<pubDate>Mon, 07 May 2012 11:22:43 +0000</pubDate>
		<dc:creator>Stanislav Mihic</dc:creator>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Mobile web]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[magento theme]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[responsive design]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=14461</guid>
		<description><![CDATA[Magento meets jQuery mobile (ver 1.1.0), before we start please note this is only experiment, use this theme on your own, this is not (yet) production ready. In a nutshell &#8230;]]></description>
			<content:encoded><![CDATA[<p>Magento meets jQuery mobile (ver 1.1.0), before we start please note <strong>this is only experiment, use this theme on your own, this is not (yet) production ready</strong>. In a nutshell we have &#8220;package&#8221; under which we place all edited files. For start we use magento iphone theme and then add some &#8220;extra stuff&#8221;.<span id="more-14461"></span></p>
<p>Some of key features:</p>
<ul>
<li>Autodetects the mobile device</li>
<li>jQuery mobile (v. 1.1.0)</li>
<li>Homepage slider (<a href="http://swipejs.com/">http://swipejs.com/</a>)</li>
<li>Almost all pages styled <img src='http://inchoo.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
<p>Installation is simple, just copy downloaded files, (app, skin) after that go to administration and do some Magento magic. Magento already have browser detection, you only need to create rule. In our case we dropped table support because most of them will display normal desktop view store. Here is rule:</p>
<pre class="brush: php; title: ; notranslate">
iPhone|iPod|BlackBerry|Palm|Googlebot-Mobile|mobile|mobi|Windows Mobile|Safari Mobile|Android|Opera Mini|Fennec
</pre>
<p>You can add any other browser to this Expression, just point your device to <a href="http://whatsmyuseragent.com/">http://whatsmyuseragent.com/</a> and find out user agent name of device browser. And this is how it looks in administration</p>
<div id="attachment_14465" class="wp-caption aligncenter" style="width: 619px"><a href="http://inchoo.net/wp-content/uploads/2012/05/packagesettings.jpg"><img class=" wp-image-14465 " title="packagesettings" src="http://inchoo.net/wp-content/uploads/2012/05/packagesettings.jpg" alt="" width="609" height="238" /></a><p class="wp-caption-text">Using expressions</p></div>
<p>We need to mention that theme is independent from main store theme, all files which are edited don&#8217;t &#8220;break&#8221; default Magento markup we are only using power of HTML5 and one of the new cool feature &#8220;<a href="http://www.w3.org/html/wg/html5/#custom">custom data attributes</a>&#8220;.</p>
<blockquote><p>Simply, the specification for custom data attributes states that any attribute that starts with &#8220;data-&#8221; will be treated as a storage area for private data (private in the sense that the end user can&#8217;t see it &#8211; it doesn&#8217;t affect layout or presentation).</p></blockquote>
<p>Short explanation by <a href="http://ejohn.org/blog/html-5-data-attributes/">John Resig</a></p>
<p>And here is our example for store header:</p>
<pre class="brush: php; title: ; notranslate">&lt;/pre&gt;
&lt;div data-role=&quot;header&quot; data-position=&quot;inline&quot; data-theme=&quot;c&quot;&gt;
&lt;h1&gt;&lt;a href=&quot;&lt;?php echo $this-&gt;getUrl('') ?&gt;&quot; data-icon=&quot;home&quot;&gt;
&lt;img src=&quot;&lt;?php echo $this-&gt;getLogoSrc() ?&gt;&quot; alt=&quot;&lt;?php echo $this-&gt;getLogoAlt() ?&gt;&quot; /&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;!--?php echo $this-----&gt;getChildhtml('top-user');?&gt;&lt;/div&gt;
&lt;pre&gt;</pre>
<p>We don&#8217;t have any local hosted files regarding to jQuery because it is much easier to edit and place the newest version of js.</p>
<pre class="brush: php; title: ; notranslate">
					&lt;![CDATA[&lt;script type=&quot;text/javascript&quot; src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js&quot;&gt;&lt;/script&gt;&lt;script type=&quot;text/javascript&quot;&gt;jQuery.noConflict();&lt;/script&gt;]]&gt;
					&lt;![CDATA[&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js&quot;&gt;&lt;/script&gt;]]&gt;
				&lt;![CDATA[		&lt;link rel=&quot;stylesheet&quot; href=&quot;http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css&quot; /&gt;]]&gt;
            skin_jsjs/swipe.js
</pre>
<p>Ah, if you need more info about jQuery mobile framework go to: <a href="http://jquerymobile.com/">http://jquerymobile.com/</a>.</p>
<p>Swipe JS, <a href="http://swipejs.com/">http://swipejs.com/</a>,</p>
<blockquote><p>Swipe is a lightweight mobile slider with 1:1 touch movement, resistant bounds, scroll prevention, and completely library agnostic. <img src='http://inchoo.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p></blockquote>
<p>Ok, we made simple approach, create static block, named Slider with ID slider and place this code</p>
<pre class="brush: php; title: ; notranslate">&lt;/pre&gt;
&lt;div style=&quot;display: block;&quot;&gt;&lt;img src=&quot;{{media url=&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;display: none;&quot;&gt;&lt;img src=&quot;{{media url=&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;display: none;&quot;&gt;&lt;img src=&quot;{{media url=&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;display: none;&quot;&gt;&lt;img src=&quot;{{media url=&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
&lt;pre&gt;
</pre>
<p>If is there no needs for homepage slider just removed it from local.xml (from line 44).</p>
<p>For styling pages, we cover most of them but there is always more space to improve some part of Magento interface.</p>
<p>For demo and download go to our demo store <a href="http://imobile.inchoo4u.net">http://imobile.inchoo4u.net</a> with your smartphone, emulate in browser (change user agent), <a href="https://github.com/doxikus/imobile">visit @ github</a>, or just scan this QR code.</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/05/qr.png"><img class="aligncenter size-full wp-image-14484" title="qr" src="http://inchoo.net/wp-content/uploads/2012/05/qr.png" alt="" width="400" height="400" /></a></p>
<p>So if you have any suggestion, issues, trouble just comment below, enjoy</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/ecommerce/magento/magento-mobile-theme-imobile/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>How I survived all of the Google&#8217;s updates since 2005</title>
		<link>http://inchoo.net/online-marketing/how-i-survived-all-of-the-googles-updates-since-2005/</link>
		<comments>http://inchoo.net/online-marketing/how-i-survived-all-of-the-googles-updates-since-2005/#comments</comments>
		<pubDate>Mon, 07 May 2012 07:32:50 +0000</pubDate>
		<dc:creator>Toni Anicic</dc:creator>
				<category><![CDATA[Online Marketing]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=14452</guid>
		<description><![CDATA[On April 24th, Google released a major web-spam update to its index called Penguin. Although it reportedly affected &#8220;just&#8221; 3.1% of English search queries, it hit the most &#8220;optimized&#8221; SERPs &#8230;]]></description>
			<content:encoded><![CDATA[<p>On April 24th, Google released a major web-spam update to its index called <strong>Penguin</strong>. Although it reportedly affected &#8220;just&#8221; 3.1% of English search queries, it hit the most &#8220;optimized&#8221; SERPs and high value keywords, so it made a big noise in the SEO community. From the data we have so far, Google made this update to hit &#8220;over-optimized&#8221; websites. Those engaged in heavy SEO link-building / keyword stuffing / unnatural text / link anchor patterns.<span id="more-14452"></span></p>
<p>I will tell you a secret of how I managed NOT to get negatively affected by any Google&#8217;s update since I started in the world of SEO back in 2005. I fear no Pandas, Penguins or Maydays and this is why:</p>
<p><strong>I only do white-hat SEO. I read official Google blogs, watch their official videos and do what they tell us to do. It&#8217;s so simple, yet so many SEOs don&#8217;t get it.</strong></p>
<p>The SEO industry is pretty big, yet I can see some official Google videos explaining some really useful things with just a few thousand views. Why don&#8217;t you listen to them? They are trying to help you. They tell you exactly what they want SEOs to do and SEOs just don&#8217;t wanna listen.</p>
<p>When the Panda hit, I thought people will finally get it, but nop, they continued using spammy SEO tactics. I fear Penguin update will be no different and that a big majority of SEOs out there will still use spammy SEO tactics.</p>
<p>So listen to key advice on your SEO tactics by a person who survived all of the Google&#8217;s updates since 2005. These are the top 3 things you need to do:</p>
<h2>1. Create awesome content:</h2>
<p>You heard it lots of times &#8211; content is king. Let me say it again: content is king. Repeat after me: content is king. What is content? It&#8217;s text, it&#8217;s images, it&#8217;s videos. What should this content consist of? It should consist of exactly what your visitor is searching for. Nothing more and nothing less. No magical formula for keyword density or number of images or amount of text. Just write / make exactly what your visitors need and that&#8217;s it!</p>
<p><em>Why does this work and why it will not hit me on the next Google update?</em></p>
<p>Because Google wants to deliver the best content for the search phrase the user has entered. If you have the best content for the query, Google is trying really hard to optimize the algorithm so that YOUR content is on the number one spot.</p>
<h2>2. Promote awesome content but don&#8217;t spam:</h2>
<p>We all want to see awesome stuff. This is why promoting awesome content is good. We don&#8217;t want to get spammed. This is why you shouldn&#8217;t spam.</p>
<p><em>Why does this work and why it will not hit me on the next Google update?</em></p>
<p>Because Google&#8217;s algorithms are not so advanced that they can know what&#8217;s the best content, they need to rely on content&#8217;s popularity. If you promote it to your audience and your audience likes it &#8211; retweets it, likes it on facebook, +1s it, links to it) its a sign to Google that they are satisfied with your content. But don&#8217;t spam them since Google cares about their searchers and wouldn&#8217;t like to show them on a number one spot for their query a website that got there due to spam and not due to having the best content.</p>
<h2>3. Make your website&#8217;s navigation logical and easy to use:</h2>
<p>Make important pages accessible. Make it easy for someone who landed &#8220;in the middle of your website&#8221; to figure out where he is and easily navigate from there. Make your site structure logical for the user, and Google will love it. Making unnatural anchor text link patterns will not help you in the long run.</p>
<p><em>Why does this work and why it will not hit me on the next Google update?</em></p>
<p>If user can easily find what he&#8217;s looking for, so will Google. If you make user happy, you make Google happy. It&#8217;s very simple. If you make navigation for Google and not for user, Google will not like it.</p>
<p><strong>The number one question you need to ask yourself if you are getting outranked by your competitors:</strong></p>
<h2>1. Do I have the best content for that query?</h2>
<p>It&#8217;s that simple. It&#8217;s the most important question to ask yourself. Don&#8217;t try to rank bad content. Don&#8217;t try to rank wrong content for the query. If your content sucks, create new content which is a better fit for the query.</p>
<p>And now you know. Now you know how to survive the Zebra attack that Google will eventually release and hit the SERPs (yea, these updates are usually named after black and white animals <img src='http://inchoo.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). I&#8217;d say &#8220;good luck&#8221;, but if you listen to this advice, you will not need it.</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/online-marketing/how-i-survived-all-of-the-googles-updates-since-2005/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Android ksoap2 and Magento v2 API</title>
		<link>http://inchoo.net/mobile-development/android-development/magento-v2-api-soap-android/</link>
		<comments>http://inchoo.net/mobile-development/android-development/magento-v2-api-soap-android/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 12:39:43 +0000</pubDate>
		<dc:creator>Darko Goles</dc:creator>
				<category><![CDATA[Android development]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Magento api]]></category>
		<category><![CDATA[SOAP]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13768</guid>
		<description><![CDATA[When trying to access Magento SOAP web services v2 from Android, after some searching on web, I found that ksoap2-android project could be useful to implement SOAP client in android &#8230;]]></description>
			<content:encoded><![CDATA[<p>When trying to access Magento SOAP web services v2 from Android, after some searching on web, I found that ksoap2-android project could be useful to implement SOAP client in android project. (Ksoap2-android is lightweight and efficient SOAP client library for android platform).<br />
Next step was to figure-out how to use it.<br />
After some additional investigation, I found that it is pretty simple to use, when you get used to it once.<span id="more-13768"></span></p>
<p>First of all, let&#8217;s create new Android project, I set it to be for android 2.3.3. After creating new project, we need to download and import ksoap2-android library inside the project and add it to build path.</p>
<p>Ksoap2-android library can be downloaded from here (<a href="http://code.google.com/p/ksoap2-android/downloads/detail?name=ksoap2-android-assembly-2.4-jar-with-dependencies.jar&amp;can=2&amp;q=" target="_blank">http://code.google.com/p/ksoap2-android/downloads/detail?name=ksoap2-android-assembly-2.4-jar-with-dependencies.jar&amp;can=2&amp;q=</a>)</p>
<p>When download <strong>ksoap2-android-assembly-2.4-jar-with-dependencies.jar</strong>, make additional folder inside your android project, call it for example &#8220;lib&#8221; and paste ksoap2-android-assembly-2.4-jar-with-dependencies.jar there.</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/adding_ksoap.jpg"><img class="aligncenter size-thumbnail wp-image-13777" title="adding_ksoap" src="http://inchoo.net/wp-content/uploads/2012/04/adding_ksoap-300x195.jpg" alt="" width="300" height="195" /></a></p>
<p>After that, right click on pasted file in package explorer (assuming that you are using Eclipse) and choose: Build Path -&gt; Add To Build Path.</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/build_path.jpg"><img class="aligncenter size-thumbnail wp-image-13778" title="build_path" src="http://inchoo.net/wp-content/uploads/2012/04/build_path-300x240.jpg" alt="" width="300" height="240" /></a></p>
<p>Of course, If we want to access Magento web services SOAP API, we need to go to Magento installation&#8217;s admin area and under <em>System/Web services/Roles</em> create Role with appropriate resources (for development purpose, we can mark them all), and then <em>System/Web services/Users</em> create new API user.</p>
<p>After that we need to assign roles we created to user in order to make the whole thing work. We will need user-name and apiKey from there to be able to log-in with our SOAP client.</p>
<p>Now, we are ready to start developing out test application.</p>
<p>As I said, this example is for tutorial purposes &#8211; only, and it&#8217;s not right way to make Http requests from main Activity, but is just for purposes of this article, so we will now write out code inside Main Activity&#8217;s onCreate method:</p>
<pre class="brush: php; title: ; notranslate">

package com.soap.test;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class SoapTestActivity extends Activity {
	/** Called when the activity is first created. */

	private static final String NAMESPACE = &quot;urn:Magento&quot;;
	private static final String URL = &quot;http://yourhost.com/api/v2_soap/&quot;;

	@Override
	public void onCreate(Bundle savedInstanceState) {

		//our code goes here

		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

}
</pre>
<p>Fist we are going to create and set new SoapSerializationEnvelope:</p>
<pre class="brush: php; title: ; notranslate">
 //...

		try {

			SoapSerializationEnvelope env = new SoapSerializationEnvelope(
					SoapEnvelope.VER11);

			env.dotNet = false;
			env.xsd = SoapSerializationEnvelope.XSD;
			env.enc = SoapSerializationEnvelope.ENC;

		} catch (Exception e) {
			e.printStackTrace();
		}

//...
</pre>
<p>After that, lets create our request object and assign it to envelope. We are going first to call &#8220;login&#8221; method to Magento API in order to authenticate and retreive the sessionId.</p>
<pre class="brush: php; title: ; notranslate">
//...
		try {

			SoapSerializationEnvelope env = new SoapSerializationEnvelope(
					SoapEnvelope.VER11);

			env.dotNet = false;
			env.xsd = SoapSerializationEnvelope.XSD;
			env.enc = SoapSerializationEnvelope.ENC;

			SoapObject request = new SoapObject(NAMESPACE, &quot;login&quot;);

			request.addProperty(&quot;username&quot;, &quot;mobile&quot;);
			request.addProperty(&quot;apiKey&quot;, &quot;mobile123&quot;);

			env.setOutputSoapObject(request);

		} catch (Exception e) {
			e.printStackTrace();
		}

		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}
</pre>
<p>Of course, we have to add request parameters to login method, and it&#8217;s done with <em>request.addProperty</em> and then assign request object to envelope.<br />
After that, we need to call SOAP method and retrieve result. so, here is complete Activity source code:</p>
<pre class="brush: php; title: ; notranslate">

package com.soap.test;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class SoapTestActivity extends Activity {
	/** Called when the activity is first created. */

	private static final String NAMESPACE = &quot;urn:Magento&quot;;
	private static final String URL = &quot;http://yourhost.com/api/v2_soap/&quot;;

	@Override
	public void onCreate(Bundle savedInstanceState) {

		try {

			SoapSerializationEnvelope env = new SoapSerializationEnvelope(
					SoapEnvelope.VER11);

			env.dotNet = false;
			env.xsd = SoapSerializationEnvelope.XSD;
			env.enc = SoapSerializationEnvelope.ENC;

			SoapObject request = new SoapObject(NAMESPACE, &quot;login&quot;);

			request.addProperty(&quot;username&quot;, &quot;mobile&quot;);
			request.addProperty(&quot;apiKey&quot;, &quot;mobile123&quot;);

			env.setOutputSoapObject(request);

			HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

			androidHttpTransport.call(&quot;&quot;, env);
			Object result = env.getResponse();

			Log.d(&quot;sessionId&quot;, result.toString());

		} catch (Exception e) {
			e.printStackTrace();
		}

		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

}
</pre>
<p>We retrieved session id as can be seen in LogCat window:</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/session_id.jpg"><img class="aligncenter size-full wp-image-13781" title="session_id" src="http://inchoo.net/wp-content/uploads/2012/04/session_id.jpg" alt="" width="609" height="301" /></a></p>
<p>After this basic steps, we just have to make SOAP calls same way to other web service methods, and provide retrieved sessionId in each call.</p>
<p>For example, let&#8217;s call customerCustomerList method to retrieve list of customers:</p>
<pre class="brush: php; title: ; notranslate">

package com.soap.test;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class SoapTestActivity extends Activity {
	/** Called when the activity is first created. */

	private static final String NAMESPACE = &quot;urn:Magento&quot;;
	private static final String URL = &quot;http://yourhost.com/api/v2_soap/&quot;;

	@Override
	public void onCreate(Bundle savedInstanceState) {

		try {

			SoapSerializationEnvelope env = new SoapSerializationEnvelope(
					SoapEnvelope.VER11);

			env.dotNet = false;
			env.xsd = SoapSerializationEnvelope.XSD;
			env.enc = SoapSerializationEnvelope.ENC;

			SoapObject request = new SoapObject(NAMESPACE, &quot;login&quot;);

			request.addProperty(&quot;username&quot;, &quot;mobile&quot;);
			request.addProperty(&quot;apiKey&quot;, &quot;mobile123&quot;);

			env.setOutputSoapObject(request);

			HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

			androidHttpTransport.call(&quot;&quot;, env);
			Object result = env.getResponse();

			Log.d(&quot;sessionId&quot;, result.toString());

			//making call to get list of customers

			String sessionId = result.toString();

			request = new SoapObject(NAMESPACE, &quot;customerCustomerList&quot;);
			request.addProperty(&quot;sessionId&quot;,sessionId );

			env.setOutputSoapObject(request);
			androidHttpTransport.call(&quot;&quot;, env);

			result = env.getResponse();

			Log.d(&quot;Customer List&quot;, result.toString());

		} catch (Exception e) {
			e.printStackTrace();
		}

		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

}
</pre>
<p>As we can see in LogCat window, we got customer list object with child objects as response.</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/CustomerList.jpg"><img class="aligncenter size-full wp-image-13782" title="CustomerList" src="http://inchoo.net/wp-content/uploads/2012/04/CustomerList.jpg" alt="" width="609" height="109" /></a></p>
<p>If you want to find out what methods in Magento API v2 are available and what parameters should be used for request, just open URL: <strong>http://yourhost.com/api/v2_soap/?wsdl=1</strong> and you will see all available methods and their request and response parameters that can be used.</p>
<p>Of course, don&#8217;t forget to set <strong>android.permission.INTERNET</strong> in AndroidManifest.xml file.</p>
<p>Hope that you will find this post helpful in own projects. Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/mobile-development/android-development/magento-v2-api-soap-android/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Add Gravatar to your iOS App</title>
		<link>http://inchoo.net/mobile-development/iphone-development/add-gravatar-to-your-app/</link>
		<comments>http://inchoo.net/mobile-development/iphone-development/add-gravatar-to-your-app/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 10:36:50 +0000</pubDate>
		<dc:creator>Ana Gabric</dc:creator>
				<category><![CDATA[iPhone development]]></category>
		<category><![CDATA[Mobile development]]></category>
		<category><![CDATA[gravatar]]></category>
		<category><![CDATA[mageboard]]></category>
		<category><![CDATA[md5]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13746</guid>
		<description><![CDATA[Our latest iOS application Mageboard is showing customers gravatar. Gravatar is a service for providing globally unique avatars. On Gravatar, users can register an account based on their email address, &#8230;]]></description>
			<content:encoded><![CDATA[<p>Our latest iOS application <a href="http://mageboard.inchoo.net/">Mageboard</a> is showing customers gravatar. <a href="http://en.gravatar.com/">Gravatar</a> is a service for providing globally unique avatars. On Gravatar, users can register an account based on their email address, and upload an avatar to be associated with the account. <span id="more-13746"></span></p>
<p>Gravatar URLs are based on the use of the <a href="https://en.gravatar.com/site/implement/hash/">hashed</a> value of an email address. To create accurate hash you need to:</p>
<ol>
<li>Trim whitespace from email address</li>
<li>Force all characters to lower-case</li>
<li><a href="http://en.wikipedia.org/wiki/Cryptographic_hash_function">MD5</a> hash the final string</li>
</ol>
<pre class="brush: objc; title: ; notranslate">

#import &quot;GetGravatar.h&quot;
#import &lt;CommonCrypto/CommonDigest.h&gt;

@implementation GetGravatar

+ (NSURL*)gravatarURL:(NSString*)aEmail
{
if (aEmail)
{
NSString *email = [[aEmail stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] lowercaseString];

NSString *emailMD5 = [GetGravatar md5HexDigest:email];

NSString *gravatarString = [NSString stringWithFormat:@&quot;http://www.gravatar.com/avatar/%@&quot;, emailMD5];

return [NSURL URLWithString:gravatarString];
}

return nil;
}

+ (NSString*)md5HexDigest:(NSString*)input
{
const char* str = [input UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5(str, strlen(str), result);

NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];

for(int i = 0; i&lt;CC_MD5_DIGEST_LENGTH; i++)
[ret appendFormat:@&quot;%02x&quot;,result[i]];

return ret;
}

@end
</pre>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/mobile-development/iphone-development/add-gravatar-to-your-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Core Plot in iPhone/iPad app</title>
		<link>http://inchoo.net/mobile-development/iphone-development/using-core-plot-in-iphoneipad-app/</link>
		<comments>http://inchoo.net/mobile-development/iphone-development/using-core-plot-in-iphoneipad-app/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 06:39:21 +0000</pubDate>
		<dc:creator>Ana Gabric</dc:creator>
				<category><![CDATA[iPhone development]]></category>
		<category><![CDATA[Mobile development]]></category>
		<category><![CDATA[Core Plot]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13663</guid>
		<description><![CDATA[Core Plot is a plotting framework for iOS and OS X. You can download the latest zip file from here. I&#8217;m using CorePlot_1.0. After unzipping it go to CorePlot_1.0/Binaries/iOS, there &#8230;]]></description>
			<content:encoded><![CDATA[<p>Core Plot is a plotting framework for iOS and OS X. You can download the latest zip file from <a href="http://code.google.com/p/core-plot/downloads/list">here</a>. I&#8217;m using CorePlot_1.0. After unzipping it go to CorePlot_1.0/Binaries/iOS, there you can find CorePlotHeaders folder and libCorePlot-CocoaTouch.a, add them to your project. Add QuartzCore.framework, go to Build Settings and add -ObjC -all_load to Other Linker Flags.</p>
<p><span id="more-13663"></span></p>
<p>Next step is to define view in which your graph will be presented and define data which will be shown. Your views class must be CPTGraphHostingView. In my case this is in MBReportViewController.nib. Now create MBBarPlot class. It&#8217;s a subclass of NSObject.</p>
<p><img class="alignnone size-medium wp-image-13666" title="Hosting View" src="http://inchoo.net/wp-content/uploads/2012/04/Hosting-View-600x366.png" alt="" width="600" height="366" /></p>
<p><strong>MBBarPlot.h</strong></p>
<pre class="brush: objc; title: ; notranslate">

#import &lt;Foundation/Foundation.h&gt;
#import &quot;CorePlot-CocoaTouch.h&quot;

@interface MBBarPlot : NSObject &lt;CPTPlotDataSource&gt;

@property (nonatomic, retain) CPTGraphHostingView *hostingView;
@property (nonatomic, retain) CPTXYGraph *graph;
@property (nonatomic, retain) NSMutableArray *graphData;
@property (nonatomic, retain) INReport *currentReport;

-(id)initWithHostingView:(CPTGraphHostingView *)hostingView andReport:(INReport*)aReport;
-(void)plotSetups;

@end
</pre>
<p><strong>MBBarPlot.m</strong></p>
<pre class="brush: objc; title: ; notranslate">

#import &quot;MBBarPlot.h&quot;
#import &quot;INReport.h&quot;

@implementation MBSimplePlot

@synthesize hostingView;
@synthesize graph;
@synthesize graphData;
@synthesize currentReport;

- (id)initWithHostingView:(CPTGraphHostingView *)hostingView andReport:(INReport*)aReport
{
self = [super init];

if ( self != nil )
{
self.hostingView = hostingView;
self.graph = nil;
self.graphData = [aReport reportsXYItemEntity];
self.currentReport = aReport;
}

return self;
}

- (void)plotSetups
{
if ( (self.hostingView == nil) || (self.graphData == nil) || (self.graph == nil) )
return;

self.graph = [[CPTXYGraph alloc] initWithFrame:[self.hostingView bounds]] ;
self.hostingView.hostedGraph = self.graph;

// here yo can set graph elements:
// paddings
// line styles
// text style
// min and max values on axis
// title
// axis labels ...

CPTBarPlot *plot = [[CPTBarPlot alloc] init] ;
plot.delegate = self;
plot.dataSource = self;
[self.graph addPlot:plot];
}

-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot
{
return [self.graphData count];
}

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
{
if ( fieldEnum == CPTBarPlotFieldBarLocation )
return [NSNumber numberWithFloat:index*10];
   else
return [NSNumber numberWithFloat:[[[self.graphData objectAtIndex:index] y] floatValue]];
}

@end
</pre>
<p>In MBReportViewController you need to create instance of your chart with <em>initWithHostingView:andReport:</em> after that call <em>plotSetups</em> where you can set plot frame, plot space, axis set, line style, text style, plot type, legend etc. With Core Plot you can choose various plot types and easily adjust them to fit your needs. Here are the result:</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/reports1.png"><img class="alignnone size-medium wp-image-13550" title="reports" src="http://inchoo.net/wp-content/uploads/2012/04/reports1-600x665.png" alt="" width="600" height="665" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/mobile-development/iphone-development/using-core-plot-in-iphoneipad-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento API v2 SOAP demystified</title>
		<link>http://inchoo.net/ecommerce/magento/magento-v2-soap-demystified/</link>
		<comments>http://inchoo.net/ecommerce/magento/magento-v2-soap-demystified/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 12:35:21 +0000</pubDate>
		<dc:creator>Darko Goles</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Mobile web]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[Web sercvices]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13588</guid>
		<description><![CDATA[Last few weeks, i often see confused people asking questions about difference between Magento&#8217;s API v1 and v2, and also bunch of questions about how to use WSDL and WS-I &#8230;]]></description>
			<content:encoded><![CDATA[<p>Last few weeks, i often see confused people asking questions about difference between Magento&#8217;s API v1 and v2, and also bunch of questions about how to use WSDL and WS-I files when developing own or extending existing Magento soap API v2.<br />
It is obvious that short articles about specific Magento API parts will not help them to get the bigger picture about Magento core API v2. Because of that, I decided to demystify practical usage of Magento API v2 and also to explain difference when using v1 and/or v2 API.</p>
<p>Let&#8217;s start from beginning, to everything clear later:</p>
<p><span id="more-13588"></span></p>
<h2>SOAP basics</h2>
<p><strong>SOAP</strong> = Simple Object Access Protocol. It is based on XML mostly via HTTP (POST).<br />
Soap basic structure is basically Envelope with Header and Body inside:</p>
<div id="attachment_13605" class="wp-caption aligncenter" style="width: 291px"><a href="http://inchoo.net/wp-content/uploads/2012/04/Soap-structure.jpg"><img class="size-thumbnail wp-image-13605" title="Soap structure" src="http://inchoo.net/wp-content/uploads/2012/04/Soap-structure-281x300.jpg" alt="Soap structure" width="281" height="300" /></a><p class="wp-caption-text">Soap structure</p></div>
<p>Some example SOAP message looks like this:</p>
<pre class="brush: php; title: ; notranslate">

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 299
SOAPAction: &quot;http://www.w3.org/2003/05/soap-envelope&quot;

&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;soap:Envelope xmlns:soap=&quot;http://www.w3.org/2003/05/soap-envelope&quot;&gt;
  &lt;soap:Header&gt;
  &lt;/soap:Header&gt;
  &lt;soap:Body&gt;
     &lt;m:GetStockPrice xmlns:m=&quot;http://www.example.org/stock&quot;&gt;
     &lt;m:StockName&gt;IBM&lt;/m:StockName&gt;
     &lt;/m:GetStockPrice&gt;
  &lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;
</pre>
<h4>WSDL</h4>
<p><strong>WSDL</strong> stands for: “Web Services Description Language”. It is basically XML &#8211; based language that is used for describing the functionality offered by a web service.</p>
<p>There are two possible versions of WSDL: WSDL 1.1 and WSDL 2.0. Since Magento uses WSDL 1.1, I will continue with this WSDL version in this article.</p>
<p><strong>Objects in WSDL</strong></p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/wsdl_objects.jpg"><img class="aligncenter size-full wp-image-13611" title="wsdl_objects" src="http://inchoo.net/wp-content/uploads/2012/04/wsdl_objects.jpg" alt="" width="609" height="388" /></a></p>
<h4>Magento Core API</h4>
<p>There are two API types present in Magento by default (I am talking about Magento versions 1.6.2CE and below):</p>
<ul>
<li>XML-RPC</li>
<li>SOAP (API v1 and v2)</li>
</ul>
<p>More on API types and differences you can find in post: <a title="Mobile development" href="http://inchoo.net/mobile-development/iphone-development/consuming-soap-web-services-in-ios/" target="_blank">Consuming SOAP web services in iOS</a> by Ivan Kalaica</p>
<h2>Accessing Magento API via SOAP &#8211; basic steps</h2>
<ol>
<li>Create appropriate role (Magento Admin)</li>
<li>Create web services user (Magento Admin)</li>
<li>Assign created role to the user (Magento Admin)</li>
<li>Log-in to web service and retrieve Session Id (Soap Client)</li>
<li>Call appropriate method (Soap Client)</li>
</ol>
<h4>Creating Web Service Role</h4>
<p style="text-align: left;">First we should define appropriate roles for web services user, so, log-in to admin panel, go to menu: System/Web services/Roles and click on Add New Role button.</p>
<p style="text-align: left;"><a href="http://inchoo.net/wp-content/uploads/2012/04/roles11.jpg"><img class="size-thumbnail wp-image-13631 aligncenter" title="roles1" src="http://inchoo.net/wp-content/uploads/2012/04/roles11-300x225.jpg" alt="" width="300" height="225" /></a><br />
On “Role info” tab, we need to enter some custom Role name, and then click on Role resources tab, choose wanted role resources and Save Role.</p>
<p style="text-align: left;"><a href="http://inchoo.net/wp-content/uploads/2012/04/Role_resources.jpg"><img class="aligncenter size-thumbnail wp-image-13626" title="Role_resources" src="http://inchoo.net/wp-content/uploads/2012/04/Role_resources-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Role resources necessary for usage with API are basically defined in each Magento module&#8217;s api.xml file in etc folder, and can be checked there what role resources are needed for successful consuming specific API method.</p>
<h4>Creating Web Service User</h4>
<p>After creating role, let&#8217;s create web services user that will have defined role permissions.<br />
Go to menu: System/Web Services/Users and click on “Add New User” button. Under “User Info” tab fill the fields, and pay attention that “User Name” and “API key” values are values that we will use on client side to access API.</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/web_services_user.jpg"><img class="aligncenter size-thumbnail wp-image-13635" title="web_services_user" src="http://inchoo.net/wp-content/uploads/2012/04/web_services_user-300x225.jpg" alt="" width="300" height="225" /></a></p>
<h4>Assigning created Role to the User</h4>
<p>After that, we just have to click on User Role tab and click on radio-button to assign wanted role to current user.<br />
After that we just need to click Save User button.</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/user_role.jpg"><img class="aligncenter size-thumbnail wp-image-13636" title="user_role" src="http://inchoo.net/wp-content/uploads/2012/04/user_role-300x225.jpg" alt="" width="300" height="225" /></a></p>
<h4>Calling Magento API v1 methods</h4>
<pre class="brush: php; title: ; notranslate">

&lt;?php

$api_url_v1 = &quot;http://magento.local/api/soap/?wsdl=1&quot;;

$username = 'mobile';
$password = 'mobile123';

$cli = new SoapClient($api_url_v1);

//retreive session id from login
$session_id = $cli-&gt;login($username, $password);

//call customer.list method
$result = $cli-&gt;call($session_id, 'customer.list', array(array()));
</pre>
<h4>Calling Magento API v2 methods</h4>
<pre class="brush: php; title: ; notranslate">

&lt;?php

$api_url_v2 = &quot;http://magento.local/api/v2_soap/?wsdl=1&quot;;

$username = 'mobile';
$password = 'mobile123';

$cli = new SoapClient($api_url_v2);

//retreive session id from login
$session_id = $cli-&gt;login($username, $password);

//call customer.list method
$result = $cli-&gt;customerCustomerList($session_id);
</pre>
<p>If you compare those two versions of API calls, you will notice that v1 uses method “call” for ever requested method, and v2 has defined full method name to call.</p>
<pre class="brush: php; title: ; notranslate">
//API v1 way
$result = $cli-&gt;call($session_id, 'customer.list', array(array()));

//API v2 way
$result = $cli-&gt;customerCustomerList($session_id);&lt;/pre&gt;
</pre>
<p>Basically, API v2 calls method same way like v1, but there is some kind of wrapper around call method in v2. Somebody will ask: Why Magento did something like this? Why would somebody make different methods for accessing API when we have “call” method already?</p>
<p>Here comes the basic difference between v1 and v2 API in Magento.</p>
<p>To demystify that, we should first look at and compare WSDL for v1 and v2 API in Magento.</p>
<p>If we open url: <strong>http://yourserver.com/api/<em>soap</em>/?wsdl</strong> we can see that few basic method are inside: call, multiCall, login etc&#8230;<br />
But, if we look at <strong>http://yourserver.com/api/<em>v2_soap</em>/?wsdl</strong>, we will find that there is bunch of methods defined inside.</p>
<p>Imagine that you want to use some generator for SOAP methods to auto-generate your client-side classes end entities for consuming web services.<br />
When using WSDL generated for API v1, we could just generate those few methods which will not tell to our source code generator what methods are available, and what parameters for each methods can we use, what entities we should have on client side &#8230; but if we are consuming web services through v2 API, it&#8217;s already served for us inside WSDL&#8230;</p>
<p><strong>Conclusion:</strong></p>
<p>When using Magento v1 API, we access resources via call method and provide API method name and parameters as parameters of call method.</p>
<p>When using Magento v2 API, we access resources via real method name and we provide parameters as defined in WSDL for each specific method.</p>
<p>OK. When we got this difference, and showed how to consume SOAP, let&#8217;s focus on creating own web service methods compatible with API v2.</p>
<h2>Practical example: Creating own API v2 method</h2>
<h4>Basic steps:</h4>
<p>1. Create Magento Extension (we are not going explain here how to do it)<br />
2. Create Model for API method<br />
3. Create and configure api.xml file<br />
4. Create wsdl.xml file (with proper definitions)<br />
5. Create wsi.xml file (with proper definitions) (OPTIONAL)</p>
<h4>Creating Model for API v2</h4>
<p>After properly configuring our config.xml it looks like this:</p>
<pre class="brush: php; title: ; notranslate">

&lt;?xml version=&quot;1.0&quot;?&gt;

&lt;config&gt;
   &lt;modules&gt;
      &lt;Inchoo_Mapy&gt;
         &lt;version&gt;1.0.1&lt;/version&gt;
      &lt;/Inchoo_Mapy&gt;
   &lt;/modules&gt;
   &lt;global&gt;
      &lt;models&gt;
         &lt;inchoo_mapy&gt;
             &lt;class&gt;Inchoo_Mapy_Model&lt;/class&gt;
         &lt;/inchoo_mapy&gt;
      &lt;/models&gt;
   &lt;/global&gt;
&lt;/config&gt;
</pre>
<p>Let&#8217;s navigate through Magento core files to see where Magento API models are in file-system:</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/CoreApiModelsLocation.jpg"><img class="aligncenter size-full wp-image-13648" title="CoreApiModelsLocation" src="http://inchoo.net/wp-content/uploads/2012/04/CoreApiModelsLocation.jpg" alt="" width="609" height="398" /></a></p>
<p>Since we are going to use API v2 only, We will create our model like this:</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/ModelLocation.jpg"><img class="aligncenter size-full wp-image-13650" title="ModelLocation" src="http://inchoo.net/wp-content/uploads/2012/04/ModelLocation.jpg" alt="" width="274" height="235" /></a></p>
<pre><a href="http://inchoo.net/wp-content/uploads/2012/04/ModelSource.jpg"><img class="aligncenter size-full wp-image-13657" title="ModelSource" src="http://inchoo.net/wp-content/uploads/2012/04/ModelSource.jpg" alt="" width="609" height="411" /></a></pre>
<h4>Creating and configuring api.xml</h4>
<p>The easiest way is to copy/paste one of Magento&#8217;s api.xml files in our etc folder and make changes there to suit our needs. Our final api.xml should look like this:</p>
<pre class="brush: php; title: ; notranslate">

&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;config&gt;
   &lt;api&gt;
     &lt;resources&gt;
     &lt;!-- START GUSTOMER GROUP RESOURCES --&gt;
       &lt;mapy_customer_group&gt;
            &lt;model&gt;inchoo_mapy/customer_group_api&lt;/model&gt;
            &lt;title&gt;Inchoo Customer's Groups API&lt;/title&gt;
            &lt;acl&gt;mapy_data&lt;/acl&gt;
            &lt;methods&gt;
              &lt;list translate=&quot;title&quot; module=&quot;inchoo_mapy&quot;&gt;
                  &lt;title&gt;Retrieve customer groups&lt;/title&gt;
                  &lt;method&gt;mapyItems&lt;/method&gt;
              &lt;/list&gt;
            &lt;/methods&gt;
       &lt;/mapy_customer_group&gt;
     &lt;!-- END CUSTOMER GROUP RESOURCES --&gt;
    &lt;/resources&gt;
    &lt;v2&gt;
      &lt;resources_function_prefix&gt;
           &lt;mapy_customer_group&gt;mapy_customerGroup&lt;/mapy_customer_group&gt;
           &lt;/resources_function_prefix&gt;
    &lt;/v2&gt;
    &lt;acl&gt;
       &lt;resources&gt;
           &lt;mapy_data translate=&quot;title&quot; module=&quot;inchoo_mapy&quot;&gt;
              &lt;title&gt;Mapy data&lt;/title&gt;
              &lt;sort_order&gt;3&lt;/sort_order&gt;
           &lt;/mapy_data&gt;
       &lt;/resources&gt;
    &lt;/acl&gt;
  &lt;/api&gt;
&lt;/config&gt;
</pre>
<p>Here is logic that has to be implemented in api.xml file. Api.xml file basically connects API calls with php methods inside specific models. Also, the ACL resources are defined here for specific api call.</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/api_xml_explained.jpg"><img class="aligncenter size-medium wp-image-13659" title="api_xml_explained" src="http://inchoo.net/wp-content/uploads/2012/04/api_xml_explained-600x414.jpg" alt="" width="600" height="414" /></a></p>
<h4>Creating wsdl.xml file</h4>
<p>When working with wsdl.xml and wsi.xml later, if you are happy NetBeans user, I strongly suggest you to search on Google and download the XML Tools plug-in that can make life much easier &#8230;</p>
<p>There are few things that we have to fill-in when creating wsdl.xml.</p>
<ul>
<li>Bindings</li>
<li>Port types</li>
<li>Messages</li>
<li>Types / Complex types</li>
</ul>
<p>Also, it&#8217;s easier to copy one of Magento&#8217;s wsdl files, paste it in our etc folder and remove unnecessary things and add our own inside.</p>
<p>Here is NetBeans &#8211; XML Tools screen-shot how this look like:</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/wsdl_struct.jpg"><img class="aligncenter size-medium wp-image-13664" title="wsdl_struct" src="http://inchoo.net/wp-content/uploads/2012/04/wsdl_struct-600x430.jpg" alt="" width="600" height="430" /></a></p>
<p>This  image is showing logic and direction how should we fill-in wsdl.xml:</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/wsdl_filling.jpg"><img class="aligncenter size-medium wp-image-13669" title="wsdl_filling" src="http://inchoo.net/wp-content/uploads/2012/04/wsdl_filling-600x393.jpg" alt="" width="600" height="393" /></a></p>
<p>Let&#8217;s now look at real xml source:</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/Bindings.jpg"><img class="aligncenter size-medium wp-image-13677" title="Bindings" src="http://inchoo.net/wp-content/uploads/2012/04/Bindings-600x416.jpg" alt="" width="600" height="416" /></a></p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/Port-types.jpg"><img class="aligncenter size-medium wp-image-13678" title="Port types" src="http://inchoo.net/wp-content/uploads/2012/04/Port-types-600x391.jpg" alt="" width="600" height="391" /></a></p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/Messages.jpg"><img class="aligncenter size-medium wp-image-13679" title="Messages" src="http://inchoo.net/wp-content/uploads/2012/04/Messages-600x373.jpg" alt="" width="600" height="373" /></a></p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/complex-types.jpg"><img class="aligncenter size-medium wp-image-13680" title="complex types" src="http://inchoo.net/wp-content/uploads/2012/04/complex-types-600x449.jpg" alt="" width="600" height="449" /></a></p>
<p>After we finished with wsdl, let&#8217;s go to <strong>http://ourmagento/api/v2_soap/?wsdl=1</strong> to see changes in global wsdl we made. (<strong>Don&#8217;t forget to clear cache first!</strong>).</p>
<p>We can see that all wsdl.xml files including ours are rendered as single.</p>
<p>All available wsdl definitions for current Magento installations are shown and our definitions should be there.</p>
<p>Now we are ready to use our newly created SOAP method.</p>
<p>But, if we want use some generator for client classes with that, for example <a href="http://sudzc.com" target="_blank">SUDZC</a> (http://sudzc.com) we need to make one more thing in order to make it possible&#8230;</p>
<h4>WSI</h4>
<p>- WSI is in basic compatibility layer for different frameworks and provides a little bit more information that can be used for example with XSLT to transform definitions into our client source code.<br />
- It&#8217;s not essential in order web services to work.<br />
- It is rendered when: Magento admin: System/Configuration/Services/Magento core API/WSI-Compliance configuration value is set to “YES”.</p>
<p>We could say that following sections we have to fill-in inside, in order to add our definitions properly:</p>
<ul>
<li>Bindings</li>
<li>Port types</li>
<li>Messages</li>
<li>Types / elements</li>
<li>Types / complex types</li>
</ul>
<p>Let&#8217;s copy/paste one of Magento&#8217;s wsi.xml inside our etc folder first. After that, let&#8217;s delete all unnecessary definitions for our SOAP method.</p>
<p>Adding definitions inside WSI except for slightly different definitions are basically the same as for wsdl.xml. If you are using existing wsi.xml, it&#8217;s easy to delete unnecessary and rename few nodes to suit your needs. Just follow the rule to fill all of this in the above list (Bindings, Port types &#8230; ).</p>
<p><a href="http://inchoo.net/wp-content/uploads/2012/04/SOAP_xml.zip">Here you can download archive with basic wsdl.xml, wsi.xml, api.xml so you can easier start writing</a> your own web service methods. Just put these files in your etc folder, rename appropriate things with your own and that&#8217;s it.</p>
<p>That would be all for now. If interested in Magento API, stay tuned.</p>
<p>Cheers <img src='http://inchoo.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/ecommerce/magento/magento-v2-soap-demystified/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to add a property via class category?</title>
		<link>http://inchoo.net/mobile-development/iphone-development/how-to-add-a-property-via-class-category/</link>
		<comments>http://inchoo.net/mobile-development/iphone-development/how-to-add-a-property-via-class-category/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 09:25:40 +0000</pubDate>
		<dc:creator>Ivan Kalaica</dc:creator>
				<category><![CDATA[iPhone development]]></category>
		<category><![CDATA[Mobile development]]></category>
		<category><![CDATA[Categories]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iVar]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[property]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13562</guid>
		<description><![CDATA[Have you ever been in a situation where you needed to extend class with additional property but for some organizational reason you didn&#8217;t want to change default source class file? &#8230;]]></description>
			<content:encoded><![CDATA[<p>Have you ever been in a situation where you needed to extend class with additional property but for some organizational reason you didn&#8217;t want to change default source class file? For example, when you add Xcode sub-project which you want to keep untouched and up-to date with it&#8217;s version control, but still you want to make certain default implementation changes in sub-project.</p>
<p><span id="more-13562"></span></p>
<p>Directly changing sub-project source files would end up with very painful merging after version control update. Sub-classing default class to add one more property is also painful experience comparing to Objective-C categories pattern (you would need to change class name everywhere you made an instance of default class). It&#8217;s true that in class category you can not declare iVar&#8217;s or make @synthesize but nevertheless you <strong>CAN</strong> extend class with another property by drilling down all to runtime.h. Below you can see example.</p>
<pre class="brush: objc; title: ; notranslate">

@interface SomeClass (Private)

@property (nonatomic, assign) id newProperty;

@end

NSString * const kNewPropertyKey = @&quot;kNewPropertyKey&quot;;

@implementation SomeClass (Private)

@dynamic newProperty;

- (void)setNewProperty:(id)aObject
{
	objc_setAssociatedObject(self, kNewPropertyKey, aObject, OBJC_ASSOCIATION_ASSIGN);
}

- (id)newProperty
{
	return objc_getAssociatedObject(self, kNewPropertyKey);
}

@end
</pre>
<p>This way you can have always keep your Xcode sub-project up-to date without painful merging. Also, it&#8217;s easier but not recommended to use categories over sub-classing pattern when you need to overwrite default class implementation (good only in cases you know what&#8217;s get overwritten).</p>
<p>In contrast to Objective-C class Extensions this way you don&#8217;t have to re-declare property that is publicly declared in default class. In Objective-C class Extensions it is also generally common for a class to have a publicly declared API and to then have additional methods declared privately for use solely by the class or the framework within which the class resides. Class extensions allow you to declare additional required methods for a class in locations other than within the primary class @interface block.</p>
<pre class="brush: objc; title: ; notranslate">

@interface MyClass : NSObject

@property (retain, readonly) float value;

@end

// Private extension, typically hidden in the main implementation file.

@interface MyClass ()

@property (retain, readwrite) float value;

@end

@interface MyClass : NSObject

- (float)value;

@end

@interface MyClass () {

    float value;

}

- (void)setValue:(float)newValue;

@end

@implementation MyClass

- (float)value {

    return value;

}

- (void)setValue:(float)newValue {

    value = newValue;

}

@end
</pre>
<p>The implementation of the setValue: method must appear within the main @implementation block for the class (you cannot implement it in a category). If this is not the case, the compiler emits a warning that it cannot find a method definition for setValue:. Therefore you should use objc_getAssociatedObject &amp; objc_setAssociatedObject to make&#8217;s your development way easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/mobile-development/iphone-development/how-to-add-a-property-via-class-category/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inchoo presents: Mageboard &#8211; Your Magento Dashboard!</title>
		<link>http://inchoo.net/mobile-development/iphone-development/inchoo-presents-mageboard-your-magento-dashboard/</link>
		<comments>http://inchoo.net/mobile-development/iphone-development/inchoo-presents-mageboard-your-magento-dashboard/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 08:07:39 +0000</pubDate>
		<dc:creator>Ana Gabric</dc:creator>
				<category><![CDATA[iPhone development]]></category>
		<category><![CDATA[Mobile Apps]]></category>
		<category><![CDATA[Mobile development]]></category>
		<category><![CDATA[inchooapp]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13303</guid>
		<description><![CDATA[Our latest iOS App gives access to Magento Dashboard. Orders, customers, reports &#8211; elements which Magento store owners already know, only extra spicy and on the go. You can buy &#8230;]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Arial,serif;"><span style="font-size: small;">Our latest <a title="Mageboard - all the details" href="http://mageboard.inchoo.net/" target="_blank">iOS App</a> gives access to Magento Dashboard. Orders, customers, reports &#8211; elements which Magento store owners already know, only extra spicy and on the go. You can buy the app from the<a href="http://itunes.apple.com/us/app/mageboard/id519044844?mt=8"> App Store</a>, install our <a href="http://www.magentocommerce.com/magento-connect/inchoo-mageboard-api-3752.html" target="_blank"><strong>FREE Magento extension</strong></a> and you are ready for mobile Magento experience. Now lets take a tour with our Demo Store&#8230;</span></span></p>
<h2>NEW: Mageboard Lite Now Available!</h2>
<p>For those of you who want to see Mageboard in action before you decide to spend the money on it, we created a <strong>free application called Mageboard Lite</strong>. For feature comparison chart, please see the <a href="http://mageboard.inchoo.net">Mageboard landing page</a>. For the Mageboard Lite app store URL, follow <a href="http://itunes.apple.com/us/app/mageboard-lite/id524358093?mt=8">this link</a>. </p>
<p><span id="more-13303"></span></p>
<p><span style="font-family: Arial,serif;"><span style="font-size: large;"><strong>Customers</strong></span> </span></p>
<p><span style="font-family: Arial,serif;"><span style="font-size: small;"><a href="http://mageboard.inchoo.net/" target="_blank">Mageboard</a> allows you to get to know your customers better &#8211; when have they logged in, how much money have they spent, how many orders have they made, what do they look like and much more. Looking for someone special? Use our quick search. Want to know who is your best customer? It&#8217;s only one touch away. Can&#8217;t remember the name of the customer? Maybe you know what group they belong to. <strong><a href="http://mageboard.inchoo.net/" target="_blank">Mageboard</a> makes it personal</strong> &#8211; call your customers, send them mail or sms, visit them, you can get directions from our app. It&#8217;s almost like a social app! </span></span></p>
<p><img class="aligncenter size-medium wp-image-13326" title="Customers" src="http://inchoo.net/wp-content/uploads/2012/04/Customers1-600x400.png" alt="" width="600" height="400" /></p>
<p><span style="font-family: Arial,serif;"><span style="font-size: large;"><strong>Orders</strong></span></span></p>
<p><span style="font-family: Arial,serif;"><span style="font-size: small;">Every time a new order is made, you will get a<strong> push notification</strong>. Review quickly all your orders – who made it and when, order amount and status. Are you interested only in a specific orders? Use our filter by statuses or advanced filter. Want to see much more details? It&#8217;s only one touch away.</span></span></p>
<p><img class="alignnone size-medium wp-image-13322" title="Orders" src="http://inchoo.net/wp-content/uploads/2012/04/Orders1-600x400.png" alt="" width="600" height="400" /></p>
<p><span style="font-family: Arial,serif;"><span style="font-size: large;"><strong>Reports</strong></span></span></p>
<p><span style="font-family: Arial,serif;"><span style="font-size: small;"><a href="http://mageboard.inchoo.net/" target="_blank">Mageboard</a> has 12 default reports which user can modify, delete, move, print or mail. How many new customers have signed up over the weekend, what was your total order value in the last month, what are your customers searching for most on your site, what were the most viewed products on your site last week? You can prepare any type of report in a matter of seconds and quickly determine where your strengths are, and what needs to be improved. <a href="http://mageboard.inchoo.net/" target="_blank">Mageboard</a> is using <strong>Core Plot</strong> for creating reports. Core Plot is a plotting framework for iOS and OS X. It&#8217;s easy to implement and modify, we highly recommend it!<br />
</span></span></p>
<p><img class="aligncenter size-medium wp-image-13550" title="reports" src="http://inchoo.net/wp-content/uploads/2012/04/reports1-600x665.png" alt="" width="600" height="665" /></p>
<p><span style="font-family: Arial,serif;"><span style="font-size: small;">Stay tuned, more killer features are coming up&#8230;</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/mobile-development/iphone-development/inchoo-presents-mageboard-your-magento-dashboard/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Consuming SOAP web services in iOS</title>
		<link>http://inchoo.net/mobile-development/iphone-development/consuming-soap-web-services-in-ios/</link>
		<comments>http://inchoo.net/mobile-development/iphone-development/consuming-soap-web-services-in-ios/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 12:36:13 +0000</pubDate>
		<dc:creator>Ivan Kalaica</dc:creator>
				<category><![CDATA[iPhone development]]></category>
		<category><![CDATA[Mobile development]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[RPC]]></category>
		<category><![CDATA[SOAP]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13491</guid>
		<description><![CDATA[In past few years I&#8217;ve been working on variety of different applications but never on one that includes consuming web services such as SOAP. That&#8217;s mostly because SOAP is considered &#8230;]]></description>
			<content:encoded><![CDATA[<p>In past few years I&#8217;ve been working on variety of different applications but never on one that includes consuming web services such as SOAP. That&#8217;s mostly because SOAP is considered outdated comparing to REST today &#8211; totally wrong assumption (comparing apples and oranges).</p>
<p><span id="more-13491"></span><strong>REST</strong> <em>(Representational state transfer)</em> &#8211; first of all requests and responses are built around the transfer of representations of resources. A resource can be essentially any coherent and meaningful concept that may be addressed. A representation of a resource is typically a document that captures the current or intended state of a resource. Main focus &#8211; data transfer.</p>
<p><strong>SOAP</strong> <em>(Simple Object Access Protocol)</em> brings it’s own protocol and focuses on exposing pieces of application logic (not data) as services. It exposes operations and focuses on accessing named operations, each implement some business logic through different interfaces. That&#8217;s why SOAP is considered as successor of XML-RPC and also uses XML to encode its HTTP-based calls. Everything is done via HTTP POST request.</p>
<p>SOAP is mostly used for Enterprise applications to integrate wide types and no. of applications and another trend is to integrate with legacy systems. With that said, consuming SOAP should be an easy task. This is when WSDL comes in story.</p>
<p><strong>WSDL</strong> <em>(Web Services Description Language)</em> is an XML-based language that is used for describing the functionality offered by a Web service. A WSDL description of a web service (also referred to as a WSDL file) provides a machine-readable description of how the service can be called, what parameters it expects, and what data structures it returns. It thus serves a roughly similar purpose as a method signature in a programming language.</p>
<p>To conclude introduction part, it&#8217;s good to know both of them. Enough with apples and oranges. Let&#8217;s see how to consume SOAP in iOS environment.</p>
<p>Having web service interface definition gives us opportunity to generate client side implementation automatically. <strong>Sudzc</strong> (<a href="http://sudzc.com/" target="_blank">http://sudzc.com/</a>) is very good example of code generator for accessing SOAP-based web services on iOS platform. It basically generates all the backend part you need for your project. Although there are few things I would change in generated implementation my opinion is that Sudzc is good choice.</p>
<p>You can test Sudzc simply by going to <a href="http://sudzc.com/" target="_blank">http://sudzc.com/</a>, uploading <a title="WSDL" href="http://dl.dropbox.com/u/1504010/wsdl.xml" target="_blank">this WSDL</a> and clicking Generate. Unzip downloaded and you should get fresh generated Xcode project. Open Xcode project and expand <em>Source -&gt; Examples</em>.</p>
<p><img class="aligncenter  wp-image-13501" title="Screen Shot 2012-04-24 at 12.54.58" src="http://inchoo.net/wp-content/uploads/2012/04/Screen-Shot-2012-04-24-at-12.54.58-600x451.png" alt="" width="609" height="486" />As you can see Sudzc has generated all you need to consume SOAP web service, in this case Magento Core API. Find INMagentoService class and there you will see all API methods you can call. In each method you can pass delegate and feedback selector. Below you can see how to retrieve sales orders list.</p>
<pre class="brush: objc; title: ; notranslate">

- (void)salesOrderListCall
{
    INMagentoService* service = [INMagentoService service];

    // Returns NSMutableArray*. Retrieve list of orders by filters
    [service salesOrderList:self
                     action:@selector(salesOrderListHandler:)
                  sessionId:@&quot;&quot;
                    filters:[[INfilters alloc] init]];
}

// Handle the response from salesOrderList.
- (void)salesOrderListHandler: (id) value
{
    // Handle errors
    if([value isKindOfClass:[NSError class]]) {
        NSLog(@&quot;%@&quot;, value);
        return;
    }

    // Handle faults
    if([value isKindOfClass:[SoapFault class]]) {
        NSLog(@&quot;%@&quot;, value);
        return;
    }

    // Do something with the NSMutableArray* result
    NSMutableArray* result = (NSMutableArray*)value;
    NSLog(@&quot;salesOrderList returned the value: %@&quot;, result);
}
</pre>
<p>All API call examples are located in INMagentoServiceExample class. Just copy anything you need from there and paste it to your view controller. Now you are ready to consume SOAP web service in iOS environment.</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/mobile-development/iphone-development/consuming-soap-web-services-in-ios/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Injecting Variables into a Magento CMS static block</title>
		<link>http://inchoo.net/ecommerce/magento/injecting-variables-into-a-magento-cms-static-block/</link>
		<comments>http://inchoo.net/ecommerce/magento/injecting-variables-into-a-magento-cms-static-block/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 09:30:44 +0000</pubDate>
		<dc:creator>Thomas Spigel</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[cms]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13459</guid>
		<description><![CDATA[In this tutorial i&#8217;ll show you how to inject any custom variable you need into a cms static block in place of a {{var variable_name}} tag. You&#8217;ve seen this in &#8230;]]></description>
			<content:encoded><![CDATA[<p>In this tutorial i&#8217;ll show you how to inject any custom variable you need into a cms static block in place of a {{var variable_name}} tag. You&#8217;ve seen this in the email templates if you were working on them (in the matter of fact the model (filter) we&#8217;re calling is extending the same filter the email templates are using for injecting the variables).<span id="more-13459"></span></p>
<p>First, let&#8217;s assume a few things:<br />
1) the package is named &#8216;Company&#8217; and the module is named &#8216;Module&#8217;<br />
2) you know how to make a php module and a new block class. The block&#8217;s alias is in this example &#8216;module/dynamic&#8217;<br />
3) the phtml template for the dynamic block will be dynamic.phtml<br />
4) the block id of the static cms block will be &#8216;static_block&#8217; (and you already created it in the admin)<br />
5) you need to add the email of the current customer to the static block. The logic of when you want to show the block and everything deeper is out of the scope of this document.</p>
<p>First let&#8217;s look @ the phtml file, which only uses the method which we&#8217;ll create afterwards in the block class:</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php if(Mage::getSingleton('customer/session')-&gt;getCustomer()-&gt;getId()) : ?&gt;
	&lt;?php echo $this-&gt;getStaticBlock();?&gt;
&lt;?php endif;?&gt;
</pre>
<p>As you see, we&#8217;re only checking if the customer is set and are getting the static block. So next let&#8217;s see the logic in the dynamic block class:</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * Just another block class
 */
class Company_Module_Block_Dynamic extends Mage_Core_Block_Template
{
	/**
	 * This getter will return the html of your static block
	 * @return string
	 */
	public function getStaticBlock()
	{
		// loading the static block
		$block = Mage::getModel('cms/block')
		-&gt;setStoreId(Mage::app()-&gt;getStore()-&gt;getId())
		-&gt;load('static_block');
		/* @var $block Mage_Cms_Model_Block */

		// setting the assoc. array we send to the filter.
		$array = array();
		// the array keys are named after the tags in the static block. let's say $array['customer_email'] is {{var customer_email}} in the static block. you can set as many variables you need.
		$array['customer_email'] = Mage::getSingleton('customer/session')-&gt;getCustomer()-&gt;getEmail();

		// loading the filter which will get the array we created and parse the block content
		$filter = Mage::getModel('cms/template_filter');
		/* @var $filter Mage_Cms_Model_Template_Filter */
		$filter-&gt;setVariables($array);

		// return the filtered block content.
		return $filter-&gt;filter($block-&gt;getContent());

	}
}
?&gt;
</pre>
<p>Ok. Now enter somewhere in your static_block CMS block the tag {{var customer_email}} (or some other key you added) and it&#8217;ll be dynamically added into CMS block.</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/ecommerce/magento/injecting-variables-into-a-magento-cms-static-block/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Packing bags for Imagine</title>
		<link>http://inchoo.net/fun-zone/imagine-las-vegas-2012/</link>
		<comments>http://inchoo.net/fun-zone/imagine-las-vegas-2012/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 14:32:47 +0000</pubDate>
		<dc:creator>Tomislav Bilic</dc:creator>
				<category><![CDATA[Fun & Events]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[Magento]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13408</guid>
		<description><![CDATA[There are only few hours left to pack the bags, drive to Budapest, than over Amsterdam and Portland arrive to the biggest Magento event of the year &#8211; Imagine conference &#8230;]]></description>
			<content:encoded><![CDATA[<p>There are only few hours left to pack the bags, drive to Budapest, than over Amsterdam and Portland arrive to the biggest Magento event of the year &#8211; Imagine conference in Las Vegas, USA. The conference was sold out months ago, but fortunately the arrival was planned before.<br />
<span id="more-13408"></span><br />
<a href="http://inchoo.net/wp-content/uploads/2012/04/m.jpg"><img src="http://inchoo.net/wp-content/uploads/2012/04/m-300x111.jpg" alt="M Resort Spa Casino" title="M Resort Spa Casino, Las Vegas" width="300" height="111" class="alignright size-thumbnail wp-image-13410" /></a><br />
The hotel M Resort Spa Casino looks awesome. It is fancy, big, has a pool and everything you need. Best of all, it is full. Therefore, some nearby hotels will be required to accommodate everyone interested. </p>
<p>The agenda is rich and divided in three tracks: </p>
<ul>
<li><strong>Technology Track</strong> &#8211; unfortunately, this one is not for me any more. I can&#8217;t myself fully follow programming trends, so I would mostly just blink if I attend these sessions. However, it is good to know that Imagine has a lot of good sessions for developers, and not just business people. I expect Inchoo will have more crew next year. </li>
<li><strong>Business Track</strong> &#8211; is oriented for consultants and merchants</li>
<li><strong> Partner Powered Track </strong> &#8211; will be oriented for partners. I&#8217;m very looking forward to be at Annual Magento Solution Partner Leadership Summit (I just remembered I need to find my invitation).</li>
</ul>
<p><iframe width="620" height="350" src="http://www.youtube.com/embed/YjBh1pSoeuI" frameborder="0" allowfullscreen></iframe></p>
<p>Besides of fun simply by going there, there are some goals I set for myself to achieve at Imagine:</p>
<ol>
<li>For starters, I&#8217;m really looking forward meeting some of our US clients face to face. Skype video call was most advanced form of meetings with them so far. It will be great to shake hands. </li>
<li>Check out and get insight of what X.Commerce really is. I don&#8217;t know about the rest of you guys, but almost a year passed since I heard this term for the first time and I still don&#8217;t know what will it be in reality and what opportunities or threats are there for us. I read that we will have <a href="https://www.x.com/corporate/blog/matthew-mengerink/commerce-revolution-has-just-begun" title="X.Commerce Revolution">a revolution</a>, but even after reading the post, I am not sure where&#8217;s the catch. <img src='http://inchoo.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>Check out where Magento is heading and evaluate how much will it be affected by eBay and the whole X.Commerce thing.</li>
<li>Evaluate Magento&#8217;s strategy for partners.</li>
<li>Reconnect with the guys from other Magento partners like WebShopApps, Blue Acorn, Classy Llamas, Gorilla Commerce and others&#8230; <img src='http://inchoo.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ol>
<p>See you in Vegas. You can reach me via Twitter on https://twitter.com/#!/tomislavbilic or SMS me to +385.91.577.1025.</p>
<p>Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/fun-zone/imagine-las-vegas-2012/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to implement rel=prev and rel=next to Magento&#8217;s pagination?</title>
		<link>http://inchoo.net/ecommerce/magento/how-to-implement-relprev-and-relnext-to-magentos-pagination/</link>
		<comments>http://inchoo.net/ecommerce/magento/how-to-implement-relprev-and-relnext-to-magentos-pagination/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 09:40:58 +0000</pubDate>
		<dc:creator>Vanja Devcic</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13254</guid>
		<description><![CDATA[As most of you know that &#8220;When dealing with online stores with a lot of products, pagination on category pages can get really problematic for search engines&#8221; like Toni Anicic &#8230;]]></description>
			<content:encoded><![CDATA[<p>As most of you know that &#8220;When dealing with online stores with a lot of products, pagination on category pages can get really problematic for search engines&#8221; like Toni Anicic wrote in his <a href="http://inchoo.net/online-marketing/how-do-relnext-and-relprev-work/">article</a>. I don&#8217;t want to repeat his words, but to show you how you can add rel=&#8221;prev&#8221; and rel=&#8221;next&#8221; link tag attributes in the head tag for pages, which will boost your SEO. This peace of code is already provided by Magento community, but this is improved version.<span id="more-13254"></span></p>
<p><strong>Tested in Magento CE 1.6.1.0.</strong></p>
<h3>Implementation</h3>
<p>1. So, if you didn&#8217;t already modified head.phtml file, create identical directory hierarchy and copy/paste head.phtml in your theme or package.</p>
<p>Path example if using package:<br />
..\app\design\frontend\[your_package_name]\default\template\page\html\head.phtml</p>
<p>Path example if using theme:<br />
..\app\design\frontend\default\[your_theme_name]\template\page\html\head.phtml</p>
<p>2. Add code below to head.phtml. I&#8217;ve added code at the bottom of file.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$actionName = $this-&gt;getAction()-&gt;getFullActionName();
if ($actionName == 'catalog_category_view') // Category Page
{
    $category = Mage::registry('current_category');
    $prodCol = $category-&gt;getProductCollection()-&gt;addAttributeToFilter('status', 1)-&gt;addAttributeToFilter('visibility', array('in' =&gt; array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG, Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)));
    $tool = $this-&gt;getLayout()-&gt;createBlock('page/html_pager')-&gt;setLimit($this-&gt;getLayout()-&gt;createBlock('catalog/product_list_toolbar')-&gt;getLimit())-&gt;setCollection($prodCol);
    $linkPrev = false;
    $linkNext = false;
    if ($tool-&gt;getCollection()-&gt;getSelectCountSql()) {
        if ($tool-&gt;getLastPageNum() &gt; 1) {
            if (!$tool-&gt;isFirstPage()) {
                $linkPrev = true;
                if ($tool-&gt;getCurrentPage() == 2) {
                    $url = explode('?', $tool-&gt;getPreviousPageUrl());
                    $prevUrl = @$url[0];
                }
                else {
                    $prevUrl = $tool-&gt;getPreviousPageUrl();
                }
            }
            if (!$tool-&gt;isLastPage()) {
                $linkNext = true;
                $nextUrl = $tool-&gt;getNextPageUrl();
            }
        }
    }
    if ($linkPrev) echo '&lt;link rel=&quot;prev&quot; href=&quot;' . $prevUrl . '&quot; /&gt;';
    if ($linkNext) echo '&lt;link rel=&quot;next&quot; href=&quot;' . $nextUrl . '&quot; /&gt;';
}

?&gt;
</pre>
<h3>Result</h3>
<p>Below is a result if you are on page 3.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;head&gt;
...
&lt;link rel=&quot;prev&quot; href=&quot;http://www.example.com/store.html?p=2&quot;&gt;

&lt;link rel=&quot;next&quot; href=&quot;http://www.example.com/store.html?p=4&quot;&gt;
...
&lt;/head&gt;
</pre>
<h3>Search engine optimization in Magento&#8217;s Configuration</h3>
<p>After implementing rel=&#8221;prev&#8221; and rel=&#8221;next&#8221; you need to re-config Magento&#8217;s SEO options, which means that you don&#8217;t need anymore Canonical Link Meta Tag For Categories. Below is a example how we setup Magento&#8217;s SEO options for one of our clients.</p>
<p><a href="http://inchoo.net/ecommerce/magento/how-to-implement-relprev-and-relnext-to-magentos-pagination/attachment/seo_config/" rel="attachment wp-att-13267"><img class="alignnone size-full wp-image-13267" title="Magento's SEO Config" src="http://inchoo.net/wp-content/uploads/2012/04/seo_config.png" alt="" width="599" height="417" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/ecommerce/magento/how-to-implement-relprev-and-relnext-to-magentos-pagination/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>The Difference</title>
		<link>http://inchoo.net/ecommerce/magento/the-difference-from-denmark-bilvask/</link>
		<comments>http://inchoo.net/ecommerce/magento/the-difference-from-denmark-bilvask/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 17:45:20 +0000</pubDate>
		<dc:creator>Zdravko Karanovic</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[customer care]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[support]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13177</guid>
		<description><![CDATA[Hello Magento community! My name is Zdravko Karanovic and I work as a branch manager and a team leader here at Inchoo office in Serbia. As I am one of &#8230;]]></description>
			<content:encoded><![CDATA[<p>Hello Magento community! My name is Zdravko Karanovic and I work as a branch manager and a team leader here at Inchoo office in Serbia. As I am one of the few Inchooers who doesn&#8217;t code, I don&#8217;t get to write those exciting articles about extending controllers or making cool Magento modules for that latest social network.<br />
<span id="more-13177"></span><br />
As a team leader, my job is mostly of care and worry. I worry about my team, about their time, the work, the projects and their well-being. But most importantly we care about our clients. Here at Inchoo care about the clients and their business is a <strong>BIG</strong> thing. We shape our processes and work ethics around this idea, and that extraordinary care and effort we strive to make is what shaped us and made us into who we are today.</p>
<p>A story that perfectly reflects this attitude towards our clients started out 3 months ago when we were approached by Michael Vilnov from <a title="Bilvask.nu website" href="http://www.bilvask.nu" target="_blank">Bilvask.nu</a> to produce a new custom website for his car detailing company.</p>
<p>After our sales manager <a title="sells Magento, but only if we make it custom and from scratch" href="http://inchoo.net/author/aron/" target="_blank">Aron Stanic</a> won the deal we fired up the project with our marketing guru <a title="A SEO expert walks into a bar, bars, pub, tavern, public house, Irish pub, inchoo, bilvask, magento" href="http://inchoo.net/author/toni/" target="_blank">Toni Anicic</a> doing the wireframes. These were then passed on from Osijek to <a title="can design things not yet invented" href="http://inchoo.net/author/lyssandro-reis/" target="_blank">Lyssandro Reis</a> in Sydney, one of our best designers, with a task to work closely with Michael and produce the design templates. Time zone problems were surpassed and Lyssandro and Michael worked together using video chats and screencasts, almost as they were sitting in the same office.</p>
<p><img src="http://inchoo.net/wp-content/uploads/2012/04/bilvask-screenshot1.jpg" alt="Screenshot from Bilvask.nu website" title="Bilvask.nu Screenshot" width="620" height="451" class="alignright size-full wp-image-13193" />Once finished templates arrived at Novi Sad office, <a title="can spot if something is 0.5 pixels off" href="http://inchoo.net/author/srdjan.stojiljkovic/" target="_blank">Srdjan Stojiljkovic</a>, our frontend developer started to work on his HTML/CSS/JS magic, bringing life into those still Photoshop layers. At the same time <a title="will break Magento in ways never imagined" href="http://inchoo.net/author/nikola.stojiljkovic/" target="_blank">Nikola Stojiljkovic</a>, Srdjan&#8217;s brother and our backend developer was bending Magento to his own will, customizing it to serve our clients needs, as if the framework was tailored for them only.</p>
<p>Here is a short list of custom features we developed for Bilvask specific needs:</p>
<ul>
<li>backend controlled home page slider module</li>
<li>extensive contact form module, with backend control</li>
<li>customer uploaded images, backend control – with preview, and mass actions</li>
<li>AJAX top cart</li>
<li>custom main menu with dynamic content from static blocks</li>
<li>guide pages with integrated products</li>
<li>custom product reviews</li>
<li>split attributes for products</li>
<li>shipping quotes in customer cart page</li>
<li>custom sidebar for categories and sub categories</li>
<li>split descriptions for category pages</li>
</ul>
<p>Although we don&#8217;t like to use 3rd party extensions, client used quite a few of them, and we made sure they all played nicely with each other:</p>
<ul>
<li>Woopra Live Chat</li>
<li>J2T AJAX Add to Cart</li>
<li>One Step Checkout</li>
<li>Sweet Tooth Reward Points</li>
<li>Post Denmark</li>
<li>e-pay</li>
<li>schema org, Facebook Open Graph</li>
<li>Video Gallery</li>
</ul>
<p>So, did it end well? Did we surpass language barriers, conquered the timezones, and avoided extension pits with sharp spikes?</p>
<p>We approached Michael as he is the only one entitled to answer that question. When we asked him to write a short testimonial, he felt a need to go a step further and wrote up a review on his experience working with us from start to finish, explaining along the way our methodologies and work ethics.</p>
<p>Here is what he had to say:</p>
<h3>The difference between A: doing a job and B: doing a perfect job.</h3>
<div style="float:right; border:1px solid #84994A; background:#fff; margin:5px"><img alt="Michael Vilnov from Bilvask" src="http://www.bilvask.nu/media/MIchael-Vilnov.jpg" title="Michael Vilnov" class="alignright" width="200" height="277" style="margin:5px;" /></div>
<p>Our company <a title="Bilvask.nu website" href="http://www.bilvask.nu" target="_blank">Bilvask.nu</a>, is a Danish based Car detailing company with a webshop selling high-end car care equipment. Our daily work with luxury cars always requires a strong founded feeling of quality towards our work every single time. This being in all aspects of our relations, towards our clients, suppliers and partners.</p>
<p>However, on the IT development side of business, we’ve always had problems finding the same passion for reaching the ultimate result of perfection and customer service.</p>
<p>We stumbled upon Inchoo after searching for a solution partner for our new Magento store. We had been in the online business for a few years, and were now in the marked for a 100% custom made Magento store &#8211; to our exact specifications.</p>
<p>We chose Inchoo to make our new shop / website, because of several factors. The fact that they had <a title="Magento Silver Partners" href="http://www.magentocommerce.com/partners/details/partner/id/2465/" target="_blank">Magento Silver Partner Status</a>, and at the same time they had several employees Magento certified. This made Inchoo a trustworthy partner from the get go.</p>
<p>Starting at the first contact, working with Inchoo as a supplier of Magento web solutions have been a pure pleasure.</p>
<h4>First Contact, pre-work process</h4>
<p>First contact was replied fast, yet thoughtful. There was no sense of rush, yet a sense that the company didn&#8217;t just send you a standard email-answer, because of lack of time. The answer was prompt, and revealed a serious attitude towards taking care of other peoples business, other peoples livelihood.</p>
<p>The sketch up of the budget and site outline was made in due time, described in detail, nothing left out.<br />
Inchoo didn&#8217;t seem to be to interested in ”fitting” our budget, but more interested in giving a realistic price of the task as they saw it carried out in best practice.<br />
The initial offer Inchoo gave us was outlined as a best case, worst case and realistic case scenarios, with pricing for all the various turn of events.<br />
We’ve yet to see a better written partnership contract anywhere, and we’ve contacted a few before making our choice. The offer as well as fast contact made us confident in our choice, Inchoo was the company to go with.</p>
<h4>The actual work process</h4>
<p>Inchoo works within an agile project planning strategy &#8211; meaning, that all aspects of the shop build can be changed until a certain time of any process. This gives great opportunities to change elements as the build moves along, as there will always be aspects of a project this size, that will be able to be optimized as work goes deeper into details. Flaws are ironed as the work progresses, mistakes are caught, better and easier solutions are found along the way.</p>
<p>Inchoo’s way of leading us through the process of the build, with specialists on each phase:</p>
<ul>
<li>Wireframing phase</li>
<li>Design phase</li>
<li>Development phase</li>
<li>Launch phase</li>
<li>Aftercare phase</li>
</ul>
<p>This left us with a sense of constantly being in touch with the right people, who could give the feedback needed. We have at no point in the build been in doubt of who to contact, and the person who we wished to contact was never too busy to answer the phone, skype or email.</p>
<p>When making a project that lasts for several months, flaws will occur. Its humanly impossible to run a marathon without putting a foot wrong. Especially here, I think Inchoo showed the proper professionalism not trying to hide, cover or in any way make up excuses for time or progress being set back. Problems where explained and then dealt with, in fast and efficient manner.<br />
When all things are good, its easy to pad each other on the back and say great work, but when problems occur, this is when true work ethics show.</p>
<h4>Launch</h4>
<p>3 months after the first contact we had our launch. Minor bugs where taken care of in a fast and efficient manner. At no point have we experienced that our development team moved on to new projects. They are still as accessible as they where during our work process.</p>
<h4>Aftercare</h4>
<p>At the current time, it is difficult for us to value the aftercare that Inchoo offers, but rest a sure if it&#8217;s anything like what we’ve have experienced so far, and I cant wait to continue working with them in the future.</p>
<p>There is no doubt in my mind, that I will stick with the development team to continue creating a further success with our webshop.</p>
<p>To all of Inchoo – Thank you guys for a wonderful experience in work ethics.</p>
<p>It&#8217;s been a pure pleasure.</p>
<p>Michael Vilnov Hansen<br />
CEO<br />
<a title="Bilvask.nu website" href="http://www.bilvask.nu" target="_blank">Bilvask.nu</a></p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/ecommerce/magento/the-difference-from-denmark-bilvask/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Magento certification cheat sheet revealed!</title>
		<link>http://inchoo.net/ecommerce/magento/magento-certification-cheat-sheet-revealed/</link>
		<comments>http://inchoo.net/ecommerce/magento/magento-certification-cheat-sheet-revealed/#comments</comments>
		<pubDate>Sun, 01 Apr 2012 06:55:23 +0000</pubDate>
		<dc:creator>Aron Stanic</dc:creator>
				<category><![CDATA[Fun & Events]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[april1]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[cheat sheet]]></category>
		<category><![CDATA[magento certification]]></category>
		<category><![CDATA[magento certified developer]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13049</guid>
		<description><![CDATA[After a joint effort of 42 developers worldwide who took the Magento Certified Developer exam over the last 12 weeks, we bring you the ultimate cheat sheet for getting certified &#8230;]]></description>
			<content:encoded><![CDATA[<p>After a joint effort of 42 developers worldwide who took the <strong>Magento Certified Developer</strong> exam over the last 12 weeks, we bring you the ultimate cheat sheet for getting certified &#8211; with a 100% pass rate guaranteed!<span id="more-13049"></span></p>
<p>&#8212;&#8212;</p>
<p><strong>EDIT:</strong> <em>This was, as most of you accurately guessed, an April Fools&#8217; Day joke. Thanks to everyone who joined in with their comments and for keeping the joke alive for some extra hours last Sunday &#8211; it was a rather obvious one (after all, who would simply share a cheat sheet, right? <img src='http://inchoo.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ), but we thought it would give you a couple of laughs. Happy certification, everyone!!!</em></p>
<p>&#8212;&#8212;</p>
<p>Here at Inchoo we have always taken pride in <a title="Marketing by sharing" href="http://inchoo.net/ecommerce/marketing-by-sharing/" target="_blank">sharing our knowledge</a> of Magento with the rest of the community, so this is only a continuation of a long-lasting tradition.</p>
<p>There&#8217;s been quite a few articles written on the whole certification process, one of the most recent ones being Ben Marks of Blue Acorn <a title="Ben Marks on Magento certification" href="http://www.blueacorn.com/magento-blog/certifiably-magento/" target="_blank">sharing his thoughts on how to become certified</a> - but this &#8211; this is something completely different!</p>
<p>We have <a title="Magento Certified Developers at Inchoo" href="http://inchoo.net/services/magento-development/" target="_blank">4 certified developers</a> today (haven’t used the cheat sheet ourselves yet), and with the results of our recent investigation (and with special thanks to all of you guys out there who were flunking the tests only to get us this invaluable info), there’s much more to come from us, and hopefully from all of you, our loyal readers and followers.</p>
<p>Have you just started poking around Magento but find it a bit overwhelming to pass the exam?</p>
<p>Or are you a Magento Solution Partner with little to none dedicated Magento developers, paying for your partner status simply because you can and outsourcing the development to other companies? You were probably worried when Magento announced you’ll need to have certified developers on board &#8211; well, worry no more &#8211; with our ultimate cheat sheet you can have your community managers pass the exam in their first try! Add a couple more people to the mix and you’re golden!</p>
<h3>Discovering the patterns</h3>
<p>This cheat sheet was prepared after we gathered the details about questions from 42 exams taken worldwide (it took quite an effort getting all these developers sneak in those mini cameras to capture the questions). Not in our wildest dreams did we expect to find clear answer patterns.</p>
<p>You can imagine our surprise when our consulting partner, a tenured professor at the University of Osijek’s <a title="Math Department" href="http://www.mathos.hr/en/" target="_blank">Department of Mathematics</a>, told us that to a math-trained eye the answer patterns were so obvious it would take a high-school graduate several hours to understand them and pass this exam.</p>
<p>The exam apparently uses one of the most common math concepts &#8211; prime numbers &#8211; as the pattern to answering the questions correctly.</p>
<p>How come this was missed by the <a href="http://www.magentocommerce.com/certification/board">Magento Certification Board</a>, you may ask? Well, call us conspiracy theorists if you will, but this can’t be a pure coincidence, so we somehow feel this was done on purpose, to allow the developers around their companies (who have the inside info) to pass the certification with flying colors.</p>
<p>Well, guys &#8211; <strong>the jig is up</strong>! Now everyone can become a Magento Certified Developer, and here’s how:</p>
<h3>What do you need to pass the exam?</h3>
<h4>1. Exam voucher number</h4>
<p>You have to <a href="http://www.magentocommerce.com/certification/">purchase a voucher</a> to be able to register for the exam, so once you make the purchase, you will get what appears to be a randomly generated voucher number, but what it actually represents is the first clue, or the key to solving the test, even if you have virtually no prior Magento experience.<img class="alignleft size-full wp-image-13055" title="voucher_magento" src="http://inchoo.net/wp-content/uploads/2012/03/voucher_magento.png" alt="" width="609" height="152" /></p>
<p>The last digit on the voucher number is the one that’s going to help you pass as it will correspond to the actual exam you’ll be solving. It contains the hidden answer to the first exam question and after that it’s all a smooth ride. It’s all explained in detail in the actual cheat sheet below.</p>
<h4>2. Prime numbers</h4>
<p>Well, you probably remember all about the prime numbers from your math class, right? I thought so &#8211; in a nutshell, a prime number is the one that only has two divisors &#8211; number 1 and itself &#8211; so, prime numbers are 2,3,5,7,11,13,&#8230; the list goes on indefinitely (but you’ll only need first seven primes to pass the exam).</p>
<p><img class="alignleft size-full wp-image-13058" title="prime_numbers_article" src="http://inchoo.net/wp-content/uploads/2012/03/prime_numbers_article.png" alt="" width="609" height="161" /></p>
<p>And that’s all the info you need &#8211; so, how does this actually help? Using your unique voucher number and primes with a little help from the cheat sheet, you can get all the answers right.</p>
<h3>The cheat sheet revealed</h3>
<p>So, without further ado, the cheat sheet together with instructions can be downloaded right here.</p>
<h4><a title="Magento Certified Developer exam cheat sheet" href="http://inchoo.net/wp-content/uploads/2012/03/MCD_Cheat_Sheet.pdf" target="_blank">Download the Magento Certified Developer exam cheat sheet!</a></h4>
<p>We actually gave this cheat sheet to one of the developers who initially flunked the test, and she was happy to share her thoughts for this article:</p>
<blockquote><p>“<em>Guys &#8211; this is incredible! Works like a charm! Ok, there was quite a bit of counting involved, but it also helps you not to look suspicious finishing the test too quickly. I deliberately answered several questions wrong and passed with a stunning <strong>64/70</strong> score! Thanks a lot for the cheat sheet, and I can only hope more people will benefit from this! Love Magento, love the community!</em>”</p></blockquote>
<p><strong><em>April Første, Magento Certified Developer (Denmark)</em></strong></p>
<p>So, there you go &#8211; what are you waiting for? Get Magento certified! And yes, you&#8217;re welcome! <img src='http://inchoo.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/ecommerce/magento/magento-certification-cheat-sheet-revealed/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Marketing by sharing</title>
		<link>http://inchoo.net/ecommerce/marketing-by-sharing/</link>
		<comments>http://inchoo.net/ecommerce/marketing-by-sharing/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 09:43:43 +0000</pubDate>
		<dc:creator>Sanja Martinovic</dc:creator>
				<category><![CDATA[E-Commerce]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Online Marketing]]></category>
		<category><![CDATA[37signals]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[magento community]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[marketing by sharing]]></category>

		<guid isPermaLink="false">http://inchoo.net/?p=13023</guid>
		<description><![CDATA[Inchoo blog is very popular within Magento community. We get feedback from a lot of people who are interested in Magento or are Magento developers saying our blog is a &#8230;]]></description>
			<content:encoded><![CDATA[<p dir="ltr">Inchoo blog is very popular within Magento community. We get feedback from a lot of people who are interested in Magento or are Magento developers saying our blog is a very useful learning tool for them. Although it is very natural for us to share our knowledge, we noticed there are not a lot of companies that feel free enough to do so. For us, it is important to share with Magento community what we’ve learned as it can help others with their work and also be very helpful for us to get feedback so we deliver better solutions to our clients.<span id="more-13023"></span></p>
<p dir="ltr">The concept of open communication of sharing the way you work with your customers and clients is called Marketing by sharing. It’s first mentioned by Jason Fried who is the co-founder and President of <a href="http://37signals.com/">37signals</a>.</p>
<p dir="ltr">But you need to know how to do it well and to show great respect to your readers and potential customers. Also be careful not to show any disrespect to your clients. Of course, you can’t share everything and you should think of your strategy and channels of sharing.</p>
<p dir="ltr"><strong>Here are some tips from our experience on how to be a good marketer of sharing.    </strong></p>
<h3>1. Get to know your key competences so you know what and how to share</h3>
<p>You can’t mix and offer everything your business includes and deals with, since it might not be interesting and helpful to your readers as you may think. You are not forced to tell people everything your business works on, but you want to help them understand and want your products and services. Be aware of yourself and your business and learn what are your strengths that are worth talking about.</p>
<h3>2. Empower learning in organization</h3>
<p>Don&#8217;t do that just because its trendy to say you are a (lifelong) learning organization, but because you really aim for self-improvement and team growth. Let your employees see their job positions as platforms to develop themselves.</p>
<h3>3. Be unique, be worth coming back to</h3>
<p dir="ltr">Be consistent in delivering your promises by delivering only quality solutions (knowledge). You don’t want to share something that could be easily found by Google &#8211; but you want to be easily found by Google <img src='http://inchoo.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Build your type of knowledge sharing as something that could grow to be a positive habit of your customers, readers and community.</p>
<h3>4. Don’t forget all about it when your business is enjoying prosperity</h3>
<p dir="ltr">Knowledge sharing is about creating respectful relationships with your customers and people that want to listen to you. Don’t forget about them when you fulfil your initial goals. You might not get a second chance to be listened to.</p>
<h3>5. Remember that those who actually have a lot of knowledge are not afraid of using it</h3>
<p>Knowledge is the only resource that grows by sharing, so don’t be afraid of the opportunities to become better. If your company really has a lot of knowledge that can serve to others and eventually be sold through your products and services, you won’t even think of hiding it. If you really care (as you probably say you do), you will gladly involve customers and community in the life of your company, as your products and services are targeted at them. You will listen to them because they will be more than happy to tell you what you can do for them.</p>
<p dir="ltr"><strong>Don’t hesitate. Go market by sharing.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://inchoo.net/ecommerce/marketing-by-sharing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.588 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-22 17:26:27 -->

