Drupal Commerce Localisation - translate the currency symbol

I didn't see this one coming but on a Multilingual Russian site we recently built, the client asked us to translate the Russian Rubble symbol "руб" to "RUB" when viewing products in English.

As there are no localized options for currency settings I had a look around the commerce code and came across commerce_currency_format() in commerce.module.

Drupal Form API - Reset Button

I have come across a lot of discussions about how to add a reset button to a form in Drupal 7. Also it would be nice if when we added a reset button it didn't get a class of 'form-submit'. To get around this, rather than using standard method of adding a button to the render array of the form, most solutions opt for using #markup.

Simple command line tips for Drupal development

I gave a presentation at Drupal Somerset the other night on some simple tips for using the command line to help with your Drupal development.
I have included the slides here. I have annotated the slides since they don't have the verbal explanations!

Excluding common requests from your apache logs

Log files can get filled up with repeated calls to files such as favicon, robots.txt, images, css js etc
This can be a pain when you need to scan the logs for issues and they are full of unimportant requests.
This is especially so if you use Ultimate Cron in Drupal and run cron every minute - the logs get swamped with the cron calls.
Mostly you want to log the initial request for a page and not all of the resources subsequently requested.
Troubleshooting other issues may mean you would log files such as favicon, images etc - but generally they needlessly fill up your logs.

Apache rewrites to control access to PHP files

There are certain PHP files that you want access to but don't want to make public.
Common examples of these are:

  • PHPInfo.php
  • APC.php
  • memcache.php

You also don't really want to deploy these on all of your sites on a server nor have them in your git repositories for sites.

A neat way of dealing with this is to use rewriting in your web server config files (e.g. Apache, NGINX, IIS etc) to do the following:

Drupal Commerce - Best selling products

Having created a Drupal Commerce site it is likely you may need to have a mechanism to list the best sellers / a count of orders by product or similar.
Her's a quick solution that will help you.
Even if you are familiar with the structure of the commerce model this is still a complex task; linking line items, orders, products, product displays etc.

There is some background discussion here: https://drupal.org/node/1292104

Localizing a Drupal 7 Commerce site a step by step guide

This is going to be a step by step guide for localizing & translating a Drupal 7 commerce site. there are many ways and tools Drupal and its contributed modules support and this is just one of them. 

I will not go into too much explanations but will try and make sure I cover all the steps needed to translate a Drupal commerce site.

Note: commerce kickstart 2 comes with some of this but last time I checked it did not provide full localization and translations features.

Relational Division

Sometimes you come across a problem in SQL that is far more complex than you first imagine. One classic of these is 'Relational Division' - a poorly understood aspect of SQL that can help answer what must be a common question:

Return the things that have all of the items in a given list

Example questions:

Images not showing in IE8

I came across a weird situation today - that I am surprised I have not encountered (or remember encountering) before. Images that show up fine in all browsers apart from IE8 - which displays the broken image with a red cross. Came across this by chance when we were doing some cross browser testing - and of course it was a rare inconsistent issue that affects IE...

Setting translators on a multilingual drupal 7 site

Drupal 7 has great support for multilingual site and has various approaches to content translation and localization.
In this quick recipe post I will cover the setting up of a "Translator" role for the following translation approaches

  • Interface translation: The translation of strings used throughout the site
  • Entity translation: The translation of Nodes and other entities using entity/field translation

I will try and cover other translation & localization approaches at a later stage

Move your body (from views to Display suite)

Lately I find myself more and more moving from views fields to using Display suite layouts. However one bit of functionality I love about views is its text trimming and striping.
What I like to do is create a display suite code field that lets you do this using the original views function. I also try and keep my code in a unit and call it from the display suite (so its not hiding in the DB).

Binary logs are filling up my Mac - Help!

A colleague of mine was running out of disc space on his development machine and on inspecting the disk space usage (use - www.derlien.com) found that MySQL was using up the bulk of the disk.

Collaborative content editing on a Drupal 7 site

Most Drupal sites require more then one person to be able to edit content on the site.
While out of the box Drupal does not support a great collaborative experience, you can easily enable this functionality using a few contrib modules and configuration.

Drupal 7 - How to get information about node types

Each node has a number of properties like name & description.
Drupal 7 core (node.module) provides two useful functions for accessing this data:
node_type_get_names() and node_type_get_types both functions return an array index by the node type.

Using Apache to block Spammers

Last month I wrote a post about blocking spammers from a Drupal (or any Linux / Apache) site by identifying the originating IP address from the watchdog table.

By way of an update I thought I'd share a way you can do this using the Apache configuration. Ideally this would be done in the vHosts/Httpd files if you manage your own server but works equally well within the .htaccess files that most people have access to on shared hosting.

Entity Translations and the published status flag

Always nice to start the new year with a challenge.
I created some new products for a client's Drupal Commerce site and translated them into 10 languages. All good until it was noted that the view that displays the products was showing the new products in Dutch not the default English - although all other products were showing up in the correct language.

Drupal 7 menus in a localized site

i18n / Internationalization module

We use the i18n menu module that comes with the Internationalization module.
While the module provides configuration options for language specific menu items, simply enabling the module creates a new translation text group called "Menu" that exposes all menu items to the translation interface.

You can use the translate interface to translate all the menu items except for once created by nodes for those you should translate the node and specify the translated menu title.

Blocking Spam Comments

One of the housekeeping tasks that I undertake is to review the activity of comment spammers on our websites.
All of our Drupal sites use Mollom to keep us almost Spam free (big thumbs up to Mollom!)
But if you review the logs you can see that Mollom is protecting you from an alarming rate of attack and it would be good to not bother ourselves or Mollom with such traffic is possible. So the solution is to drop the traffic upstream of our web sites.
There are many ways of doing this from Firewalls to Drupal modules.

The Commerce Detective: Cloud Zoom JQuery plugin 404 errors - A solution

If you have been enjoying the Drupal Commerce Kickstart demo of what Drupal Commerce can do you are likely to be greatly inspired to use the techniques showcased in this amazing product. However you may not yet have noticed that you are getting 404 errors on the product page. In this post I cover how to solve this issue.

Drupal Translation Magic

When you create a multilingual site with Drupal there are lot of things to consider; should I use content translation, entity translation, what about views, what about node titles.

There are lot of great resources out there and with a little lot of effort you can get it all working.

However one thing that is easily overlooked is all the strings you use in your jQuery files.