<![CDATA[Magento Help]]> http://magentist.com/magento_help/ Thu, 09 Feb 2012 06:53:32 +0000 Zend_Feed http://blogs.law.harvard.edu/tech/rss <![CDATA[The only Magento Checkout Extension that's worth your while]]> http://magentist.com/magento_help/magento-checkout-extensions/
The problem is that most checkout extensions are actually harmful to conversion rates and checkout usability. Except for one!

All Magento checkout extensions I've seen out there are very bad in terms of load speed, conversions, and stability.

Don't combine checkout steps into a single crowded step

First of all I have no idea why but all checkout extensions I've ever seen combine the checkout steps into a crowded 3-column design and promote this as if it's a positive thing.

Here's a screenshot taken from one such extension to illustrate what I mean:

Magento Checkout Extensions

Even the savviest users get confused with such a layout! Not to mention most internet shoppers eager to complete their purchase quickly and move on. I mean - which fields are you supposed to fill out first? Why are there so many options everywhere? It's really overwhelming - especially if you're just buying a shirt or a pair of shoes!

There are a ton of checkout extensions but somehow they all combine all checkout steps into one crowded page with 3 columns. It doesn't get any worse in terms of usability and conversions!

Don't overwrite Magento's functionality

These extensions also completely overwrite Magento's checkout functionality which is a big no no in terms of upgade-ability, stability and security.

What that means is that you'll run into countless issues and problems with new Magento verions, and other 3rd party extensions (such as payment methods, shipping methods, etc).

Don't weigh down your checkout page

In addition these extensions add their own style files, template files, and layout files to the checkout page which will affect load speed and page performance - actually slowing down the most important page of an online store!

Don't trust anything but numbers

If you're trying out a Magento checkout extension, you should make sure to test conversion rates with A/B testing (you can use Google Website Optimizer for that if you want a free and quick implementation). One company did test conversion rates and saw a huge decrease in conversion rates when compared to the original Magento checkout process!

Well, that's expected to anyone with any sense of design and usability.

Look for an alternative

You can stick with the native Magento checkout functionality and that's fine. Except for the very first step which is very confusing to users:

Magento Checkout

Fortunately this first step can be easily and seamlessly removed with the Optimized Checkout Extension without affecting any of the checkout functionality and all its possible scenarios.

If you want users to sign up for your newsletter at checkout you can incorporate this very simple extension which adds a newsletter check-box with a bunch of possible scenarios you can configure in the admin.

Links mentioned in this post:


Cross posted from Noam Design.]]>
Sun, 23 Oct 2011 20:56:32 +0000
<![CDATA[Google Analytics Tracking Bugs]]> http://magentist.com/magento_help/magento-google-analytics-issues/
Here's a quick way to fix these issues (Magento CE 1.5.1):

In Magento, the file responsible for parsing the Google Analytics code is located here:

app/code/core/Mage/GoogleAnalytics/Block/Ga.php
Scroll down to line 142 and you'll see the function that renders Google Analytic tracking scripts:

    /**
     * Render GA tracking scripts
     *
     * @return string
     */
    protected function _toHtml()
    {
        if (!Mage::helper('googleanalytics')->isGoogleAnalyticsAvailable()) {
            return '';
        }
        $accountId = Mage::getStoreConfig(Mage_GoogleAnalytics_Helper_Data::XML_PATH_ACCOUNT);
        return '
<!-- BEGIN GOOGLE ANALYTICS CODE -->
<script type="text/javascript">
//<![CDATA[
(function() {
var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;
ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';
(document.getElementsByTagName(\'head\')[0] || document.getElementsByTagName(\'body\')[0]).appendChild(ga);
})();

var _gaq = _gaq || [];
' . $this->_getPageTrackingCode($accountId) . '
' . $this->_getOrdersTrackingCode() . '
//]]>
</script>
<!-- END GOOGLE ANALYTICS CODE -->';
    }
}
First of all we can see that the order of the script is not correct - the function should come after the variables and not the other way around. Second, the last line in the function differs from Google Analytics' instructions. After fixing these 2 issues, we get the following function:

    /**
     * Render GA tracking scripts
     *
     * @return string
     */
    protected function _toHtml()
    {
        if (!Mage::helper('googleanalytics')->isGoogleAnalyticsAvailable()) {
            return '';
        }
        $accountId = Mage::getStoreConfig(Mage_GoogleAnalytics_Helper_Data::XML_PATH_ACCOUNT);
        return '
<!-- BEGIN GOOGLE ANALYTICS CODE -->
<script type="text/javascript">
//<![CDATA[
var _gaq = _gaq || [];
' . $this->_getPageTrackingCode($accountId) . '
' . $this->_getOrdersTrackingCode() . '

(function() {
var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;
ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';
var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s);
})();
//]]>
</script>
<!-- END GOOGLE ANALYTICS CODE -->';
    }
}
That should already fix most issues. Except for one:

