Activity Not Available


  Analyzed 3 months ago based on code collected 3 months ago.
Posted about 2 years ago
Pronounced "drupal-art", noun referring to Drupal code that is both beautiful and artistic.
We previously explored the idea that software is art, one of many creative disciplines. We examined art through the eyes of both the layman and ... [More] the artisan, and meandered from traditional art to software art. We looked at pseudo code and glanced at PHP. I looked for beautiful code in Drupal core and concluded that Drupal's beauty is not in its code, but in its API's.

Relational Art
Without the relation the artist has with art (the time and attention that goes into the work), or without the relation the art lover has with art (the time viewing, collecting and enjoying the work), art would be nothing more than an object of clay, canvas, or cloth. We find value in objects, but appreciate beauty through connections.

I find the deepest beauty in relational art; paintings and sculptures that embed relations within the art object itself, mostly those that depict people in loving relationships with each other. Renoir’s Luncheon of the Boating Party is a great example, showing multiple interactions of people, pet, food, and drink.

Doug Green

Doug is a 25-year veteran of software development, inventor of the coder module, and core contributor. He specializes in creating interpretive language, development tools, and complex or high performance software. He believes software is functional art, and infuses that belief in everything he does. [Less]
Posted about 2 years ago
Challenge #3 has just ended at The Module Off! For this challenge, we only had one submission, but it was great work, so I suggest you check out.

Challenge Summary
One of the major purposes of The Module Off is to help along Drupalists ... [More] who are just learning to do module development. Thus, this challenge will be a little more open ended than the past two. Your module can have whatever user-facing functionality you'd like; it's up to you, and it doesn't need to be complicated. However, your PHP code should demonstrate the ins and outs of EntityFieldQuery, a powerful query builder for quickly getting lists of entities by filtering on their field and property values. You might want to look at the examples module for examples of example modules :). An EntityFieldQuery example never quite made it in. As a head start, you might want to check out the efq_views module to see EFQ in action.

And the Winner!
Congratulations to HAMbrozilla who created a really solid example of how you can extend EntityFieldQuery and use it in your module. Check out the screencast below and head over to The Module Off to download the code.

The Next Challenge!
The next challenge is all about rules. We're hoping to get some great submissions that will help in finding the difference between two entities within the rules interface. Check it out! A free subscription to goes to the winner! [Less]
Posted about 2 years ago
If your development workflow involves programming on local environments, you may have found it cumbersome to interact with shared development servers. (I for one definitely have!) Here's a simple example: my favorite terminal app ... [More] is open to a local directory, where I can use Drush, Compass, or other command-line tools to accomplish various task. I then push code to a shared development environment, where I'd like to immediately perform some of those same tasks. And that means I now have to open another tab of my app, find credentials for the remote server, login, and move to the correct directory, right? Not necessarily.

Fabric to the rescue

Several years ago, a few tools started to appear on the horizon that helped with running SSH commands on one or more remote servers. Capistrano and Fabric were the first two that really came across my radar. I ended up choosing Fabric for a couple reasons:

I liked that it was Python, which is really just personal preference.
Fabric seemed more like an SSH tool (which I liked) while Capistrano was a bit more of a distribution tool. Things have changed around a bit, but I still tend to go with Fabric.

So how does Fabric work? You create a "fabfile" which is a Python file or module and you create tasks. Tasks are generally a command or set of commands you want to run bundled into a function. These can be things you want to run locally or on the remote system (or a mix of both). You can create tasks to transfer files or run a quick database backup. You can then run a command like fab mytask and that will run your task or tasks. You can run a single command or multiple.

Here's how I end up configuring things on my own system.

Create a fabfile directory

Somewhere in your home directory, create a directory called "fabfile". Add a Python file called in this folder. This is just generally how you create a Python module. I find a module works better for Fabric as we can easily separate our tasks over several files. The file can be blank, but we're going to create a couple of files within our module. For each new file, we will add a new import statement to include that in our Fabric module.

Then I created an alias for this fabfile directory. With Fabric, you can specify a fabfile that is should load, but rather than type "fab --fabfile ~/fabfile" over and over again, we can create an alias: alias myfab="fab --fabfile ~/fabfile".

Next, I like to create two files: and The hosts file is a bit special. The file contains tasks for connecting to a remote host. In Fabric, you can configure your hosts in many ways, but I find using tasks the most useful. Here's an example task:

