Since Magento has built in functionality for currencies, it shouldn’t be too hard to create custom currency selector and put it to the header. You might say this tutorial is for beginners, since it’s pretty much straightforward.
You might have noticed the ”Currency Setup” tab in Magento’s Administration under “System->Configuration” menu. There you should select default site currency, and besides that, all currencies you want to support.
Here’s a screenshot of that tab:
After that, you should go to “System->Manage Currency Rates” and set rates for currencies you’ve chosen before. You can use Webservicex to import currency rates from Webservicex service. Here’s how it looks like:
And now, after you’re done with initial setup, let’s go further with modifications to make that output shows in the header. First thing you should do is to create a new template file and put it under “YOUR_PACKAGE/YOUR_THEME/template/currency/currency.phtml”. Put in this content:
<?php if($this->getCurrencyCount() > 1): ?>
<div class="form-language">
<label for="custom-currency-selector"><?php echo $this->__('Your Currency:') ?></label>
<select onchange="window.location.href=this.value" name="custom-currency-selector" id="custom-currency-selector">
<?php foreach ($this->getCurrencies() as $_code => $_name): ?>
<option value="<?php echo $this->getSwitchCurrencyUrl($_code)?>"
<?php if($_code == $this->getCurrentCurrencyCode()): ?>
selected="SELECTED"
<?php endif; ?>>
<?php echo $_code ?>
</option>
<?php endforeach; ?>
</select>
</div>
<?php endif; ?>
You can put in line #10 either $_name or $_code, depending what do you want to show in your currency selector. Here you can see how these changes affect to the selector.
Next thing you should do is to tell Magento which template should be used for the selector. You should create “YOUR_PACKAGE/YOUR_THEME/layout/local.xml”, or just append the following content if you already have this file in your theme.
<?xml version="1.0"?>
<layout version="0.1.0">
<default>
<reference name="header">
<block type="directory/currency" name="custom_currency_selector" template="currency/currency.phtml"/>
</reference>
</default>
</layout>
And finally, there’s one more thing you’ll need to do to make the template visible on frontend, Open “YOUR_PACKAGE/YOUR_THEME/template/page/html/header.phtml” (or create new file if there isn’t any) and add the following content:
<div class="header-container">
<div class="header">
<?php if ($this->getIsHomePage()):?>
<h1 class="logo"><strong><?php echo $this->getLogoAlt() ?></strong><a href="<?php echo $this->getUrl('') ?>" title="<?php echo $this->getLogoAlt() ?>" class="logo"><img src="<?php echo $this->getLogoSrc() ?>" alt="<?php echo $this->getLogoAlt() ?>" /></a></h1>
<?php else:?>
<a href="<?php echo $this->getUrl('') ?>" title="<?php echo $this->getLogoAlt() ?>" class="logo"><strong><?php echo $this->getLogoAlt() ?></strong><img src="<?php echo $this->getLogoSrc() ?>" alt="<?php echo $this->getLogoAlt() ?>" /></a>
<?php endif?>
<div class="quick-access">
<?php echo $this->getChildHtml('topSearch') ?>
<p class="welcome-msg"><?php echo $this->getWelcome() ?> <?php echo $this->getAdditionalHtml() ?></p>
<?php echo $this->getChildHtml('topLinks') ?>
<?php echo $this->getChildHtml('store_language') ?>
<!-- START How to add Currency selector to Magento's header -->
<?php echo $this->getChildHtml('custom_currency_selector') ?>
<!-- END How to add Currency selector to Magento's header -->
</div>
<?php echo $this->getChildHtml('topContainer'); ?>
</div>
</div>
<?php echo $this->getChildHtml('topMenu') ?>
After this, if you save everything, clear the cache and reload the page, you should see something like this:
Note!
By default, Magento is configured to show default currency selector if there is more than one currency set up. You can see that below:
To disable default currency selector you need to add
<remove name="currency" />
to default handle in your layout.xml. Then, your local.xml would look like this:
<?xml version="1.0"?>
<layout version="0.1.0">
<default>
<reference name="header">
<block type="directory/currency" name="custom_currency_selector" template="currency/currency.phtml"/>
</reference>
<remove name="currency" />
</default>
</layout>
I hope this helped someone, cheers!
Info!
This article was revised on Dec 14, 2012. You will notice that some of the comments are older. This is because the original article was posted in 2011 by Mladen Lotar.