Tracking across sub domains

If your Magento store runs across multiple sub domains, you'll experience problems with Google Analytics tracking because Magento is not prepared for such scenarios.

So for example if your secure pages are set on a sub domain (such as secure.mydomain.com for example) while your unsecure pages use the main URL (such as mydomain.com), you will encounter several issues with Google Analytic tracking.

To fix this problem we need to do 2 things - first we need to add this line to the Google Analytics script:

_gaq.push(["_setAllowHash", false]);
And second we need to set the domain name. For this let's create a small function that will strip the main domain from the sub domains:

	/**
	 * Added to fix cross sub-domain tracking issue
	 */
	public function getDomainName()
	{
	$removepre = array ("http://","/","www","secure");
	if (!$this->hasData('domain_name')) {
		$this->setDomainName(str_replace($removepre, "", Mage::getBaseUrl()));
	}
	return $this->getData('domain_name');
	} 
Note that in this case I included "www" and "secure" to be removed but you should list there all the prefixes of the sub domains you are using (i.e. "store", "webshop", etc).

We can now use this function in the Google Analytics script like so:

_gaq.push(["_setDomainName", "' . $this->getDomainName() . '"]);
The end result is simple - the native "Render GA tracking scripts" Magento function should be replaced by the following:

	/**
	 * Added to fix cross sub-domain tracking issue
	 */
	public function getDomainName()
	{
	$removepre = array ("http://","/","www","secure");
	if (!$this->hasData('domain_name')) {
		$this->setDomainName(str_replace($removepre, "", Mage::getBaseUrl()));
	}
	return $this->getData('domain_name');
	} 

    /**
     * Render GA tracking scripts
     *
     * @return string
     */
    protected function _toHtml()
    {
        if (!Mage::helper('googleanalytics')->isGoogleAnalyticsAvailable()) {
            return '';
        }
        $accountId = Mage::getStoreConfig(Mage_GoogleAnalytics_Helper_Data::XML_PATH_ACCOUNT);
        return '
<!-- BEGIN GOOGLE ANALYTICS CODE -->
<script type="text/javascript">
//<![CDATA[
var _gaq = _gaq || [];
' . $this->_getPageTrackingCode($accountId) . '
_gaq.push(["_setDomainName", "' . $this->getDomainName() . '"]);
_gaq.push(["_setAllowHash", false]);
' . $this->_getOrdersTrackingCode() . '

(function() {
var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;
ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';
var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s);
})();
//]]>
</script>
<!-- END GOOGLE ANALYTICS CODE -->';
    }
}
That's it ;).

To not overwrite the core Ga.php file, you can either copy it over to the local folder and make the changes there, or create an extension to overwrite the block - sorry I don't have time to do it right now but I could if I get enough requests ;).

For reference here's the entire Ga.php file with the changes discussed above:

<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category    Mage
* @package     Mage_GoogleAnalytics
* @copyright   Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
* @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*/


/**
* GoogleAnalitics Page Block
*
* @category   Mage
* @package    Mage_GoogleAnalytics
* @author     Magento Core Team <core@magentocommerce.com>
*/
class Mage_GoogleAnalytics_Block_Ga extends Mage_Core_Block_Text
{
    /**
     * @deprecated after 1.4.1.1
     * @see self::_getOrdersTrackingCode()
     * @return string
     */
    public function getQuoteOrdersHtml()
    {
        return '';
    }

    /**
     * @deprecated after 1.4.1.1
     * self::_getOrdersTrackingCode()
     * @return string
     */
    public function getOrderHtml()
    {
        return '';
    }