from fabric.api import task, env
def example(environment="dev"):
if environment == 'dev':
elif environment == 'prod':

So if I want to connect to this host, I run: fab hosts.example (connects to the development environment) or fab hosts.example:prod (connects to the production environment). You can specify more environments, or even multiple servers if you have multiple web servers for example. Note that these connections work best when you are using key-based authentication but Fabric will prompt for any input that it's needs along the way.

Tasks for good

Tasks are limited only by what is available to you via SSH and Python. Along with the hosts file above, we created one for server related commands. I like to store commands here that are useful for dealing with pretty much any server. A couple task examples from that file include:

def php_version():
run('php --version')
def restart_apache():
"""Restart apache"""
sudo('/sbin/service httpd restart')

For Drupal specific functions (namely Drush commands), I create a drupal file and include that in my module. The Drupal file contains many different things including functionality to clear the cache, install a new module, and other tasks you might want to undertake without having to connect to each server and running Drush from there.

def drush_dl(module):
"""Download a module"""
with cd(env.hosts_path):
run('drush dl %s' % module)
def drush_dis(module):
"""Disable a module"""
with cd(env.hosts_path):
run('drush pm-disable %s' % module)
run('drush clear-cache all')
def drush_en(module):
"""Enable a module"""
with cd(env.hosts_path):
run('drush pm-enable %s' % module)
run('drush clear-cache all')

But what about Drush?

Now some may point out that Drush and many Drush extensions can also accomplish some of this. And that's very true. There are a couple factors that personally draw me to use Fabric though: not every project may have Drush or Drupal available (you may even be working on a non-Drupal site of all things!). Now you have a single interface for running commands across all of your projects. Also, many of the same tasks you create for one project can be used with systems like Jenkins or cron or just other scripts that may need to use an SSH connection. And of course, if you have multiple servers in your production or developments environments, you can run the same task on all of them using Fabric, instead of one at a time. The possibilities are not limited of course to what I've demonstrated here and you can use them with systems outside of a normal PHP/MySQL stack.

Check out Fabric and see what it can help with in your development processes! [Less]
Posted about 2 years ago
Measuring how much sales are generated from an email campaign becomes easy with Commerce MailChimp module. It connects your Drupal Commerce store to MailChimp, giving you intelligence about how certain email campaigns are performing. You can use that ... [More] information to create messages that seemlessly fit the needs of your customer. In general the more you're able to meet customer needs the healtier your business will be, so let's have a look at how we do that.

MailChimp campaign ROI with Drupal Commerce
This tutorial shows you the R-part of your ROI for your MailChimp email campaigns. Automatically incorporating the investment part can be a bit more tricky - think labor cost, advertising cost, etc. MailChimp's Analytics360 can help you connecting your website traffic tool to MailChimp campaign data. This would require you to send Drupal Commerce eCommerce data to your website traffic tool. Modules like Commerce Google Analytics can help you with that. Contact me if you'd like to see an article about that (or know about an article I can link to).

Configure a Drupal Commerce store
You'll need a Drupal Commerce store for this. You can easily install a Drupal Commerce store with my basic guide on how to work with Commerce Kickstart. Commerce Kickstart allows you to install a fully functional Drupal Commerce store from scratch.

Configure MailChimp module
Make sure you configured MailChimp module for Drupal. If not, have a look at this tutorial on how to configure it the right way.

Configure Commerce MailChimp module
Drupal Commerce needs to send its order data to your MailChimp account. Learn how to set that up in this tutorial on how to connect Drupal Commerce to MailChimps eCommerce360.

Enable Ecommerce360 in your MailChimp Campaign
If you’ve never created a MailChimp campaign before have a look at this tutorial on how to do it.

At the second step of creating an email campaign from your MailChimp account, make sure to click on the ‘even more options’ setting and check the box at ‘Add Ecommerce360 Tracking To All URLs’.

View the Reports
Purchases made after clicking a link in this email campaign will be accumulated to the total sales revenue of the campaign.
You can see what sales where made through a certain campaign. To view these sales click on the ‘Reports’ tab in your MailChimp account. Click on the title of the campaign you want to see eCommerce statistics from, and click ‘Ecommerce Reports’. You’ll be presented with a screen like below. After a while the campaigns eCommerce data will show up. 

More about viewing the MailChimp eCommerce360 data in this MailChimp tutorial.



Drupal Planet

Drupal Commerce

MailChimp [Less]
Posted about 2 years ago