Just did today..
Can be done quickly this way too..
Need to paste the line below somewhere in phtml
Another quick way:
Just need to paste the line in any template file
<?php echo $this->getLayout()->createBlock('directory/currency')->setTemplate('directory/currency.phtml')->toHtml(); ?>Thanks for this.
I need to add a currency selector into clients Magento and this will speed up things massively for me.
Many Thanks.
Chris
What if I need to set separate payment for separate website view. like my website x have 2 payment method a /b and website y have b/c?
Hi,
Do you know how to make currency selector as images of flags by clicking on a particular flag, currency will be switched to the currency of that flag (if you know what I mean). I tried doing it myself, but without a success yet.
Great post
I was wondering if it was possible manually to administrate two different currencies in the admin area – e.g. type in EURO on the danish version of the product, and type in USD on the english version of the product.
In other words – it seems that Magento only will display one currency in backend at a time.
Hi,
I need to send a link, already with currency which is different from the base currency (e.g. my base is US$ and I want to send a link with Euro, so people will not need to change currency – but to see it imminently in Euro). Any solution?
Thanks,
Ben
@Igor (My name is also Igor)
,
I managed to do that, i.e. have flags as a “switcher”.
Instead of me explaining it for you step by step, you will find the answer you are looking for at following page; http://www.e-commercewebdesign.co.uk/blog/magento-tutorials/custom-magento-currency-switcher-in-header.php.
In newcurrency.phtml I’ve changed
from:
to:
Please note that I have “.png” as the url to my images. This will output the currencycode for each currency, so for an exampel USD will be represented by a flag that has a filname of “USD.png”.
If you need any help with this, please feel free to contact me! You can see the result at http://www.madlady.se/ and to contact me please send me a message through http://www.madlady.se/contacts.
I hope it works for you! (:
Ciao,
Igor
Fantastic! Worked like a charm – thanks so much!
How can we put this currency selector drop down on product page.
Hi, How can i close the currency switcher on left column once it is appear on the header, or how can i set switcher on the left column (including all page, e.g home, and all product page and CMS page)
Very good post. It works perfect in out site as well.
I have two sections in magento.
1 is the default section and the other ias an additional section. Here i have enable currency conversion but i would like to help me out if i can enable the currency conversion for any one of the sections.
please suggest.
very very good …Thanks Man
Caution: Switching Currencies is not working together with the paypal payment module.
Paypal will always use the configured base currency.
Nice rewamp Zvonimir!
Thanks! i was looking for this since my new magento theme is kinda modified.
Followed this with Magento 1.7.0.2. Modern Theme , Works perfectly. Thanks
Thanks for the auspicious writeup. It if truth
be told was once a amusement account it. Glance
complex to more introduced agreeable from you!
However, how could we be in contact?
Works perfectly in Magento 1.7.0.2. Modern Theme , thanks.
I had applied currency converter to my site. Iwas working very well, But it create a very huge problem.
(1) A Canadian client purchase ab book in Canadian 4.98 Dollar and he pay with CCavaenu payment gateway (INR account)
It take 4.98 Rupees
Could it be possible that at and of purchase amount shows in Rupees or whichever Default Display Currency
Client only evaluate but pays in Default Display Currency
Plz reply soon , bcz I disabled my currency converter but i need to have it
Thanks
hi, i added this currency selector to my website, but my home page products won’t change the currency whatever the currency i chose, it always displays the default USD, but the category list and product description page are normal. Anyone knows how to resolve?