    /**
     * @deprecated after 1.4.1.1
     * @see _toHtml()
     * @return string
     */
    public function getAccount()
    {
        return '';
    }

    /**
     * Get a specific page name (may be customized via layout)
     *
     * @return string|null
     */
    public function getPageName()
    {
        return $this->_getData('page_name');
    }

    /**
     * Render regular page tracking javascript code
     * The custom "page name" may be set from layout or somewhere else. It must start from slash.
     *
     * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiBasicConfiguration.html#_gat.GA_Tracker_._trackPageview
     * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApi_gaq.html
     * @param string $accountId
     * @return string
     */
    protected function _getPageTrackingCode($accountId)
    {
        $pageName   = trim($this->getPageName());
        $optPageURL = '';
        if ($pageName && preg_match('/^\/.*/i', $pageName)) {
            $optPageURL = ", '{$this->jsQuoteEscape($pageName)}'";
        }
        return "
_gaq.push(['_setAccount', '{$this->jsQuoteEscape($accountId)}']);
_gaq.push(['_trackPageview'{$optPageURL}]);
";
    }

    /**
     * Render information about specified orders and their items
     *
     * @link http://code.google.com/apis/analytics/docs/gaJS/gaJSApiEcommerce.html#_gat.GA_Tracker_._addTrans
     * @return string
     */
    protected function _getOrdersTrackingCode()
    {
        $orderIds = $this->getOrderIds();
        if (empty($orderIds) || !is_array($orderIds)) {
            return;
        }
        $collection = Mage::getResourceModel('sales/order_collection')
            ->addFieldToFilter('entity_id', array('in' => $orderIds))
        ;
        $result = array();
        foreach ($collection as $order) {
            if ($order->getIsVirtual()) {
                $address = $order->getBillingAddress();
            } else {
                $address = $order->getShippingAddress();
            }
            $result[] = sprintf("_gaq.push(['_addTrans', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s']);",
                $order->getIncrementId(), Mage::app()->getStore()->getFrontendName(), $order->getBaseGrandTotal(),
                $order->getBaseTaxAmount(), $order->getBaseShippingAmount(),
                $this->jsQuoteEscape($address->getCity()),
                $this->jsQuoteEscape($address->getRegion()),
                $this->jsQuoteEscape($address->getCountry())
            );
            foreach ($order->getAllVisibleItems() as $item) {
                $result[] = sprintf("_gaq.push(['_addItem', '%s', '%s', '%s', '%s', '%s', '%s']);",
                    $order->getIncrementId(),
                    $this->jsQuoteEscape($item->getSku()), $this->jsQuoteEscape($item->getName()),
                    null, // there is no "category" defined for the order item
                    $item->getBasePrice(), $item->getQtyOrdered()
                );
            }
            $result[] = "_gaq.push(['_trackTrans']);";
        }
        return implode("\n", $result);
    }

	/**
	 * Added by noam to fix cross sub-domain tracking issue
	 */
	public function getDomainName()
	{
	$removepre = array ("http://","/","get","secure");
	if (!$this->hasData('domain_name')) {
		$this->setDomainName(str_replace($removepre, "", Mage::getBaseUrl()));
	}
	return $this->getData('domain_name');
	} 

    /**
     * Render GA tracking scripts
     *
     * @return string
     */
    protected function _toHtml()
    {
        if (!Mage::helper('googleanalytics')->isGoogleAnalyticsAvailable()) {
            return '';
        }
        $accountId = Mage::getStoreConfig(Mage_GoogleAnalytics_Helper_Data::XML_PATH_ACCOUNT);
        return '
<!-- BEGIN GOOGLE ANALYTICS CODE -->
<script type="text/javascript">
//<![CDATA[
var _gaq = _gaq || [];
' . $this->_getPageTrackingCode($accountId) . '
_gaq.push(["_setDomainName", "' . $this->getDomainName() . '"]);
_gaq.push(["_setAllowHash", false]);
' . $this->_getOrdersTrackingCode() . '

(function() {
var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;
ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';
var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s);
})();
//]]>
</script>
<!-- END GOOGLE ANALYTICS CODE -->';
    }
}
Hope this helps someone!]]>
Wed, 22 Jun 2011 16:06:49 +0000
<![CDATA[New Products Currency Switcher Bug]]> http://magentist.com/magento_help/new-products-currency-switcher-homepage-bug-patch/ Magento bug involving the currency switcher while working on a site for a client. The currency switcher was enabled and working perfectly everywhere on the site except the home page. Any products shown on the homepage (such as in a New Products block or widget) remained in the original currency.