As a training manager, my job is to help Acquia’s clients develop the skills on their teams through training. I spend time listening to the team leads and matching their requirements to our courses, or ... [More] our partner's online training services. Over the next couple of months in our training newsletter, I'll be writing advice on how to build and skill up your Drupal team. [Less]
Posted about 2 years ago
Having the ability to send a targeted email to all purchasers of ‘product X’ can be priceless.

Think of these example scenarios in case of physical products:

you have a great upsell for the product they bought
a newer version of ... [More] the product they bought is released
you want to ask people to return the product because it’s defective
You want to send a photo of a cat to all customers that purchased a product from your cats product ‘cat’egory
Asking your customer how they like the product 2 weeks after they bought it
or in the case when a product is a digital elearning course:

Your customers receive weekly emails regarding that weeks lesson from the course they bought.
In all these cases segmenting your list means having the ability to send more targeted emails. The more targeted an email is generally means an increase in chance of you sending a message that actually helps those customers. And because being able to help your customers in general means that you make more money, let's have a look at how you can send a targeted email to all purchasers of one certain Drupal Commerce product.

How it’s made
Let’s see how that works in Drupal. I’m assuming:

You have a Drupal Commerce store
In this tutorial I will be talking about the Drupal Commerce based scenario. You can easily install a Drupal Commerce store with my basic guide on how to work with Commerce Kickstart. Commerce Kickstart allows you to install a fully functional Drupal Commerce store from scratch.

You configured MailChimp module
I'm assuming you're using MailChimp and configured MailChimp module on your Drupal site. If not, have a look at this tutorial on how to configure MailChimp module for Drupal the right way.

You configured Commerce MailChimp module
Drupal Commerce needs to send its order data to your MailChimp list. Learn how to set that up in this tutorial on how to connect Drupal Commerce to MailChimps eCommerce360.

Segmenting based on Drupal Commerce Product
By default segmentation based on product is working out of the box once you’ve setup all the above items correctly. Place a few orders in your Drupal Commerce store. Make sure the email address you’re testing with is on the MailChimp list or make sure to check the ‘Signup to newsletter box’ in those orders. Learn about how to setup a ‘signup during checkout’ pane in this tutorial that shows you how to configure that.

In MailChimp, create a campaign and click ‘Sent to Segment’. Select ‘Product Purchased’ from the list and you should be able to select the products that you’ve ordered in those test orders you’ve made.

Learn more on how to segment your list from the MailChimp side of things in the tutorial about MailChimp list segmenting based on purchase activity.

Make sure you’ve entered a unique Drupal Commerce product name for each of your products on the product level (and not just for your product displays).

Segmenting based on Drupal Commerce Product Category
To be able to segment your MailChimp list based on product category data you have to place every Drupal Commerce Product into a category. In Drupal Commerce separates products from product displays. Make sure you know the difference between the two, or educate yourself with this guide on Drupal Commerce product displays.

Make sure you understand how MailChimp segmenting works on the MailChimp side of things: it will help you to understand what you’re doing at the Drupal side of things. (MailChimp segmenting tutorial)

Create the Vocabulary
If you haven’t done so yet, add a vocabulary at and add a few terms to it. In this example I’ve created the Vocabulary ‘MailChimp Product Category’ and added 3 terms to it: ‘cat’, ‘dog’ and ‘chimp’.

Create and configure the Term Reference Field 
The second step is to add a Term Reference Field to the product content type. It will reference a term from your Vocabulary. To do this go to­variation­types and manage the fields of the product you want to add the Term Reference Field to. You’ll see a screen with options like below:

For this example I named it ‘MailChimp Product Category’. Select ‘Term reference’ as Field Type. Press the ‘save button’.

At the next screen select the Vocabulary you like to use, in my example that’s ‘MailChimp Product Category’ 

Click ‘Save field settings’.

At the next screen leaving everything to default is ok. Save settings.
A little note on using multiple values for this field: setting ‘Number of values’ to 2 or more will work, but only the first term will be sent to MailChimp when a product is categorized into 2 or more categories.

Multiple product types
If you have multiple product types for which you like to send the category data to MailChimp: use ‘Add existing field’ for the other product types.

Manage Display
If you want to hide the ‘MailChimp product category’ for your customers, go to the ‘Manage Display’ tab and move the field to the ‘Hidden’ section.

Categorize the Products
Now go to This shows you a list of products. Edit the products to put them in a category. In case you have a Commerce Kickstart installation: this url will now technically list Display products. Edit them and you can access & edit the products.