After a bit of digging, I realized it was a cache issue, since disabling Magento's "Blocks HTML output" cache brought the currency switcher's full functionality back to life. It seems the products on the homepage were being cached as a part of the home HTML block, and therefor did not change with the currency switcher.

Of course, it's best to leave Magento's "Blocks HTML output" cache enabled to improve site performance. So what's the fix? Add a "cache_lifetime" node on your new products block and set it to the minimum allowed (1 second). In the end, your block code should look something like this:

{{block type="catalog/product_new" name="home.catalog.product.new" alias="product_homepage" template="catalog/product/new.phtml" _productsCount="8" cache_lifetime="1"}}
This will effectively keep the New Products block un-cached while safely keeping all other HTML block elements cached as usual. And if this issue is fixed in a future release of Magento, this fix can easily be removed by simply deleting the cache_lifetime="1" from your code!]]>
Wed, 25 May 2011 03:24:11 +0000
<![CDATA[Upgrading To Magento 1.4.2]]> http://magentist.com/magento_help/upgrading-to-magento-1-4-2/ Magento 1.4.2 has just been released! The bad news is that upgrades commonly create new problems with Magento themes that worked just fine on older installations. Fortunately, we're here to shed some light on the most common of these problems.

If you're like us and many others, after upgrading to Magento 1.4.2, your site returns an error starting with something like this:

a:5:{i:0;s:69:"Invalid method Mage_Wishlist_Block_Links::addWishlistLink(Array
(
)
)";i:1;s:2313:"#0 [internal function]: Varien_Object->__call('addWishlistLink', Array)
This error is caused by a change in the way the Wishlist is set up. Fortunately, the fix is very simple:

The Fix:
1. Open the file /app/design/frontend/default/your-theme/layout/wishlist.xml

2. Find this:
<reference name="top.links">
    <block type="wishlist/links" name="wishlist_link">
         <action method="addWishlistLink"></action>
    </block>
</reference>
3. Replace that code with this:
<reference name="top.links">
    <block type="wishlist/links" name="wishlist_link"/>
    <action method="addLinkBlock"><blockName>wishlist_link</blockName></action>
</reference>
4. Save and upload the file, then refresh Magento's cache via System > Cache Management

That's it! Of course, some custom templates may pose individual challenges not covered by this post, so if you have further difficulty with your upgrade, go to Magento Expert and get quick answers to your Magento questions from real Magento experts!]]>
Sat, 11 Dec 2010 02:44:28 +0000
<![CDATA[Display More Than 5 New Products]]> http://magentist.com/magento_help/display-more-than-five-new-products/ New Products block in a Magento CMS page, such as your homepage, the default number of products that will be displayed is 5.

This works great for the standard Magento templates, but if you have a template that has room for more than 5 products in your New Products feed, you'll notice that it stops at 5 and leaves the rest of the block empty.

You may have seen a fix for this that requires you to locate Magento core files, copy them to a local folder, and edit the default New Products count, but there's a much simpler, and much faster way to accomplish this.

Say, for instance, there were room for a grid of 9 products on a New Products block. Just add _productsCount="9" to the block code so that it looks something like this:

{{block  type="catalog/product_new" name="home.catalog.product.new"  alias="product_homepage" template="catalog/product/new.phtml"  _productsCount="9"}}
Voilà! No need to edit backend files, no risk of ruining your Magento installation; just quick, simple, and easily editable. Enjoy!]]>
Fri, 06 Aug 2010 16:36:28 +0000
<![CDATA[Layered Navigation Drop-Down]]> http://magentist.com/magento_help/magento-layered-navigation-drop-down/ layered navigation in Magento is a powerful tool that allows customers the convenience of filtering the catalog by filterable product attributes such as price range, color, etc. This is a great way to increase sales by making it easier for customers to find what they want, faster.

A common drawback to this feature is that catalogs with many attributes and attribute sets will generate a very long list in the layered navigation. Many Magento ecommerce shop owners would rather use this space to add callouts for advertisements or sales promotions, but they don't want to lose the powerful functionality that comes with the layered navigation.

An excellent solution to condense the space occopied by the layered navigation is to convert each list of attribute options into a drop-down menu. This will preserve the powerful functionality of the layered navigation while allowing you more vertical space in your sidebar, and even making the layered navigation options more readable. The result should look like this:



Making this change is quick and simple. First, open the file /app/design/frontend/default/your-magento-template/template/catalog/layer/filter.phtml For Magento templates that do not have this file, you may simply create the file at the specified location. Then, replace the content of this file with the following code:

<select onchange="setLocation(this.value)">
<option value=""><?php echo 'Choose an Option...' ?></option>
<?php foreach ($this->getItems() as $_item): ?>
<option
<?php if ($_item->getCount() > 0): ?>
value="<?php echo $this->urlEscape($_item->getUrl()) ?>"><?php echo $_item->getLabel() ?>
<?php else: echo '>' . $_item->getLabel() ?>
<?php endif; ?>
(<?php echo $_item->getCount() ?>)
</option>
<?php endforeach ?>
</select>
As always, after editing any PHTML file in your Magento template, don't forget to refresh Magento's cache via System > Cache Management to see your changes.

To learn more about the Magento Layered Navigation, check out this Magento Screencast

]]>
Tue, 03 Aug 2010 17:56:00 +0000
<![CDATA[Change Your Template's Favicon]]> http://magentist.com/magento_help/change-magento-template-favicon/ Magento template! You know that icon next to the URL in your browser window? You can easily change it from the default Magento logo to your company's logo by following these steps:

1. Create a 16 x 16 pixel image of the icon you wish to use and save it as a GIF or PNG file.
2. Rename your image "favicon.ico" - eliminating the ".gif" or ".png" extension.
3. Upload your favicon file to /skin/frontend/default/your-template/favicon.ico
4. Refresh Magento's cache via System > Cache Management.

That's it! Now you can more fully enjoy the customization and uniquely branded feel of your Magento template!]]>
Tue, 20 Jul 2010 22:46:17 +0000
<![CDATA[Magento Coupon Codes & Price Rules]]> http://magentist.com/magento_help/magento-coupon-codes-price-rules/ Magento has a great built-in feature for sales and promotional prices. Ever notice the discount coupon code field in the shopping cart of your Magento ecommerce website? That's just one example of the great price rule tools Magento has to offer.

This can be a great way to implement store-wide sale discounts without having to manage every product's price individually. Or you can create conditional price-driven marketing like "2-for-1" specials or "buy x and get y half-off" promotions. It can also be a great way to target customer groups with exclusive coupon codes.

There are two types of price rules in Magento: Catalog Price Rules and Shopping Cart Price Rules. Catalog Price Rules are implemented into product price before they are added to the cart, while Shopping Cart Price Rules are applied in the shopping cart.

To create a new Catalog Price Rule, navigate to Promotions > Catalog Price Rules and select Add New Rule. Enter the rule's basic information, conditions, and actions; then click Save Rule. For more information on creating Catalog Price Rules, check out this article from the Magento Wiki: Catalog Price Rules

The other kind of price rule is the Shopping Cart Price Rule, which is applied at the shopping cart. This type of rule can work with or without a coupon code. To create a new Shopping Cart Price Rule, navigate to Promotions > Shopping Cart Price Rules and select Add New Rule. Enter the rule's basic information, conditions, and actions; then click Save Rule. For more information on creating Catalog Price Rules, check out this article from the Magento Wiki: Shopping Cart Price Rules

If you need more help, check out Magento Expert to get quick answers to your Magento questions for free!]]>
Wed, 14 Jul 2010 18:04:16 +0000
<![CDATA[Change Magento's Default Logo]]> http://magentist.com/magento_help/change-magento-default-logo/ Magento store that Magento's logo is used as the default logo. A lot of people find this logo image in the default template folder under images/logo.gif and just write over it with their own logo image; but is there a better, more proper way to do this?

What if you want to name your logo image something other than "logo?" Or use a JPG or PNG instead of a GIF? Or what if you want to keep your logo image in a different folder?

Magento actually lets you specify the logo path in the admin, and this is by far the best practice for changing the location or name of your logo file. No need to edit PHP, HTML, or CSS - just a simple switch in the admin panel.

To change the path or filename of the default logo, simply log in to your admin panel and navigate to System > Configuration > Design. Under the Header section, change the Logo Image Src from "images/logo.gif" to whatever file path/name suits your needs.

Keep in mind, this setting can be managed on the Store View level, so if you have multiple store views, make sure each one is using the appropriate logo! If you need more help, check out Magento Expert to get quick answers to your Magento questions for free!]]>
Tue, 13 Jul 2010 19:32:37 +0000
<![CDATA[Remove Sidebar Blocks With Layout Update XML]]> http://magentist.com/magento_help/remove-sidebar-blocks-with-layout-update-xml/ Magento's sidebar comes with lots of great features like a quick view of your shopping cart and items you've marked to compare.