Again be aware of the fact that MailChimp only supports one category term per product. Selecting multiple Taxonomy Terms for a product is possible from within Drupal, but only the first will be sent to MailChimp.

Select what Term Reference Field to use for MailChimp
Now that you’ve created the Vocabulary and assigned a term to each product, you have to select the category is going to be sent to MailChimp along with the other eCommerce data.
In Drupal that means selecting the right Term Reference Field in the Commerce MailChimp settings at 

Don't forget to save. 

Now make a couple of test product purchases, and create a segmented MailChimp campaign based on product category: the categories of the product purchases you made should show up. 


Drupal Planet

Drupal Commerce

MailChimp [Less]
Posted about 2 years ago
Site-specific modules can be a bit tricky as there's no fixed structure to use, but we've come up with what we think is the ideal solution, and we thought we'd share!It seems we're using an ever-increasing number of modules on our ... [More] Drupal 7 sites, which are getting progressively more complex as clients (understandably) want more features, more eye candy and more value for their money. Some modules are downloaded from, some are modified, some are written completely from scratch, and even features are modules. We've come up with a simple organisational method which we think ought to keep everything organised, and we thought we'd share this and let you have your say.

Blogs: Drupal PlanetTags: CheltenhamDrupalDrupal DesignDrupal DevelopmentPHPTigerfishWeb Development [Less]
Posted about 2 years ago
So I did some work on the module Semantic fields, to do it exportable. Did some patches, uploaded them and everything seemed ok, not so much activity in the issue queue so nobody else tested my stuff. So I deleted my folder with Semantic fields ... [More] so I could test the patches myself. Then I realised I forgot to add important files to my patches - the new files with the exportability.

Netbeans have a nice history feature (I am using Netbeans 7.2.1), and you could easily go back in the history to fix terrible new things to nice old things, if needed. But I did not have the files anymore. So I started from the beginning, created the files again, and just by chance I took a look of the history of the new file. And, hey! There were a history. When I created the files with the same names I got the old history back. That was really a nice feture I was not aware of. So thanks Netbeans for helping a really stupid coder out.

Posted about 2 years ago
The Simple hierarchical select module or SHS for short implements a widget element that allows users to drill down through a hierarchical list of terms within a vocabulary. The module implements a custom formatter, widget and Views filter. You can ... [More] create a views listing page that allows users to filter content using SHS. The module only works with vocabulary terms so you'll need to have Taxonomy enabled to use this module. [Less]
Posted about 2 years ago

Hey all now days Drupal community is very hard at work in developing Drupal 8. If you are passionate about Drupal and want to contribute to Drupal 8 but not finding any source to start then this is blog can help you.

What ... [More] we will cover in this blog :-

1       How to take Drupal 8 stable core to your local machine and start developing with it.

2       What's new in Drupal 8?

3       Some explanation of changes with code.

Below are the steps to setup Drupal 8 stable core to local machine. I am hoping you have GIT installed in your machine.

1       git clone --branch 7.x

2       cd Drupal

3       git checkout 8.x

If you want to go back to your D7 version just do " git checkout 7.x " . For updating your Drupal 8 core do "git pull " . It will update your Drupal 8 code instance .

Now you can start building your custom modules , Themes for Drupal 8 .

In Drupal 8 till now what community has updated has many changes in core . Below is link of list of changes in Drupal 8 .

You can check out each change and start writing your code with Drupal 8 .

Menu change example :-In D8 menu links are converted into entities . So in order to create new menu in Drupal 8 you can do like this .



$menu_link = entity_create('menu_link', array(

'link_title' => t('Home'),

'link_path' => '<front>',

'menu_name' => 'main',




Saving menu links with Drupal 8 :-


$menu_links = entity_load_multiple_by_properties('menu_link', array('link_path' => $link_path));

foreach ($menu_links as $menu_link) {

$menu_link->link_title = t('New link title');




Some changes are also happens with hooks like :-

hook_menu_link_alter() has been replaced by hook_menu_link_presave()

hook_translated_menu_link_alter() has been replaced by hook_menu_link_load().




Below are some other links which give you information about Drupal 8 development , roadmap , Documentation , code , contributors , IRC channels , meeting times etc.


This is link to video which drive you through some custom code development in Drupal 8 .


Some other links for understanding architecture and developing in Drupal 8 :-


Please feel free to comment and send your queries to me . [Less]