But what if you don't want to use all of those items on a page? Sure, you could disable features, but what if you only want to hide features on a specific page?

Say, for example, you want to create a homepage using the 2-columns-left layout. Having the sidebar navigation available on your homepage could be a great way to increase accessibility on your site, but the Shopping Cart and other features may not be appropriate for the home page.

The best solution for a scenario like this is to remove unwanted blocks from a specific page using Layout Update XML.

For this example you would set up your categories and your homepage as usual, and then to remove the extra sidebar blocks on the homepage, go to edit your homepage’s CMS page, and under Layout Update XML, create the appropriate remove tags, as in this example:

<reference name="left">
	<remove name="cart_sidebar"></remove>
	<remove name="catalog.compare.sidebar"></remove>
	<remove name="sale.reorder.sidebar"></remove>
</reference>
This method can be used on CMS pages, categories, product pages - just about anywhere on your site!

For more help on this topic, ask a real Magento Expert at http://magentoexpert.com/ and get a quick answer to your Magento question for free!]]>
Tue, 06 Jul 2010 21:12:46 +0000
<![CDATA[Magento Product Attributes]]> http://magentist.com/magento_help/magento-product-attributes/ Magento is packed with features that allow you to promote and sell your products. The Additional Information tab on the product page is a great example.

Filling out a detailed Product Description is important, but also remember to populate the Additional Information tab with key information about your products. This helps your customers feel more informed, and also boosts your SEO.

You can easily populate this area with content that Magento assignes standardly, such as SKU and Weight, but what if you would like to add further information that is unique to your product? Or even add a large area of text, secondary to your Product Description? Follow these simple steps to create and manage your own custom Magento product attributes:

1) Go to Catalog > Attributes > Manage Attributes and click on Add New Attribute.
2) Complete the form to create your new attribute, then click Save Attribute.
3) Go to Catalog > Attributes > Manage Attribute Sets to add the new attribute to the set you wish to apply it to.
4) Manage your products via Catalog > Manage Products and click on the Attributes tab. This is where you can manage the content of your new attribute per product.

That's about it! If you feel you could use more information, you can also watch this helpful video:



If you're having a hard time, check out http://magentoexpert.com/ for quick answers from real Magento experts.]]>
Wed, 30 Jun 2010 21:11:58 +0000
<![CDATA[Magento Image Compression]]> http://magentist.com/magento_help/magento-image-compression/ Magento image compression on product images has been a big complaint for a lot of people who prefer to use high quality product images on their ecommerce website.

By default, Magento compresses the images you upload to increase loading speed and decrease the server load, but presenting your products with high quality images may just provide the extra push to increase conversions in your store. If you find that your product images are too compressed, you can increase image quality by following these simple steps:

1. Locate the file /app/code/core/Mage/Media/Model/File/Image.php
2. Copy file to /app/code/local/Mage/Media/Model/File/Image.php
3. Find this code in the new file (line 174)
$result = imagejpeg($object->getTmpImage(), $object->getFilePath(true), 80);
4. Replace with this code
$result = imagejpeg($object->getTmpImage(), $object->getFilePath(true), 95);
5. Save the file, upload to your server, and refresh Magento's cache via System > Cache Management.

That's it! If you feel you need more information, check out this thread from the official Magento Forum. Or, for more personalized answers, check out http://magentoexpert.com/ for quick answers from real Magento experts.

]]>
Mon, 28 Jun 2010 22:23:54 +0000
<![CDATA[Magento CE 1.4.1.0 Patches]]> http://magentist.com/magento_help/magento-ce-1.4.1.0-patches/ announced on their official blog that they've created a patch to fix many of the issues users have experienced with Magento CE 1.4.1.0

You can download here from a thread they've started, dealing specifically with the issues in version 1.4.1.0

Magento CE 1.4.1.1 is currently being tested, and is expected for release sometime next week or so, so hold on tight! The new release should fix the errors of 1.4.1.0 addressed by the patch. Users will be able to upgrade to 1.4.1.1 with or without having first applied the patch.

For more information, see the thread.]]>
Thu, 24 Jun 2010 16:13:58 +0000
<![CDATA[Adding A "Home" Navigation Link]]> http://magentist.com/magento_help/how-to-add-a-home-link-in-magento-navigation/

Add Home Link To The Menu Bar

This will allow you to add a Home link in the main navigation bar where product categories are listed. Find the file called top.phtml in the folder at app/design/frontend/default/default/template/catalog/navigation/ and make the following change:

<div class="header-nav-container">
	 <div class="header-nav">
		  <h4 class="no-display"><?php echo $this->__('Category Navigation:') ?></h4>
		  <ul id="nav">
 
		  <!-- HOME BUTTON HACK -->
		  <?php $_anyActive = false; foreach ($this->getStoreCategories() as $_category) { $_anyActive = $_anyActive || $this->isCategoryActive($_category); } ?>
		  <li class="<?php echo !$_anyActive ? 'active' : '' ?>"><a href="<?php echo $this->getUrl('')?>"><?php echo $this->__('Home') ?></a></li>
		  <!-- HOME BUTTON HACK -->
 
		  <?php foreach ($this->getStoreCategories(10) as $_category):?>
				<?php echo $this->drawItem($_category) ?>
		  <?php endforeach ?>
		  </ul>
	 </div>
	 <?php echo $this->getChildHtml('topLeftLinks') ?>
</div>


Add Home Link To The Top Links Bar

This will allow you to add a Home link in the Top Links (My Account | My Wishlist | Etc.) before the My Account.

Find the file called links.phtml in the folder at app/design/frontend/default/default/template/page/template/ and make the following change:

<?php $_links = $this->getLinks(); ?>
<?php if(count($_links)>0): ?>
	 <div>
		  <ul<?php if($this->getName()): ?>):?> id="<?php echo $this->getName() ?>"<?php endif;?>>
		 
		  <!-- HOME BUTTON HACK -->
		  <li class="first"><a href="<?php echo $this->getUrl('')?>"><?php echo $this->__('Home') ?></a></li>
		  <!-- HOME BUTTON HACK -->
		 
				<?php foreach($_links as $_link): ?>
					 <li <?php if($_link->getIsLast()): ?> class="last"<?php endif; ?><?php echo $_link->getLiParams() ?>><?php echo $_link->getBeforeText() ?><a href="<?php echo $_link->getUrl() ?>" title="<?php echo $_link->getTitle() ?>" <?php echo $_link->getAParams() ?>><?php echo $_link->getLabel() ?></a><?php echo $_link->getAfterText() ?></li>
				<?php endforeach; ?>
		  </ul>
	</div>
<?php endif; ?>

NOTE: The if statement in the foreach loop has changed since "Home" will always be first, it wasn’t needed. Also note that the <li> for the "Home" link automatically gets the class "first". ]]>
Fri, 20 Nov 2009 17:38:11 +0000
<![CDATA[Reading Magento Files In Dreamweaver]]> http://magentist.com/magento_help/reading-magento-files-in-dreamweaver/ PHP code (with coloring, hinting, et al) as well as allow you to see the design in code view if desired. Below are three steps to follow.*

IMPORTANT NOTES: This guide is for Dreamweaver on Windows (XP or Vista) or Mac OS X. Note: I have excluded version numbers from the file locations shown, and if you are using a version older than Dreamweaver 9 (CS3) replace “Adobe” with “Macromedia” in the file locations shown. Some spaces have also been removed to keep the references on one line.

* Dreamweaver 4 users: if you are using the archaic Dreamweaver 4, you only need to follow step one. However, it's highly recommended that you just upgrade to version 8, CS3 or newer for superb CSS and Web Standards support.

* Vista may need to edit files by running notepad as Administrator, however this requirement is not common and if encountered, may be avoidable by following these steps after a fresh restart. However, if unavoidable, simply go to Start > All Programs > Accessories, and then right click on Notepad and select “Run as Administrator”. Once notepad is open, use File > Open to browse to the applicable file before making the necessary changes.

Step One: Add .phtml to extension.txt in your Application Data

Open the following extension configuration file in a notepad and change the lines as specified below:

XP: Documents and Settings > [user] > Application Data > Adobe Dreamweaver > Configuration > extensions.txt

NOTE: If you cannot see the Application Data Folder, go to Tools → Folder Options → View and make sure that Show Hidden Files and Folders is checked.

Vista: Users > [user] > AppData > Roaming > Adobe > Dreamweaver 9 > Configuration > Extensions.txt

Mac OS X: Users > [Home Folder] >Library > Application Support > Adobe > Dreamweaver [Your Version] > [en_US or other locale (only for version CS4)] > Configuration > Extensions.txt

In the first line add PHTML like so:

HTM,HTML,SHTM,SHTML, ... ,TXT,PHP,PHP3,PHP4,PHP5,PHTML,JSP,WML,TPL, ... ,MASTER:All Documents

In the PHP Files line add PHTML like so:

PHP,PHP3,PHP4,PHP5,TPL,PHTML:PHP Files

Step Two: Add .phtml to the extension.txt configuration file

This file is pretty much exactly like the extensions.txt file located in Dreamweaver's Application Data folder, except it is in Dreamweaver's Program Files folder, inside a configuration folder. Just as in Step One, find the file and change the lines as specified below.

XP, Vista: Program Files > Adobe > Dreamweaver [Your Version] > configuration > Extensions.txt

Mac OS X: Applications > Adobe Dreamweaver [Your Version] > configuration > Extensions.txt

In the first line add PHTML like so:

HTM,HTML,SHTM,SHTML, ... ,TXT,PHP,PHP3,PHP4,PHP5,PHTML,JSP,WML,TPL, ... ,MASTER:All Documents

In the PHP Files line add PHTML like so:

PHP,PHP3,PHP4,PHP5,TPL,PHTML:PHP Files

Step Three: Add PHTML to MMDocumentTypes.xml

This file is an XML file which should be located in:

XP, Vista: Program Files > Adobe > Dreamweaver [Your Version] > configuration > DocumentTypes > MMDocumentTypes.xml

Mac OS X: Applications > Adobe Dreamweaver [Your Version] > configuration > DocumentTypes > MMDocumentTypes.XML

Note: Dreamweaver 8 users on Windows may also need to apply these changes to: C:Documents and Settings > [user name] > Application Data > Macromedia > Dreamweaver 8 > Configuration > Document Types > MMDocumentTypes.xml

Add PHTML to this line (approx. line 75) twice, like so:

<documenttype id="PHP_MySQL" servermodel="PHP MySQL" 
internaltype="Dynamic"
winfileextension="php,php3,php4,php5,phtml"

macfileextension="php,php3,php4,php5,phtml" file="Default.php" 
writebyteordermark="false">;
</documenttype>


Restart or Open Dreamweaver and you shouldn't have any problems with PHTML files any longer.]]>
Wed, 11 Nov 2009 22:07:29 +0000
<![CDATA[Getting Started]]> http://magentist.com/magento_help/getting-started-with-magento/
1. First, you'll want to ensure that you have the appropriate platform and environment set up to accommodate Magento. See Magento System Requirements to get started.

2. After checking your system, see our Magento Installation Guide for help with setting up Magento on your server.

3. Once Magento is up and running on your site, you can install your Magento Expert theme using the instructions provided. For general theme installation instructions, you may refer to the following help post: How To Install A Theme

And that's it! Now you're ready to set up your products and start selling on your new ecommerce website!]]>
Fri, 06 Nov 2009 20:35:25 +0000