Dec 19 2016
Dec 19

[{"title":"Drupal 8: Custom Block Creation programmatically ","body":"

In Drupal 8 Blocks are made up of two separate API. Block Plugin API, is a reusable API and Block Entity API, use for block placement and visibility control.<\/p>\n\n

Before we begin with custom Block module development. We assume that you\u2019ve better understanding of Plugin API<\/a> & Annotation-based plugins<\/a>.<\/p>\n\n

Creating a custom block require following steps:<\/strong><\/p>\n\n

  1. \n\t

    Create a block plugin using Annotations<\/p>\n\t<\/li>\n\t

  2. \n\t

    Extend the Drupal\\Core\\Block\\BlockBase class.<\/p>\n\t<\/li>\n<\/ol>

    In Drupal 8, We need to keep the keep our custom, \u00a0contributed module in root directory<\/p>\n\n



    Step 1:<\/strong> \u00a0An essential part of a Drupal 8 module, theme, or install profile is the .info.yml file (aka, \"info yaml file\") to store metadata about the project.<\/p>\n\n

    In Drupal 8, .info file changes to .info.yml. Old .info files have been converted to YAML.<\/p>\n\n

    Added name, description, core, package, dependencies, type (The type key, which is new in Drupal 8, is required and indicates the type of extension, e.g. module, theme or profile.<\/p>\n\n


    Step 2:<\/strong> \u00a0We should follow the PSR-4 standard code for custom block(s) & that has to be placed into article\/src\/Plugin\/Block\/ and named based on the class it contains. If we're going to define the class ArticleBlock this file would be article\/src\/Plugin\/Block\/ArticleBlock.php<\/p>\n\n


    Create a file ArticleBlock.php under modules\/custom\/article\/src\/Plugin\/Block folder structure<\/p>\n\n

    Annotation contains just the id and label:<\/p>\n\n

    1. \n\t

      The 'id' property in the annotation defines the unique, machine readable ID of your block.<\/p>\n\t<\/li>\n\t

    2. \n\t

      The 'admin_label' annotation defines the human readable name of the block that will be used when displaying your block in the admin interface.<\/p>\n\t<\/li>\n\t

    3. \n\t

      The 'Category' defines which section belongs to under block listing page.<\/p>\n\t<\/li>\n<\/ol>


      The ArticleBlock extends BlockBase class. This class provides generic block configuration form, block settings and handling of user defined block visibility settings.<\/p>\n\n


      Where are we displaying markup in our block ?<\/p>\n\n

      Save the file and enable the module. To enable a block visit \/admin\/structure\/block and click on \u201cplace block\u201d under one of the region. i\u2019m selecting \u201cSidebar Second\u201d for my visibility or search for your block \u201cArticle block\u201d click on \u201cplace block\u201d and configure it.<\/p>\n\n



      So, we have done with configuration. it\u2019s time to visit our page. as we set the block to\u00a0<front> page.<\/p>\n\n



      Source code:<\/strong> https:\/\/\/xaiwant\/drupal8-block<\/a><\/p>","meta_tags":"{\"description\":\"In Drupal 8 Blocks are made up of two separate API. Block Plugin API, is a reusable API and Block Entity API, use for block placement and visibility control. Before we begin with custom Block module development.\",\"keywords\":\"Drupal 8, Module Development, Block, Custom, Plugin API, Annotation-based plugins\"}","author":"Jaywant.Topno","image":" http:\/\/\/sites\/default\/files\/default_images\/bg-header-small-5.jpg\n","module_link":"","created":"19 December, 2016"}]

Jan 15 2016
Jan 15

Happy birthday, Drupal community! Today is the Drupal project's 15th birthday. In honor of the upcoming year, we've put together a retrospective of some of the incredible changes and accomplishments we made together last year.

2015 was a landmark year for Drupal: between three DrupalCons, the release of Drupal 8, and numerous improvements to, there's a lot for everyone to be proud of. None of our amazing accomplishments would been possible without our community of passionate Drupalers. As you read the infographic, we invite you take a moment to congratulate yourself for all the ways that you've helped make the project strong. Because Drupal's 15th birthday isn't just an accomplishment for the software—it's an occasion to celebrate everyone who has helped get the entire project and the community to where they are today.

Infographic celebrating Drupal's 15th birthday

Jan 15 2016
Jan 15
Tags: Github, planet

This is the first time that I am working with automated tests. I have written tests before and and of course I believe that tests improve projects dramatically, but I have never had (/made) the time in a project to actually do it. So I was quite excited to get started with travis.

First things first, what do you test!?

I was terribly excited to start working with tests, but yesterday we didn't actually have any code to test against yet, so instead we decided, we actually want to run the drupal core tests. We want our module to be enabled, and to test know if any of our code causes a Drupal core regression, so I started with that.

Trial and Error (a lot)...

Travis build history logs showing eventually passing tests ?Travis build history logs showing eventually passing tests.

The documentation is pretty good and there are LOADS of example .travis.yml files floating around, so I started to just get an active environment build working and focused on getting php unit tests working first. I only wanted a couple of tests to run and the main thing I cared about was that drupal installed properly and that the environment was up and running. Eventually I got a passing build with the following .travis.yml

While I was really quite happy with this, I wanted more. Simpletests to say the least, and maybe even behat tests. I found a lot of inspiration when looking at BartFeenstra's (Xano on d.o) Currency module:
Most importantly, I found Drupal TI -

Drupal TI

This project makes it almost trivial to integrate Drupal Projects with Travis. It handles a lot of the setup in terms of MYSQL, Drupal download and how to start running tests. It managed to reduce my .travis.yml to the following:

This is quite a bit of code, but it is really clean and well commented so we can clearly see what is going on.

When to test?

So now there are tests... Great! But when do we run them? Running all of Drupal's tests can take quite some time, but we do want to have a check on development to catch things. So in short we need testing on pull requests between individual development repos (eg and the main project repo ( but when we are doing our development we only really care about project specific tests.

Seeing tests on GitHub

When I create a pull request now, I automatically have the tests run and the results on the pull request:

GitHub pull request GitHub pull request with Travis test results

Travis summary GitHub pull request test results in Travis CI

Eventually what we really want to do, is have a way of checking inside our .travis.yml, if the test has been started by a pull request, or by a code push/merge and run different parameters depending on that. But more about that next time. There will be a blog post on that soon...

In the meantime, use Travis and write tests :)


Jan 15 2016
Jan 15

Lingotek’s Translation Network is a cloud-based solution that connects all your global content in one place, giving you the power to manage your brand worldwide. Our technology pairs with the best-in-class applications, such as Drupal, to continuously push dynamic multilingual content to all of your global markets.

Lingotek’s collaboration with - and development work for - the Drupal community began over four years ago with Drupal 6. Our first Drupal module was released in fall of 2011 for Drupal 6. We now have contributed modules available for both Drupal 7 and Drupal 8.

These modules empower Drupal site owners to target different markets by providing them with various options for translation (machine, community, and professional) as well as connecting their Drupal site to our cloud-based Translation Network.

Our Drupal 7 module enhanced the functionality of Drupal 7 core and also integrated with popular contributed modules such as Field Collections, Panels, and more. The ability to integrate with these modules was crucial because complex sites built for easier digital experiences often require different data modelling options. But providing high quality support for such different possibilities and potential information architectures is not always easy.

So why are we so proud of the Drupal 8 multilingual experience?

The massive improvements of Drupal 8 for multilingual features and APIs allowed us to provide better support than with previous releases of Drupal or any other CMS on the market. For example, Lingotek supports the translation of several different content data structures for Drupal 7. However, with Drupal 8, if you follow the best practices on the creation of your content structures we will fully support them out-of-the-box.

At this point, you may be wondering, how Lingotek can help you? If you are a site owner, you will be able to easily translate your content or configuration. Our bulk management forms allow you to upload and request multiple translations of your content in all your locales with a single submit. And if you choose to, the translations will be automatically downloaded and published as soon as they are available.

If you are a front-end developer, you may have worked on multilingual projects where translations were handed in late in your project cycle. Sometimes, since the text labels can be so different between different languages, your new translations can break your layouts. With Lingotek you can use automatic translations, which may not be good enough for your end users, but can help demonstrate how the site will look like in a language you don’t speak.

If you are a back-end developer, you may need to develop custom modules. These custom modules could include custom entities and/or field types or result in your own configurations. Then you’d be tasked with making them translatable, which may seem like a daunting task. In fact, with Drupal 8 it’s easier than with Drupal 7 or any other CMS by far! If you integrate with Lingotek, the good news is that you don’t need extra work as soon as your data structures are translatable with Drupal 8 core. For more information about how to make your data structures translatable, check out this helpful example module git history.

Drupal 8 is a great platform to work with not only because it is so multilingual capable out-of-the box, but also because you can easily expand while maintaining the translatability of your data. Drupal 8’s multilingual core offers a robust multilingual foundation, making the integration process much more seamless.

That’s why we’re excited to announce that Drupal 8 users can now benefit from Lingotek’s Translation Network.

For more information about Lingotek’s Translation Network please visit For additional information about Lingotek’s Drupal contributed modules, visit either or

Jan 15 2016
Jan 15

Lately there is a lot of discussion about adding a full javascript framework to Drupal core (either 8 or 9)

Dries' blog post

Related core issue Select a new client-side framework for Drupal 8 core's admin UIs

Some thoughts ....

The issue summary

The fluid experience in well-written single-page applications today far exceeds what Drupal’s admin layer provides

This isn't really a fair comparison, you cannot compare a single-page app to a full blown CMS

Thanks to the adoption of Backbone, parts of core already have this type of behavior, but many now consider Backbone obsolete

Not sure what many is supposed to mean, but is doesn't look dead to me, It might have lost some of it attraction, but to me it still looks like a solid framework

We need to accelerate the pace of these improvements to match users’ growing expectations

Yes we do, but the question is what needs to be improved, to me it seems more logical to first create a list of - known - problems with the current UI. As a proof of concept, I created Dream permissions, in the mean time it is a stable module for Drupal 7, and a Drupal 8 port is on the way.

For example, it is no longer acceptable to experience a full page refresh when deleting a node or applying filters to searches of content

It would be nice if we have some figures to back this, none of our clients ever complained that they had to wait too long while deleting a node.

It is also extremely important that when performing any action, users get immediate feedback (or even optimistic feedback, in which the user sees the result even before getting a response from the server from their action, e.g. liking a Facebook post triggers an instantaneous response)

Immediate feedback is indeed vary valuable, but most of the time this can be accomplished using the already build in jQuery, for instance diable the submit button after the first click, add a progress bar/spinner so people know there's something going on.

Comparing this to liking a facebook comment is not a good comparison. Facebook is a single app (a large one), not a CMS.

PS: The liking can be mimiced using the flag module, and it will also be instant

Application-like UIs in Drupal (e.g. Views UI and block placement) would benefit from a standard framework to enable a fluid experience

Yes, we need to standardize, but it isn't only about the front-end code, the user permissions page does not scale, so in most cases we need to solve both the PHP and the javascript side. The other huge problem is that Drupal is fully extensible, almost any form/list can be altered in lots of ways. So moving all that logic to the javascript side will be a daunting task if not impossible.

Adopting a framework with a better front-end developer experience would also attract new front-end contributors to Drupal.

No, I don't think so and the front-enders I know feel the same way, if we want to attract more people and especially front-enders, we need to change the way we work: switch to sass (or less), provide grunt (or gulp) scripts, provide guidelines, style guides, components, linting, testing, ...

Why adopt a framework?

Since the issue didn't mention the downsides:

  • Load time of the page, no matter which framework is chosen, it will increase a lot
  • Render time of the page, given a lot of mobile phones need 500ms to parse jQuery, I expect it to be a lot more
  • Accessibility, the page should still be usable when javascript is disabled


The fact Drupal 7 selected jQuery

I think it was the right decision 5 years ago, but the biggest problem is that all sites got stock with it, the last 2 years we released most of our sites with the jQuery removed, because most of the time it was not needed at all or too slow for what we wanted to accomplish.

Contrib is a great place to handle the ever-changing, rapid landscape of front end frameworks

I have to agree, as long as we're talking about 100% back-end pages, the risk otherwise is that sites might end up with multiple (non-compatible) frameworks running side by side on the same page. Full comment at

Optimistic feedback without having the logic on the client means taking shortcuts while doing the preview, and possibly replacing that instantaneous-but-low-fidelity preview with a high-fidelity preview upon getting a response from the server

Yes, this sounds like a great idea, trick the user so he/she believes his/her comment got saved, use some ajax magic to save the comment and get the real comment in return. That was the what I tried to do in Dream comments.

My conclusion

Do we need to do something? Absolutely, but that is the easy part. We should improve the UX of the admin pages, make them snappier. But I'm not convinced that adding a framework as a first step is the way to go. We should make a list of known problems and figure out how to solve them. If solving them requires adding a framework, we should do it.

Regarding contrib, it would rather not see just a framework added to core, unless we add all the needed tools, some pre build components so they can easily be re-used by contrib, .... Most contrib module developers do not excel in javascript, so we should help them. The same goes for theming, we should make it easy for developers to follow best practices.

List of interesting remarks/questions

  • Crell: No matter what Javascript-based fancying up we do, the page must still be usable without JS
  • Marc: What about UI components that appear for authenticated users on user-facing pages
  • David: On the overall issue, wouldn't it benefit from first having a specific design/mockup/prototype for exactly what Drupal's user interface (or at least an example part of it) should look like in the future, and then pick a framework afterwards?
  • Pierre: Contrib is a great place to handle the ever-changing, rapid landscape of front end frameworks. All Drupal core has to do is make it easy.
  • Corbacho: Sounds too risky to bet on a big strongly opinionated JS framework at this point
  • mrf: I feel like we have jumped straight to "which JS framework should be in core" skipping right past the discussion of whether or not it is a good idea for us to rely on a JS framework in core, and how much we want to rely on it on that framework outside of the administration interface.
  • Wim: network latency is a problem we cannot ignore

PS: I've not added all of them, if I missed an important one, let me a note and I add it.

Jan 15 2016
Jan 15

Creation of rtl css is quite an important process in front-end, necessary to make the design comply with the RTL standards. This process invlolves the substitution of margin-left by margin-right, float: left by float: right… and so on.

Luckily, this job can be done by Grunt with the help of grunt-css-flip bundle, which creates a "reflection" of the css file. You can learn the basics of Grunt in the following article. So, let’s get started!

Installing and configuring grunt-css-flip:

1. Install and configure Grunt.
2. Install grunt-css-flip bundle:
npm install grunt-css-flip --save-dev.
3. Create Gruntfile.js.
Let’s analyze the following example of Gruntfile.js file:
 module.exports = function(grunt) {
    pkg: grunt.file.readJSON('package.json'),
    watch: {
      css: {
        files: '**/*.css',
        tasks: ['cssflip:my_target']
    cssflip: {
      my_target: {
        options: {},
        files: {
          'css/styles-rtl.css': 'css/styles.css',
    concurrent: {
      options: {
        logConcurrentOutput: true
      dev: {
        tasks: ["watch:css"]


Pay attention on this part of the code

  cssflip: {
      my_target: {
        options: {},
        files: {
          'css/styles-rtl.css': 'css/styles.css',

Files: here we set the files that should be reflected (you can specify a few files and separate them by comma). Files are defined as: ‘ rtl file name’: ‘file name for which rtl copy must be created’.

Options: here we indicate whether rtl file should be compressed or not (compress parameter, default false value), and set margins for css (indent parameter, default value and 2 hiatuses).

4. Run Grunt

From this moment, Grunt will monitor chosen css files (in example given it’s css/styles.css) and create the relevant reflected files.

Comments and Specifications :

Grunt-css-flip can be used together with Compass, where Compass generates css with sass, and Grunt monitors changes in the css files. If they were changed, it would run grunt-css-flip. Grunt-css-flip can be also used with other bundles, where, for instance, Grunt will validate sass/less code (grunt-scss-lint bundle). If the check was over, it would generate css (grunt-sass bundle), add prefixes (grunt-autoprefixer bundle) and also generate rtl css files (grunt-css-flip bundle).

Here are some things to be aware about when using automatic reflection:

1. There is not yet full support for flex, that’s why flex-direction won’t be reflected.

2. You should also be very attentive to centering:

margin-left: 50%;

transform: translate(-50%);

Since margin-left will be reflected in margin-right and transform won’t be changed, element in rtl won’t change respectively.


Repository -

Good luck in your coding!

Jan 15 2016
Jan 15

On December 29, 2000, I made a code commit that would change my life; it is in this commit that I called my project "Drupal" and added the GPL license to it.

Drupal name and license

The commit where I dubbed my website project "Drupal" and added the GPL license.

A couple weeks later, on January 15, 2001, exactly 15 years ago from today, I released Drupal 1.0.0 into the world. The early decisions to open-source Drupal and use the GPL license set the cornerstone principles for how our community shares with one another and builds upon each other's achievements to this day.

Drupal is now 15 years old. In internet terms, that is an eternity. In 2001, only 7 percent of the world's population had internet access. The mobile internet had not entered the picture, less than 50% of the people in the United States had a mobile phone, and AT&T had just introduced text messaging. People searched the web with Lycos, Infoseek, AltaVista and Hot Bot. Google -- launched in 1998 as a Stanford University research project -- was still a small, private company just beginning its rise to prominence. Google AdWords, now a $65 billion business, had less than 500 customers when Drupal launched. Chrome, Firefox, and Safari didn't exist yet; most people used Netscape, Opera or Internet Explorer. New ideas for sharing and exchanging content such as "public diaries" and RSS had yet to gain widespread acceptance and Drupal was among the first to support those. Wikipedia was launched on the same day as Drupal and sparked the rise of user-generated content. Facebook and Twitter didn't exist until 4-5 years later. Proprietary software vendors started to feel threathened by open source; most didn't understand how a world-class operating system could coalesce out of part-time hacking by several thousand developers around the world.

Looking back, Drupal has not only survived massive changes in our industry; it has also helped drive them. Over the past decade and a half, I've seen many content management systems emerge and become obsolete: Vignette, Interwoven, PHP-Nuke, and Scoop were all popular at some point in the past but Drupal has outlived them all. A big reason is from the very beginning we have been about constant evolution and reinvention, painful as it is.

Keeping up with the pace of the web is a funny thing. Sometimes you'll look back on choices made years ago and think, "Well, I'm glad that was the right decision!". For example, Drupal introduced "hooks" and "modules" early on, concepts that are commonplace in today's platforms. At some point, you could even find some of my code in WordPress, which Matt Mullenweg started in 2003 with some inspiration from Drupal. Another fortuitous early decision was to focus Drupal on the concept of "nodes" rather than "pages". It wasn't until 10 years later with the rise of mobile that we started to see the web revolve less and less around pages. A node-based approach makes it possible to reuse content in different ways for different devices. In a way, much of the industry is still catching up to that vision. Even though the web is a living, breathing thing, there is a lot of things that we got right.

Other times, we got it wrong. For example, we added support for OpenID, which never took off. In the early days I focused, completely and utterly, on the aesthetics of Drupal's code. I spent days trying to do something better, with fewer lines of code and more elegant than elsewhere. But in the process, I didn't focus enough on end-user usability, shunned JavaScript for too long, and later tried to improve usability by adding a "dashboard" and "overlay".

In the end, I feel fortunate that our community is willing to experiment and break things to stay relevant. Most recently, with the release of Drupal 8, we've made many big changes that will fuel Drupal's continued adoption. I believe we got a lot of things right in Drupal 8 and that we are on the brink of another new and bright era for Drupal.

I've undergone a lot of personal reinvention over the past 15 years too. In the early days, I spent all my time writing code and building I quickly learned that a successful open source project requires much more than writing code. As Drupal started to grow, I found myself an "accidental leader" and worried about our culture, scaling the project, attracting a strong team of contributors, focusing more and more on Drupal's end-users, growing the commercial ecosystem around Drupal, starting the Drupal Association, and providing vision. Today, I wear a lot of different hats: manager of people and projects, evangelist, fundraiser, sponsor, public speaker, and BDFL. At times, it is difficult and overwhelming, but I would not want it any other way. I want to continue to push Drupal to reach new heights and new goals.

Today we risk losing much of the privacy, serendipity and freedom of the web we know. As the web evolves from a luxury to a basic human right, it's important that we treat it that way. To increase our impact, we have to continue to make Drupal easier to use. I'd love to help build a world where people's privacy is safe and Drupal is more approachable. And as the pace of innovation continues to accelerate, we have to think even more about how to scale the project, remain agile and encourage experimentation. I think about these issues a lot, and am fortunate enough to work with some of the smartest people I know to build the best possible version of the web.

So, here is to another 15 years of evolution, reinvention, and continued growth. No one knows what the web will look like 15 years in the future, but we'll keep doing our best to guide Drupal responsibly.

Jan 15 2016
Jan 15


We at erdfisch are very excited to announce that the Drupal Business and Community Days will take place in Heidelberg, Germany from 8-10 April 2016.

This is part of a series of blog postings explaining what we want to achieve with this event.

Business and Community Days - a new format

Firstly, a few words about the format of the Business and Community Days, because the format is slightly different from a usual Drupal camp. Over the years, a standard Drupal camp weekend format has evolved, where on Friday there is a business day, and then the community part takes place on Saturday, and Sunday morning.

For the "Drupal Business and Community Days" we are trying out a different format for the first time, with two separate tracks running parallel:

  • The Business Days are on Friday, Saturday and Sunday morning - in Heidelberg, this will be an opportunity for the German-speaking Drupal Business Community to get together, and work on strategies for growing Drupal within Germany, Austria and Switzerland. In Germany, Drupal has an amazing developer community, but it is not as well known as a business product as it is in other countries. We need to work on that! (Please note - the Business Days part will take place in German language).

  • The Community Days are also on Friday, Saturday and Sunday morning. It will be in English, German, and hopefully a few more languages. The community event will have a focus on core, translation, and D8 User Guide sprints. We want to make it as inclusive as we can. If you have not contributed code or documentation to Drupal up to now, or if you are a little rusty, there will be mentors here to help you get started!

The rest of this blog post is about the Community Days.

Community Days in Heidelberg

The dream is to have an community event which has a "mini-Dev-Days" feeling, or the kind of feeling that we get on the Friday (Sprint Day) of Drupalcon - where everyone gets the chance to work on a piece of Drupal, making it better. A feeling of everyone being productive together.

I've already mentioned how awesome the community is in this part of the world. I moved to Germany from London three years ago, and I have always had the impression that our developer community here is excellent. What we need to encourage more, is to make the community wider. It can be hard sometimes to find a way to get involved, especially if you are not primarily a developer.

Making sprints more accessible

One of my Drupal heroes is Jennifer Hodgdon. My first large-scale Drupal event was Drupalcon London in 2011. I was still quite fresh to Drupal (I had been developing on Microsoft ASP.Net up to that time). I was full of enthusiasm and energy, but short on understanding. I discovered that going to the presentations wasn't so satisfying for me, but that the BoFs (Birds-of-a-feather sessions) were where the action was. I went to a BoF on Documentation and Jennifer said "come to the code sprint on Friday".

At the code sprint, Jennifer single-handedly managed about 40 people, putting us together with each other in small groups so we could help each other make progress. The two people in my little team are still my friends today. We worked on documentation patches and learned a lot together. It seems so strange writing this, but I felt a kind of "high" knowing that my changes would go into Drupal and then be on millions of computers some day. That was the day I felt "committed" to Drupal - I knew that it was a thing I wanted to continue to work with in the future.

At the other Drupalcons I have attended (Munich and Barcelona) the Friday was always the highlight. On that day, you meet great people. In 2014 I went to the Dev Days in Szeged, and it was the same feeling but for a whole week!

So that's what we are aiming for with the Community part of DBCD16. Let's see how well we can achieve it. We are helped by the fact that the location is so good - we have accommodation and food on-site. Heidelberg Youth Hostel was the location for DebConf15 and the Debian people loved it.

Drupal 8 User Guide Sprints

If I'm honest, you will not likely find me in the "hard" sprints. Over the past few months, I have been contributing in my free time to the Drupal 8 User Guide project, which is being led by Jennifer Hodgdon and Joe Shindelar. The aim is to have an open-source, version-controlled guide for Drupal site-builders. Once the English-language guide is ready, every language community can start translating it into their own language. So we will end up with a user guide for site-builders all over the world!

Every contribution to the guide gets a full commit credit and helps your company's ranking on its page (you can see my very, very modest efforts here).

Featured community participants

We asked Jennifer and Joe to nominate people in Europe who could help with a Drupal 8 User Guide sprint - so ifrik and batigolix will be joining us for that.

My partner-in-crime for the Community Days is my awesome erdfisch colleague Tobias Stöckler (tstoeckler). Tobias is closely involved with core, so will have more to say about the core code sprints in Heidelberg!

Tobias and I were kindly allocated a budget to invite some community members to join us. These are people who have done a lot for the Drupal community in Europe. So I'm pleased to say these people will be joining us too: zsofi.major, emma.maria and ckrina.

Hope to see you there, too! Get your tickets before the end of January so that you can take advantage of the early bird pricing.

Sign up for our newsletter and follow @DrupalBCDays on twitter.

We're looking forward to welcoming you to Heidelberg in April!

Jan 14 2016
Jan 14

By Steve Burge 14 January 2016

Show Drupal Content Only With Terms of Specific Depth

It is possible to allow Views to show only content that has child terms from a taxonomy?

Yes, it is. This is similar but slightly different to our tutorial on using Views to show only child terms.

First, you need to have your site set up correctly. You will need:

  • A taxonomy that has parent and child terms, as in this example below.
  • A content type that uses this taxonomy as a "Term reference" field. 
  • Content that is tagged with these taxonomy terms.
A Drupal taxonomy with child terms

Let's show you how to set up Views so that only content with child terms. In this example, the content needs terms such as Amphibians, Birds, Fish, Mammals, Reptiles.

  • Go to Structure > Views > Add new view.
  • Create a View that shows Content of the type that you want to show:
Creating a new view to show content with child terms
  • Click "Add" next to Relationships.
Adding a relationship to Views in Drupal
  • Search for "Content: Taxonomy terms on node":
Adding Content: Taxonomy terms on node to Views
  • Choose your taxonomy.
  • Click "Apply (All displays)" to save your relationship.
Choosing a taxonomy in a Views relationship
  • Click "Add" next to Filter Criteria.
Adding a filter criteria to Views
  • Search for "Taxonomy term: Parent term".
  • Click "Apply (All displays)".
Adding Taxonomy term: Parent term as a Views filter

Now the "Value" in this next step the key to the process.

  • The top level taxonomy terms have a value 0.
  • The second level terms have a value of 1.
  • The third level terms have a value of 2 etc.

This tutorial on Delta in Drupal explains more.

So if we want to ignore the parent terms, we choose "Is greater than or equal to" and then enter a "Value" of 1.

Configuring a Taxonomy term: Parent term filter
  • Save the filter and save your view.
  • You should now see that the parent terms are ignored:
A Drupal view showing only content with a child term

About the author

Steve is the founder of OSTraining. Originally from the UK, he now lives in Sarasota in the USA. He was a teacher for many years before starting OSTraining. Steve wrote the best-selling Drupal and Joomla books.

Jan 14 2016
Jan 14

By Steve Burge 14 January 2016

Show Only Specific Levels of Taxonomy in Views

One OSTraining member asked us this question:

How can I set the filter criteria so that Views shows only the second level in of a taxonomy?

We've had that question from other members before, so here's a tutorial explaining how it's done.

First, you need a taxonomy that has parent and child terms, as in this example:

Drupal taxonomy with parent and child terms

Let's show you how to set up Views so that only the child terms show: Amphibians, Birds, Fish, Mammmals, Reptiles.

  • Go to Structure > Views > Add new view.
  • Create a View that shows "Taxonomy terms".
creating a Drupal view with taxonomy terms
  • Click "Add" next to Filter Criteria.
Adding a new filter criteria in Drupal views
  • Search for "Taxonomy term: Parent term".
  • Click "Apply (All displays)".
Add Taxonomy term: Parent term in Views

Now the "Value" in this next step the key to the process.

  • The top level taxonomy terms have a value 0.
  • The second level terms have a value of 1.
  • The third level terms have a value of 2 etc.

This tutorial on Delta in Drupal explains more.

So if we want to ignore the parent terms, we choose "Is greater than or equal to" and then enter a "Value" of 1.

Choosing a value for Taxonomy term: Parent term in Views
  • Save the filter and save your view.
  • You should now see that the parent terms are ignored:
A Drupal view with only child terms

About the author

Steve is the founder of OSTraining. Originally from the UK, he now lives in Sarasota in the USA. He was a teacher for many years before starting OSTraining. Steve wrote the best-selling Drupal and Joomla books.

Jan 14 2016
Jan 14
Matt & Mike talk with Acquia's Preston So, Chapter Three's Drew Bolles, and Lullabot's own Sally Young on the possibility of a front-end JavaScript framework in Drupal core, and what that would look like.
Jan 14 2016
Jan 14

Tim Millwood

Appnovator Tim Millwood, Senior Drupal Developer, sat down with Brian Lewis of to talk Drupal and Composer on Episode 151: Using Composer to Build Drupal Sites Fast - Modules Unraveled Podcast.

Tim and Brian discuss Composer, what you can you do with Composer on a Drupal site, and much, much more, including Use Cases. 

In 2013, a key member of the Drupal community and a core contributor to the Drupal 8 project, Larry Garfield put forth a challenge to "get off the island", urging Drupal devotees to get involved in the wider PHP community to learn, grow and share new ideas. The community responded: Drupal 8 has more than 200 improvements that will bring new capabilities and efficiencies to virtually any type of implementation, large or small and includes the adoption of non-Drupal projects in Drupal 8 core. 

Today, Composer is being used by hundreds and thousands of projects large and small, including Drupal.

Tim's no stranger to Drupal 8 & Composer, having written about both topics on his own blog:

"Composer is here in Drupal 8 and it’s awesome. You can run, develop and deploy your whole Drupal 8 project with Composer. You can add and patch contrib and custom module, as well as themes, profiles and other PHP packages. The drupal/couchdb_statistics module mentioned earlier requires a couchdb client, this will all get pulled in via composer with a single command."

Tim's experience with Drupal comes from approximately 7 years of working with the platform developing and consulting on some of the biggest Drupal sites in the world. He also takes an active role in the Drupal community, maintaining both core and contributed modules. Tim has attended several Drupalcons and he was even Co-Lead for Drupalcon 2011 based in London.

You can find Tim on Twitter or

Jan 14 2016
Jan 14

Winston Churchill

While I fully realize it’s not fair to compare a major turning point at an organization to one in an existential battle over the future of the civilized world, Winston Churchill was clearly onto something. At this point, the news is out that Sean is leaving ThinkShout. I still wince when I see those words, although we’re all getting used to the idea.

In my mind, the "beginning" in this case is the early stages of a company started by a couple of guys with a vague notion of wanting to do well by doing good. At this point, ThinkShout is so much more. It is 22 intelligent, compassionate, talented, and dedicated professionals. It is a collection of accumulated knowledge and processes that allow us to partner with organizations like the Southern Poverty Law Center that we look upon with awe and respect. It is the combined innovation of 60,000 websites running on our contributions. It is the experience and insights we can offer on how to best use those tools.

As we built this company, Sean and I were often challenged by mentors and our leadership team on what our goals were for ThinkShout. The answers varied over the years, but one key point was consistent: we both dreamed of building an organization that was much more than either of us, that could live on when we inevitably moved on.

For Sean, that time is now. And, even though he’s incredibly humble and won’t say it himself, he’s leaving with his head held high, incredibly proud of having accomplished what he set out to do.

I can’t thank him enough for going on this journey with me these past 6 years. I don’t want to sugarcoat things. There have plenty of challenges, as there are in any relationship, but Sean’s been a wonderful business partner. He’s challenged me in countless ways, supported me when I’ve been down, and done the dirty work to make the business run when I’ve played the prima donna engineer role. In short, he’s set ThinkShout up for amazing success as he moves on. And for that, we’re all grateful.

Alright, so that’s the beginning. What’s next?

As part of Sean’s transition, we’ve made a number of promotions that were already under consideration that I’m incredibly proud to announce here.

Brett Meyer, Chief Strategy Officer

Brett will run point on our business development efforts, as well as continue to lead our strategy and UX teams. He will work closely with Stephanie Gutowski, who was recently promoted to Marketing Manager. He will also support Natania LeClerc, who will lead ThinkShout’s new digital fundraising practice area. We’re also growing our strategy team, with an immediate opening for a Senior UX Designer and more to come. Brett has been pivotal in getting ThinkShout to where it is today and his ascension to this leadership position is well deserved. He crafts our solutions in the sales process and during discovery, leads our UX and IA practice, and is a well-recognized thought leader in the nonprofit technology community. Just try getting a seat during one of his talks at the Nonprofit Technology Conference.

Alex MacMillan, Chief Operating Officer

In her role as Director of Project Management, Alex has led our PM team, defined our project delivery process, and managed resource allocation. In her 2 years with us, she has become the heartbeat of our projects, drastically increasing client satisfaction and project success rates. As COO, she’ll also take on oversight over the financial health of individual projects and the company as a whole. We’re also growing our project management team, looking for another senior project manager to partner with our clients to help them have a positive impact.

With Alex’s new role, Krista Van Veen, who has been our Operations Manager, has a new title: Manager of Culture and People. This represents her focus on HR, recruiting, and community engagement, although she’ll continue to play a critical role in managing ThinkShout’s finances. Krista has worked hard to convert our vision and values into actual cultural changes, as demonstrated by her leadership in attaining our recent B Corp certification.

Tauno Hogue, Chief Technology Officer

Tauno is ThinkShout’s most senior employee, having been with us, quite literally, since the beginning. In that time, he’s grown from a talented developer into the leader of our engineering team. He takes on some of our most complex technical challenges, provides mentorship, and helps define our development workflow. In his new role as CTO, he’ll continuing doing more of the same, along with ensuring that we continue to offer innovative open source solutions for our forward-thinking clients. And, you guessed it, we’re also hiring on the engineering side of things.

Given that I had the title of CTO, clearly something else has to change. I am assuming Chief Executive Officer (CEO) responsibilities. This will entail setting the strategic direction of the company in partnership with the leadership team, along with being an external representative of ThinkShout. Most importantly to me, I will remain very actively involved in crafting innovative technical solutions for the challenges facing our clients. But, really, my biggest job will be to stay out of the way of the amazing leadership that we now have in place.

"To improve is to change; to be perfect is to change often."

- Winston Churchill

Sticking with the Churchill theme, it’s important to note that this is far from the end of the changes that we expect to see at ThinkShout in the coming months.

First, and I mean this sincerely, there is absolutely nothing that we are doing perfectly. Far from it. We’ll continue to iterate on everything, including our organizational structure. We’re going to get some stuff wrong, and we’ll adjust accordingly.

But, on the whole, I have never been more confident in, and excited for, the future. We’re due to kick off our largest project yet with an organization that we’ve all dreamed of working with. We have four Drupal 8 projects lined up to kick off in Q1. We’re launching a new Digital Fundraising practice area. We’re welcoming five new team members over the next few months.

None of this would be possible without everything that Sean has put into ThinkShout up to this point. For that, we thank him. And we wish him luck on his next grand adventure – which, rumor has it, might involve pickling or waxed canvas accessories... Stay tuned, I know it will be great.

Jan 14 2016
Jan 14

Dropcast: Episode 15 - International Front End with @mortendk

This week we have gone international with @MortenDK, who may or may not have an actual last name. He resides and is joining us from Denmark! Mario will be talking about all things front end with him while the rest of us nod our heads and pretend to understand. We have actual content in the Mail Drop, some of the great Drupal news that happened over the holidays, and of course, Ryan wraps this all up on the Final Bell.

Episode 15 Audio Download Link


Mediacurrent Blog Mentions:

Special Guest MortenDK:

  1. Tell us a little about yourself. Where are you from? How long have you been working as a developer? How did you get involved with Drupal?

  2. Given the amount of travel you do, I don’t think I am the only one who wonders how you make money :-). Tell us the type of projects you work on and what kind of teams you usually work with.

  3. What exactly was your role in the release of D8 from a front-end point of view?

  4. We all have our own complaints about how Drupal does things (whether it is front-end or back-end), but what was your primary motivator to get involved with D8’s front-end improvements?

  5. Is there anything about D8 that you wish you would have had more time to work on or campaign more about now that D8 is officially released?

  6. What D8 improvements do you feel are high priority and how can one get involved to help out?

  7. Do you have any recommendations for training on D8 (front-end or back-end)?

  8. In your opinion, what can we expect from D8 in the coming years as far as improvements?

  9. Are there any initiatives related to D8 or Drupal in general that you would like to point out to the community to make things better?

  10. Are you going to SANDCamp?


  • John Cloys
    Hi Guys,
    Thank you for your podcast, great content, and very useful insights and tips. I wanted to ask what everyone is most excited about in D8? While I imagine it can vary from role to role (DevOps vs. Site Builder) I wanted to get a pulse of what everyone thinking and for what reasons. Additionally, just wanted to mention that DrupalCamp NJ is 1/30 and more info is at
    Happy Holidays!

    John Cloys
    Principal Partner, Clean Slate Partners

Pro Project Pick:

Normal Drupal News Not Exclusively About D8:

The Final Bell:

  • Drupical. Is anyone planning on attending a global sprint in January?

  • The Need for Developers is Going Up - Way Up (Drupal Easy)

  • SANDcamp is February 24 to 27th, 2016 in San Diego, California.
    Mark, Bob, and Mario will be there and may or may not be speaking (depending on the time you load the page).

Jan 14 2016
Jan 14

As most of my friends and colleagues in the Drupal and nonprofit technology communities know, I joyously became a dad about a year and a half ago. Stepping into fatherhood involved a move to Denver, away from our Portland-based team at ThinkShout. Since then, I’ve flown over 100,000 miles, juggling my responsibilities as CEO at ThinkShout with those as a parent in Colorado. It’s been tricky to say the least. I am incredibly thankful for the support of my team, especially that of my thoughtful and always encouraging business partner, Lev Tsypin.

That said, it’s time for a change. It’s time for me to be fully present in Colorado, focused on my family, embracing this new community.

After a lot of conversation with Lev over the past few months, I have decided to step down as CEO at ThinkShout. I have handed over my ownership for an incremental buyout that keeps the company in a strong place financially.

I will continue to serve this team and our clients through this transition for the next three to six months as our Director of Sales. Then, I look forward to taking a break from the world of professional services and technology to try some new things. (Honest to goodness, professional pickling is on my short list. Let’s chat more about that over a beer.)

I will always be an advocate for this incredible team.

I am sad to leave right as we start tackling a new wave of technology challenges with the release of Drupal 8, as we begin to serve exciting new clients like the Humane Society, and as we kick off a new digital fundraising practice area.

At the same time, I could not feel more confident in the future of this company. We have invested heavily the last two years in our management team, organizational structure, and processes. We have attracted talented engineers, project managers, designers, and strategists. While hopefully some folks on staff will notice that I’m gone, as a team, ThinkShout will not miss a beat in serving its mission-driven clients.

ThinkShout will continue telling stories of good people making lasting change. Now I just get to tell ThinkShout’s story as fan and supporter in Colorado.


(My son Ernie is a big fan of ThinkShout, too.)

Jan 14 2016
Jan 14

[{"title":"Free Drupal Training by Valuebound, Bangalore on Drupal Global Training Days on Feb 6th 2016","body":"

We are happy to announce that we are running Drupal training sessions on Saturday, Feb 6th 2016\u00a0as part of the\u00a0Global Training Days<\/a>. The initiative is run by the Drupal Association to introduce newcomers to Drupal.<\/p>\n\n

Come and join us\u00a0to learn about what Drupal does and how it can help you. We will learn about Drupal\u00a0and build our first website live.<\/p>\n\n

What is a Drupal Global Training Day?<\/h4>\n\n

Drupal Global Training Days<\/a> is a worldwide initiative to increase the adoption of Drupal. All across the world, people are teaching and learning Drupal, and sharing that open source love.<\/p>\n\n

What is it?\u00a0<\/h4>\n\n

It's a full day introduction to Drupal. Attendees will leave having successfully built a Drupal site. Part of the Drupal Global Training Day initiative by the Drupal Association.<\/p>\n\n

What we are going to do -<\/p>\n\n

  1. Install Drupal 8 using Acquia Cloud - https:\/\/\/drupal-8<\/li>\n\t
  2. Familiarize ourseleves with the new User Interface and options<\/li>\n\t
  3. Learn about how to create content<\/li>\n\t
  4. Experiment with the inbuilt views as well as image handling<\/li>\n\t
  5. Create new blocks and understand about regions<\/li>\n\t
  6. Manage users<\/li>\n\t
  7. Q&A<\/li>\n<\/ol>

    Whose it for?\u00a0<\/h4>\n\n

    • It's for those interested in taking up Drupal as a career path.<\/li>\n\t
    • Web developers\/designers willing to get started with Drupal.<\/li>\n\t
    • Project managers managing or considering Drupal projects.<\/li>\n\t
    • Decision makers evaluating Drupal.\u00a0<\/li>\n<\/ul>

      Cost?\u00a0It's FREE.<\/strong>\u00a0Venue provided by Valuebound.<\/p>\n\n

      WHY IS THIS SESSION FREE?<\/h4>\n\n

      Introducing Drupal among students and amateur designers free of cost is one of the many ways by which we thank this open source community.<\/em><\/p>\n\n

      Valuebound Interactive is solely dedicated in helping organizations and individuals to adopt Drupal in their operations in the most effective manner. At Valuebound, we believe in giving result oriented training sessions which will help you to build impeccable websites.<\/p>\n\n

      Limited availability to ensure personal guidance throughout the day.<\/p>\n","meta_tags":"{\"title\":\"Free Drupal Training by Valuebound, Bangalore on Drupal Global Training Days on Feb 6th 2016 | Valuebound\",\"description\":\"We are happy to announce that we are running Drupal training sessions on Saturday, Feb 6th 2016\\u00a0as part of the\\u00a0Global Training Days. The initiative is run by the Drupal Association to introduce newcomers to Drupal.\",\"abstract\":\"We are happy to announce that we are running Drupal training sessions on Saturday, Feb 6th 2016\\u00a0as part of the\\u00a0Global Training Days. The initiative is run by the Drupal Association to introduce newcomers to Drupal.\"}","author":"Bindhu.SK","image":" http:\/\/\/sites\/default\/files\/2016-01\/da-global-training-days-rgb.png\n","module_link":"","created":"14 January, 2016"}]

Jan 14 2016
Jan 14

By Steve Burge 13 January 2016

Use Views to Show Content Created by Drupal Users

One OSTraining member wanted to allow site admins to show the content created by different users.

For example, the admins wanted to see all the articles written by a particular user, or all the orders they made in the store.

I'm going to make this happen by creating a search page using Views.

First, make sure that users are associated with your content, as in the example below:

List of Drupal content with authors
  • Go to Structure > Views > Create new view.
  • Choose to Show "Content".
  • The other settings you can choose according to your needs.
Creating a Drupal view to show content
  • Under the "Advanced" tab on the right-hand side, click "Add" next to "Relationships":
Adding a relationship in Drupal views
  • Search for and choose the "Content: Author" relationship.
  • Click "Apply (All displays)" twice to save the relationship.
choose the "Content: Author" relationship in Drupal views
  • On the left-hand side, under Filter Criteria, click "Add".
Add a Filter Criteria in Drupal Views
  • Search for and choose "User: Name (raw)".
  • Click "Apply (All displays)".
Choose "User: Name (raw)" in Drupal views
  • Check the box, "Expose this filter to visitors, to allow them to change it".
  • Click "Apply (All displays)".
Exposing a Drupal filter to visitors
  • Save your view.
  • Visit the view on the front of your site, and you should be able to search for users' content, using the exposed filter:
A completed Drupal view showing content per user

Pro tip: inside the View, set "Use Ajax" to "Yes" under the "Advanced" tab on the right-hand side. This will allow the search to load without refreshing the whole page.

Use Ajax in Drupal Views

About the author

Steve is the founder of OSTraining. Originally from the UK, he now lives in Sarasota in the USA. He was a teacher for many years before starting OSTraining. Steve wrote the best-selling Drupal and Joomla books.

Jan 14 2016
Jan 14

By Steve Burge 13 January 2016

Count the Total Number of Results in Drupal Views

One of our members wondered if it was possible to automatically calculate the number of results displayed in a View.

Yes, this is definitely possible. To make this work, you will need Views, plus also the Token module installed.

Start with a long list of entries in a View, as in the image below:

List of Drupal content to be counted
  • Go to edit the view.
  • Click "Add" next to either "Header" or "Footer" in the center of the view:
Header and Footer area of Drupal views
  • Choose "Global: Result summary"
  • Click "Apply (All displays)"
Drupal views and Global: Result summary

On the next screen, you can chose tokens to put into the "Display" area. Here are the tokens you can use:

@start -- the initial record number in the set
@end -- the last record number in the set
@total -- the total records in the set
@name -- the human-readable name of the view
@per_page -- the number of items per page
@current_page -- the current page number
@current_record_count -- the current page record count
@page_count -- the total page count

Once you've chosen your options, click "Apply (All displays)".

Tokens in Drupal Global Result Summary

Save your view and you'll now see that the number of results is automatically calculated:

Drupal view with counter of total results

About the author

Steve is the founder of OSTraining. Originally from the UK, he now lives in Sarasota in the USA. He was a teacher for many years before starting OSTraining. Steve wrote the best-selling Drupal and Joomla books.

Jan 13 2016
Jan 13

In its current form, the main purpose is to allow you to take a copy of live site and create a development site.

Here's the explanation from

"The goal of the configuration system in Drupal 8 is to make taking a copy of the site configuration easy to set up a development site where you make changes. Then importing those changes on the live site is also made simple."

So, in practice, the "Full archive" will be the only option that most people use. again:

"The full export feature is a lot more powerful. You can download an archive of all the active configuration files with this feature. This can be used to import on a development site (given the two sites are copies of each other) to import, synchronize, make changes, package up again and import and synchronize back on the live site as well."

If you do want to use the Configuration Management to recreate a live site and as a development site, here's the 5-step process recommended by

  1. Install Drupal 8. We will call this site "Live."
  2. Make a copy of this site (We'll call this "Development"). Make the copy by using the same source code, the files directory and a database dump of the Live site imported on Development.
  3. Using the Configuration Management interface, export the full Development site configuration. This will create a compressed file called config.tar.gz.
  4. On the Live site, use the Configuration Management interface to navigate to and import the compressed file.
  5. After upload, review the changes (as in the image below) and click the "Import all" button.
Jan 13 2016
Jan 13

Recently we noticed how some of our Drupal 7 sites displayed broken images. After further inspection, all these images appeared to be image styles which were converted from one format to another using the ImageCache Actions module. This is pretty commong when you need an image which has a mask applied to in order to cut-out a transparant PNG version.

Also, the broken images only appeared in Internet Explorer up to version 11 (what's new...). Other browsers were unaffected. But all this information didn't make sense. Why started images to appear broken all of the sudden? IE9 or IE10 sure as hell did not change so it must have been something else.

Zooming in on the imagecache actions module and its convert action. The thing is, Drupal 7 does not actually change the file extension of the image, it only changes the MIME-type. So an image is with extension .jpg is rendered as PNG. This is respected by all browsers, even older one like IE9. It might be a bit weird, and people tried to fix it, but there does not seem to be a way to do this in a clean non-hackish way. 

So how come this "suddenly" stopped working? Enter october 2015 and Drupal 7.40. This maintenance release included one alteration to your default .htaccess file, adding a nosniff header because it is an attack vector. But adding this also prevents IE (up to 11) to detect the right file-type for images like these, which results in broken images. Other projects have recently reported this issue as well.

The quick fix is easy, just remove the header. I'm not sure about the security implications but since 7.40 was a maintenance release and not a security release, they should be minor. Maybe somebody else can shed some light on this.

The longer fix is upgrading to Drupal 8 which has this problem fixed by actually changing the extension of the image, or revisiting the issue mentioned above trying to fix this in Drupal 7.

Jan 13 2016
Jan 13

Part 2 of 2 - Sharing is good for business. Ambrosia Vertesti, Global VP Human Resources at Hootsuite, and I sat down to talk about how open source models are spreading to human resources and other, non-code parts of business today. In part one, I strove to understand HR's needs, terminology, and perspective and what drew Ambrosia and her peers to open source. In part two, our conversation moves on to how open source values like sharing and contribution are helping human resources and a lot more about #HROS.

"The How isn't competitive intelligence. That should be baseline."

I learned about the #HROS movement watching Ambrosia and Lars Schmidt co-present the keynote address at LinkedIn's 2015 Talent Connect conference. Check that video out!

Interview video - 22 min.

[embedded content]

#HROS - Sharing The How

The sharing and contributing aspects of #HROS--the stuff that makes it "open source"--came about out of necessity, just like so many open source software projects and tools. When she was hired as the 20th employee, Ambrosia was the sole HR person at Hootsuite and she was responsible for four other departments ... Welcome to startups! She lacked time and resources and turned to her network for help. "I was in Vancouver. We weren't in the epicenter of innovation and startups. We were in a place that the ecosystem was just growing around us. We needed to collaborate. I was empowered by our founder to take risks and find a different way to do HR. This was my opportunity to see if this thing is real!"

"It started out of necessity and being empowered to take a risk. That was me reaching out to people. 'I'm the only person here. I'm trying to find a way to do things.' I explained the problem I had and asked, 'Do you have The How?' Because a lot of times, people talk about why you should do something and what you should do. If you read Forbes articles about best workplaces and all that kind of stuff, like 'Performance Management Should be Dead!' And I say okay, but how are you going to ensure that you have a high-performance culture that is fair and equitable? So The How is missing from anything you read online. And in safe-safe circles, behind closed doors, people were telling me The How."

"The How isn't competitive intelligence. That should be baseline." Ambrosia recognized that this practical information--what she calls "The How"--is like the code in open source software. It doesn't give you a competitive advantage over others, that all lies in other areas, just like we can all use Linux or Drupal to level the playing field and then compete on other areas of differentiation. "Competitive intelligence is me taking that and making sure it fits with my organization ... I've probably combined it with 4 or 5 other Hows ... It's alchemy. There are things I see as competitive intelligence: compensation, stuff like that."

Opening up - asking for help, giving help

I wanted to know how Ambrosia's peers reacted when she opened up to them about her needs, problems, and challenges. She told me, "I found they were very collaborative. My experience has been that anybody I ever sent a Bat-Signal out, asking for help, people have come and helped me. And then I've reciprocated when I was able to." Ambrosia could swap, for example, her expertise in the world of social media for someone else's experience of policy scalability at large corporations. "It was really about equal value propositions. It wasn't just about solving a need. I felt as though we could give something back and that every HR practitioner would have something they're up against," this sounds so familiar to me from the development and website-building world, "and that they could give an equal-value reciprocity ... if the got over themselves and the stereotypes and the reputation."

#HROS isn't the first time HR practitioners have ever shared or collaborated, but Ambrosia explains, "My thought was that we could bring this out into the practitioners' space instead of it being a group of people who were ... sharing because we know each other. What if you're an emerging practitioner? It was a way to even the playing field and a way to showcase that HR is very innovative and they are very collaborative and they do want to support each other. And that nobody does have the perfect answer, so let's all work on it together ... and openly."

Partnerships: external and internal

At Hootsuite, Ambrosia is extending this idea to collaborating with employees to improve internal systems and processes, too. "For me and a lot of HR practitioners, the stuff that is servicing people's daily jobs and removing roadblocks and empowering them should be done in collaboration, it should be done openly, and it should be up for debate."

"As HR practitioners, you need to be connected to your employees because they're your customers. So if our team sees us saying 'We did this thing and here's the parts that we missed,' now I've been humanized to them. Now, they're able to come and tell me when things might not be perfect because I'm not projecting and I'm not posturing and I'm not guarding against it. There are things in your job HR that are very serious, very regulated, very compliance-driven, but there are sandboxes where you can have a lot of fun and you can really connect with people. And we want to put some of those things out there to educate not only HR people, but employees, because the more they understand about our profession, the more they understand how we can work together to build a culture and a company that we both want to be at."

What are the geeks getting right?

"What are the geeks getting right? High level: The mindset of 'We're all in this together. Let's work on this together. Let's support and share.' ... Those are things that business should be taking into their practices. We're all intellectual capital businesses, those fundamental practices create amazing workflows and better businesses. The engineers got that right. At the very highest level, that is the right mentality to build your business on.

Guest dossier

  • Name: Ambrosia Vertesi
  • Work affiliation: Global VP, Human Resources, Hootsuite
  • Twitter: @hambrody
  • LinkedIn: Ambrosia Vertesi
  • Current projects: #singitfwd "Music changes lives. Pass it on."
  • About: Over the past five years running HR for Hootsuite--and growing it from 20 to 1000+ employees!--Ambrosia Vertesi has had to figure out how to keep up with Hootsuite's enormous growth. Dealing with the challenging realities that many of us face at startups, like limited resources, budgets, and (perceived) talent shortages, forced her to get creative. Along the way, she and a group of her peers noticed that software professionals had institutionalized the way they benefitted from swapping favors, and connections to get things done: Open Source HR (#HROS) was born!
Jan 13 2016
Jan 13

Last year we decided to change WalkHub from a feature rich, but difficult to maintain Drupal distribution to a microservice written in Go. This was a hard decision: at Pronovix we’ve been a Drupal shop for over 9 years now and we were also slashing quite a few features in the porting process, but we felt it was the right thing to do. In this blogpost I want to explain why we took this step and what the result is.

Ever since we launched WalkHub, one of the key feedbacks we received from our customers was that it was too difficult to start recording Walkthroughs. Installing your own WalkHub instance was a complex process. Many people also complained that they would never be able to justify maintaining a Drupal site for Walkthrough management alone.

On top of that we were running into a lot of technical debt with Drupal: while Drupal was a great choice for the initial prototype for WalkHub, we were seeing significant technical debt using Drupal 7 as the API provider. It is important to note that serving Walkthroughs is not a typical Drupal use case, and we were required to write a lot of custom code to make WalkHub work. As a result our development was being held back because of our technology stack.

Third, we were getting feedback from the market that Walkthroughs are just one type of embedded help. Customers came to us because they wanted to try WalkHub to solve a documentation issue often caused by a bad user experience, but Walkthroughs alone cannot solve that problem. Walkthroughs are great for task-oriented help topics, with a sequence of steps that need to be taken. Walkthroughs are not the right tool for conceptual and reference topics. People kept asking us how they could embed videos and text into Walkthroughs. The job people needed WalkHub to do was to offer help inside of an application, whatever format that help took.

For these 3 reasons we concluded we needed to refactor WalkHub. We decided that this time around we wanted WalkHub to be super lightweight, something that anybody would be able to add into an existing help/documentation system. That is why we chose Go and React.js with a PostgreSQL database. Go allowed us to make a single executable for the back-end that could easily be deployed. And we wanted to be able to run our own WalkHub on the same software as the open source package: this is why we prioritised support for a scalable PostgreSQL database over SQLite which might have been even easier to deploy.

WalkHub still has a Javascript front-end that records and plays Walkthroughs. It appears on your site as a 'Record' button and a 'Help center'. To test WalkHub on a web application, you can add the code snippet from the embed code generator below that will enable Walkthroughs from on your site (a free service we provide for testing purposes and for reasonably low usage).

In our first Go release, the help center was a WalkHub only thing, but we are about to change this to allow you to make any type of web resource available from an in-app help center. You can see a mock-up of the new help center on the bottom right on this page. In the near future we want to make it available as a free service that makes it really easy to add a help center to your site. Keep an eye open for a post with more information about the help center (you sign up here for the WalkHub mailing list). Spoiler: we are planning to build a Drupal 8 application to run it...

Jan 13 2016
Jan 13
Tags: Github, Drupal, planet

Developer experience is our primary concern with this Drupal 8 version of doing CRM.

We thought we could improve the experience of helping developers contribute to the project. We noticed that for Drupal 8 all the cool kids were moving to hosting their development to github, such as with Drupal Commerce, but even core bits of Drupal.

So we did some investigating and decided to join them. We thought it would be helpful to share a couple of our thoughts and reasons, we are by no means authorities on this!

Getting Started

Being able to work with Github is really nice. Someone can come along to github and easily fork the main repository which is possible on but much easier on github.

No Special Users

We have a principle where “no individuals is special”. On the module maintainers get access to more tools then everyone else. On github everyone is basically the same. In theory someone’s fork may become a bigger deal than the original. This means everyone has the same tools and so the things we do to make lives for our developers easier, everyone else gets to share.

We found that when some developers were maintainers and had access to’s git they had a much nicer experience than the people who had to just download the source code or set up their own git experiences.

Pull Requests

Pull Requests are really nice. We think pull requests are pretty much a nicer way of doing patches as you can just click a few buttons and copy and paste it into the issue queue. With Dreditor it is not a big deal but github keeps track of minor changes to a patch much more effectively especially if multiple people are working on it.

  • Although it does require giving others access to my fork of a project and so we have found that sometimes patches are easier
  • Although if multiple people are working on a pull request, they can do it by forking the pull request owner’s repository and do a pull request with that first!

We definitely still use as the issue queue and turn off all of github’s issue tracking features. We then reference issue numbers in as many commits as possible and certainly all pull requests (We post pull requests in their issue).

One of the committers can, every so often push the “main repository” or any repository to the git repo on


We also use travis-ci to handle tests and will follow up with a more detailed post about how we handle testing.

Jan 13 2016
Jan 13
Tags: drupal 8, planet

Short history of Tests in Drupal

In Drupal 7 it was fairly straight forward what kind of a test you should write, especially for core. It would basically be a simpletest. If you wrote in contrib, you might write a few Behat or PHPUnit tests for your module, but you would either run these tests locally of on some remote testing server such as Jenkins or Travis.

While this was quite good for doing webtests along the lines of ‘create user’, ‘log in’, ‘go to page x’, ‘click on button y’, it was also pretty slow. Every patch on the issue queue could be delayed as much as 3 hours while all the tests ran and during sprint weeks we end up with huge queues of patches waiting to be tested.

Drupal 8 has really stepped up its game. In 2013 it separated our testing into two categories. one for web tests that require a complete or partial Drupal environment - Simpletests, and another for everything else - PHPUnit :) PHPUnit Change Notice

It didn’t take long for there to be several different subclasses for PHPUnit tests in Drupal:
Unit Tests
Kernel Tests
Functional Tests

What now?

So now the question is, “Which test should I be writing”. Here is a quick explanation of the different Test Base classes.

Drupal Test Structure

- TestCase (PHPUnit_Framework_TestCase)
  - \Drupal\KernelTests\KernelTestBase
  - \Drupal\simpletest\BrowserTestBase
  - \Drupal\Tests\UnitTestCase
- \Drupal\simpletest\TestBase
  - \Drupal\simpletest\KernelTestBase
  - \Drupal\simpletest\WebTestBase
    - \Drupal\simpletest\InstallerTestBase

TestCase and TestBase should never be extended directly. They are just structure that the remaining tests extend.

UnitTestCase is what you want if you don’t care about bootstrapping Drupal. All you want to do is test Class methods and make sure that they behave expectedly. Eg. If your method required the first argument to be a string and you pass it an array you get an exception, etc.

Next up we have KernelTestBase, WebTestBase and BrowserTestBase. These all do something towards setting up a Drupal Environment and allowing you to test your code in the wild. KernelTestBase is the simplest as it bootstraps Drupal and sets up a Database, etc. but it doesn’t explicitly install any modules, and so is similar to the environment in the early installer. Any modules that you require are loaded in setUp() and you can perform schema installation as required.

Notice: there are two KernelTestBase classes. \Drupal\simpletest\KernelTestBase has been deprecated for \Drupal\KernelTests\KernelTestBase as part of Drupals continuing battle to modernise its testing and has moved from simpletest to PHPUnit. KernelTestBase Change Notice

Then we get to WebTestBase and BrowserTestBase. They do basically the same thing, as they allow a full installation of Drupal and modules and are webtests so you test the UI through a browser. The general rule of thumb is use WebTestBase. BrowserTestBase is the newest move to modernize testing as it is an attempt to move Browser Testing from simpletest to PHPUnit and Mink BrowserTestBase Change Notice. So if you fancy it, you can give the new framework a go, but it is still work in progress and not going to be used extensively in core until 8.1.x.

And finally there is InstallerTestBase which is useful testing the installation of Drupal based on changes in configuration.

Jan 13 2016
Jan 13

It’s inevitable that from time to time you’ll have to apply patches to core or contrib modules. No matter how hard you try, eventually there will be some bug that you can’t work around or some feature that’s not yet complete but that you desperately need.

Traditionally we’ve always kept a comprehensive readme file stored with our projects that documents all the patches that we’ve applied, along with notes on our reasoning and links to appropriate Drupal issues.

These readme files can get quite long and make managing module updates quite challenging.

Drush Make to the rescue!

We keep two files in our project’s root directory (one level above the docroot): drupal-make.yml and drupal-make.lock.ini


First up, we’re replacing our old markdown file with a Drush Make file, which now supports a Yaml based syntax. We can include all the patches we want to apply in here as follows (with overly-verbose comments):

core: 7.x
api: '2'
# Send projects to sites/all/modules/contrib by default.
    subdir: contrib

# Include our lock file, more on this later.
  - drupal-make.lock.ini

# A list of "special cases". Either modules that we're patching, or whenever
# we're using a dev branch.
      # Prevent notice in entity_metadata_no_hook_node_access() when node is not saved
      - ''
    # Using dev version because Devel hasn't had a release in a long time.
    version: 1.x-dev


To make our Make file complete we also need to include details of all the other installed modules. Drush is able to generate this for us (hence the .lock extension, borrowed from composer’s .lock file)

To make this file, simply run:

drush @vdd make-generate ../drupal-make.lock.ini

(note that we’re using VDD and that we keep these files one level above the docroot)

Now theoretically you no longer need to commit Drupal core or any contrib modules to your repository – the make files describe in enough detail where to get all the code from.

 To rebuild Drupal, try the following:

drush @vdd make ../drupal-make.yml

Or, if you’re applying just one patch and want a quicker process:

drush @vdd make --no-core --projects=mymodule ../drupal-make.yml

When it comes to running module updates you’ve got two choices. Either run drush up as you probably do now, then when you're done just run the make-generate tool to get a new lock file, or use make-update to run the updates in the lock file.

To keep the execution of these tools bundled up in one place, we keep a (not to be confused with Drush) Makefile in our project root:

DRUSH_ARGS= -y --nocolor
	chmod u+w docroot/sites/default/ docroot/sites/default/settings.php
	cd docroot && \
	  drush $(DRUSH_ARGS) make ../drupal-make.yml
	cd docroot && \
	  drush @$(ENVIRONMENT) $(DRUSH_ARGS) make-generate ../drupal-make.lock.ini
	cd docroot && \
	  drush $(DRUSH_ARGS) make --no-core --projects=$(MODULES) ../drupal-make.yml
Jan 13 2016
Jan 13

We continue our journey of Drupal with a quick look at the administration toolbar - in other words, the menu of Drupal. I explain what the different parts mean and what you can expect to find behind the top menu items.

Read more
Jan 13 2016
Jan 13


The Indian Drupal Community is all excited about DrupalCon India! The event will be help in IIT Mumbai between 18th Feb to 21st Feb. It is just a little over a month away and it is not too late to plan participating in DrupalCon. It is an excellent oppertunity to meet the larger Drupal community from across the globe and also the Indian Drupal counterparts .

Dries came to India for the very first time in 2011 to Drupalcamp Deccan. This brought a lot of awareness and a big opportunity to the Indian Drupal community. Checkout his blog on Drupal + India = Opportunity.

The Drupal Association has been working very closely with the Indian community for over a year to make this event happen. You can get details of the initial planning of the Drupal Association at  Help Us Plan DrupalCon in India.The Drupal Association worked with Active Commuity members to paln this event.

Did you know the highest no of registered drupalers on are Indians? Did you know the first largest Enterprise portal for UK’s postal service was built by Indian developers? Checkout the blog on Rise of the Drupal Community in India for more interesting facts on the Indian Drupal Community.

More details on the Con itself are available on the  website.

I have been speaking to different Business Owners and stakeholders who have been in the Drupal space with regard to  participating  in DrupalCon. The key aspects of those conversations are given below:

DrupalCon Asia, What’s in it for Business Owners?

You have used Drupal to service your customers and have benefited from this open source solution in different ways.The best way to give back is to the Community is to be a Sponsor at DrupalCon.

The amazing part is that in Sponsoring you gain more.

Here are the gains...

1. You will get Sponsor benefits – based on the sponsorship amount – includes having your name on the DrupalCon website, have a stand at DrupalCon, and such.

2. You can showcase your Organization  in different channels.

3. You can attend thekey sessions in the conference including: Dries Keynote, Business sessions, Case studies and the Business Summit.
Dries Keynote - gives you a flavour of the Direction of Drupal.

4. Interact with other Business owners from your region.

5. Be a part of the Drupal Community.

6. You can avail the oppertunity of participating in the DrupalCon and provide exposure to your developers, QA team, your Infra team, your Marketing. Each of them have something to learn from at the DurpalCon.

The DrupalCon Asia Business calendar


DrupalCon Asia, What’s in it for Developers?

1. You can participate in pre-conference Training programs.

2. Listen to expert sessions from the Global Drupal community. Some of the key Sessions are:

   A. Drupal8 Theming - No more divitis, a session by mortendk - One of the key front end developers of Drupal 8
   B. Everything multilingual in Drupal 8 a session by Gábor Hojtsy - Drupal developer at Acquia, the Drupal 8 multilingual initiative lead.
   C. Six Easy Pieces for the New Front-end Development,a session by John Albin Wilkins,Senior Front-end Developer at PreviousNext and Lead for the Drupal 8 Mobile Initiative
   D. Make your code do your job, a session by Crell aka Larry Garfield, Senior Architect at, an active Drupal core contributor, including the principle architect of the Drupal 7 database system and the Drupal 8 Web Services Lead. He is also a member of the Advisory Board of the Drupal Association.
   E. The largest Drupal 8 sites on Earth, and the NP8 news portal distribution, a session by robertDougless - Director of Products CommerceGuys. He is one of the initial contributor’s of the Apache Solr module.
   F. The Drupal 8 Theming Experience, a session by Coster - An active core contributor and co-maintainer of the theme system in Drupal 8

3. Get updated with the happenings in Drupal and learn about Drupal 8

4. Avaie the chance to get hands on with Drupal 8 – participating in the DrupalCon Sprints

Participating in Sprints lets developers get exposed to higher level of programming, connect with other developers in the community, best practices and more. The initial ladder to contribution is quite steep. By attending DrupalCon Sprints many developers have found answers to how and where they can contribute. They can come back from the DrupalCon and share the learning with the team and the local Drupal Community.

Don’t miss any opportunity to contribute! I have have been there at DrupalCon right from making the tote bags to the sprints and it is a lot of fun!! If you are not a volunteer yet, sign up now.

Jan 13 2016
Jan 13
151 Using Composer to Build Drupal Sites Fast - Modules Unraveled Podcast | Modules Unraveled

Skip to main content


  • What is composer?
    • Dependency Manager for PHP
  • How does it relate to Drush Make?
    • Surprisingly similar
    • “Getting off the island”
  • What can you do with composer on a Drupal site?
    • download dependencies, drupal modules, themes, profiles, drush, external libraries etc
  • How do you download contrib modules?
  • How do you download contrib themes?
  • Can you specify where to download project? ie: modules/contrib and modules/custom?
    • composer/installers & davidbarratt/custom-installer
  • Where do you store custom modules/themes?
    • Two methods: Committing to your repo or creating separate repos
    • Reference repo in you composer.json
    • Toran Proxy
    • davidbarratt/custom-installer
  • How can you specify and download a library to go with a module?
    • module should specify it in composer.json
    • if not submit a patch, and add to your composer.json for now
  • Patches
    • cweagans/composer-patches

Use Cases

  • drupal/drupal vs drupal/core
    • If you want to use the project-repo/web
    • composer create-project drupal/drupal
  • Composer template for Drupal Projects
  • Build sites from scratch with composer install
  • Update drupal/modules/themes/etc. with composer update
Jan 13 2016
Jan 13

By Valentin Garcia 12 January 2016

Jan 13 2016
Jan 13

We're digging into our first dry-run migrations from Drupal 6 to Drupal 8, and learning a lot about what's ready and what's not. And there's some surprises in there...

Surprisingly good

A few of the items migratedFirst of all, Drupal 8 is pretty fantastic out of the box for simple sites. And the amount of stuff that gets migrated from Drupal 6 to Drupal 8 is pretty astonishing -- the migrate devs have done a great job of getting a lot of configuration migrated cleanly in the upgrade.

Configuration management is also insanely great. A couple times we've deployed development things that blew up the site completely, to the point you could not load any page at all -- and a simple config edit let us turn those problem parts off and resume work in a matter of minutes, without even knowing how to recover from this minutes before.

And of course we already knew the editing, authoring, media management, mobile, theming, and overall user experience is a vast improvement over Drupal 7.

Surprisingly close

At DrupalCon Los Angeles last June, and even at this fall's NW Drupal Summit, it seemed that a bunch of large, critical modules were really far off, many not even begun. As I run down the list of modules needed to upgrade some of our Drupal 6 customers, I'm a bit surprised to see a lot of progress on many of these:


In the Drupal 6 to 7 upgrade cycle, the big missing module was Views -- without a stable Views, we didn't find a customer comfortable doing a new site in Drupal 7 until some 10 months after Drupal 7 first came out. Now that Views is in core, Drupal 8 is so much more usable right out of the gate. But over the Drupal 7 cycle we came to adopt Panels on a majority of our sites, and find it invaluable to replace hard-coding stuff in themes, greatly expediting development.

Because we do have to re-build themes for any new Drupal 8 site, migrated or not, tools like Panels are a mainstay.

Panels and Page Manager both have alpha releases available, and an expected milestone of mid-February for having something mostly useful here.

Drupal Commerce

Commerce for Drupal 8 sounded a year off the last I checked, but there's already an alpha release. I suspect it is still a long ways from having the support modules needed to having everything necessary to actually get a Commerce site up and running -- payment gateway modules, rules, and much more. But to have the core Commerce module there and available to start building with is extremely promising.


This is a huge surprise -- I was under the impression there would be no more Ubercart after Drupal 7. But there's an alpha release for Drupal 8 already, too!

I'm sure we'll see similar necessary modules not available for a while -- but for those people still on an older Ubercart, this right away promises to make a much more straightforward upgrade path.

Organic Groups

Organic Groups has a few companies providing part-time dedicated development help to get OG up for Drupal 8, and it looks like development is going very quickly. No releases yet, but it's looking like there will be something working much sooner than I expected.

Surprisingly not there yet

Now, for the let-downs. There's a couple really critical things that still look a ways off. If you need this functionality, you'll either need to wait, or provide budget to help get these across the finish line. (We'd be happy to develop some of these for you, if you have the budget to make it possible!)

Date API

This one is a bit shocking. Drupal core now has date-time fields right out of the box. But they're relatively simple, and missing a bunch from the former "date" contributed module. Specifically, a "to" date-time, and recurring dates.

This means if you want to create any kind of schedule of any kind of event that has any kind of duration, you're out of luck. Dates in Drupal 8 are a single point in time. No class calendars, no schedules, no repeating events, nothing.

Date has always been an extremely buggy, frustrating module to use -- but that largely reflects how tricky it is to program around dates and times and get it right. (I have a whole other blog post brewing on this topic).

The worst part of all this is that I don't see that anyone has stepped up to take ownership over this -- I don't see any sign it will get built any time soon.

Again, if you need this and have some budget to make it possible, drop us a line!


Rules is a fundamental module for any site with anything sophisticated going on. And I would think this would be a relatively easy module to port to Drupal 8, given how it's mainly a structure for stringing together conditions and actions. And yet there seems to be a lot of open issues before we even get to the point of being able to create rules.

We made extensive use of rules, and exporting them to features, to eliminate the need for a lot of one-off custom modules in Drupal 7. It's a bit disappointing to see that it still looks several months off before we'll have a working module here -- and this is going to hold up migrations of lots of complex sites, e-commerce, group sites, and more.

A lot of what rules does can be done in code, but this to some extent takes away some of the admin benefits of using Drupal for these kinds of things in the first place.


Another surprise -- we use Feeds on so many websites, I thought there would be enough demand that there would have been a Drupal 8 release months ago. A Drupal 8 version has been started, but it looks like there's a long way to go before it will be functional. I almost wonder if it's easier to build something on Migrate, now that migrate is in core?

Overall Status

We have yet to complete a migration, and only have a couple internal sites actually launched on Drupal 8 as of right now. But we've done some deep analysis on 3 different Drupal 6 sites so far, and we're figuring on a range of ~50 - 200 hours to do the full migration of some relatively simple Drupal 6 sites to Drupal 8, including building out a new Bootstrap-based theme and migrating all their content. And the high end of that is actually on some sites that were built using a huge number of redundant modules and poor site building practices, allowing budget to sort all of that out.

The biggest thing I'm noticing is that there are a lot of new modules specifically for Drupal 8 that replace different modules for Drupal 6 and 7. So much has changed under the hood, and it does look like there's been a lot of churn among module maintainers, so a lot of modules that aren't there yet for Drupal 8 have alternatives that are ready for use.

Things like:

  • Crop API, Image Widget Crop, EPSACrop for image manipulation all to be available and working, while Manualcrop and several others aren't even started
  • ng_lightbox is ready, Colorbox is in development, Lightbox2 appears to be stalled out
  • yamlforms is in production, Eform mostly works (replacing EntityForm) but Webform is a long ways from being there
  • Media modules are getting completely reorganized. Read this post from the Media folks for more details, much of which works now but needs to get built out.

The other big thing that has changed is the whole deployment process, the behind-the-scenes details of staging updates and moving them from development to stage to production.

We've been hard at work on our automated tools and processes to manage both deployments and testing, and these are going through an incredible amount of change right now. At the same time, we're trying to keep the billable work moving -- it's pretty astonishing how rapidly everything is changing right now.

It's a very exciting time, and there's still a ton of work to be done. If we can help with your web application needs, please reach out and let us know!

Jan 12 2016
Jan 12

Are you utilizing content marketing as a crucial element of your brand building strategy? Are you offering valuable information on your company's blog and social media streams in an effort to establish your online reputation as a knowledgeable business authority?

While offering quality content is critical, it is also imperative you don't allow your inbound marketing efforts to become stale. If you're not tweaking your content marketing strategy on an ongoing basis, your audience can become bored with your outreach efforts. Maintaining an awareness of new tools for digital marketers is an excellent way to ensure your business development efforts don't become stale. Review the following content tools to see which ones you can incorporate into your business' marketing efforts.


Decisive offers predictive analytics for content shared on social media. Understand which social media platforms are most beneficial to your brand, track analytics on both text and visual content, and measure your company's audience outreach efforts against your competitors. With everything from sentiment analysis to comment analytics, Decisive is a powerful tool every savvy content marketer should be investigating.

Product Features:

  • Competitive benchmarking
  • Multi-channel content scoring
  • Email performance updates
  • Commenting engagement analytics

ImageX Content Marketing App Devisively Analytics

SLIDE.LY is a powerful tool for brand builders to easily create professional slideshows. Their fabulous interface lets you create incredible image sliders for your content. Sliders are updated in real-time whenever new content is published. Add images atop existing sliders, place your CTA over top of a background image, or add movement to your sliders with pan and zoom effects. If you're looking for a way to add eye candy to your content, discovering Slidely is highly recommended.

Product Features:

  • Create instant video or photo slideshows (mobile or desktop)
  • Built-in real-time effects for easier slideshow creation
  • Over 80 modern templates and visual art pre-loaded
  • Integrated with social from Facebook and Instagram to SoundCloud and YouTube

IXM Content Marketing and Slideshow Maker Slidely


For content creators hoping to increase their ROI, GrooveJar is an intriguing find. GrooveJar offers a variety of optimization tools for brand builders. Whether you want to increase your email subscriber rate or improve your website conversion stats, you'll love GrooveJar's powerful interface. Automatically show your company's positive reviews from Yelp and Facebook, add simple surveys to your site (just like Twitter surveys), or add a coupon code pop-up banner to your site. With numerous optimization tools at your disposal, GrooveJar can help you improve the efficiency of your site by allowing you to capitalize on opportunities.

Product Features:

  • Pre-built optimizations applications included
  • Collect prospect names and contact info - easily
  • Launch interactive surveys with commenting
  • Deploy personalized call-to-action interstitial ads

ImageX GrooveJar Personalization Ads


Static is an iOS app that allows you to track social media responses to your content marketing offerings. Whether you want to graph increases in your Twitter followers or you want to view reports relevant to responses to your Facebook posts, you can do so with Static. Add your favorite social media channels with ease and start tracking the data thats most important to you. If you need data or a feature, Static makes it easy to send feature requests through to their team.

Product Features:

  • Push notification alerts
  • Email reports and graphs
  • Detail screens and dashboards
  • Subscriptions for unlimited accounts

IXM StaticApp Social Monitoring Tool


If you are considering creating content for distribution within mobile apps, investigating Contentful is highly recommended. Contentful offers an open API, cloud technology, and full-featured content management platform for content creators. Contentful offers both free and paid options.

Product Features:

  • Content is accessible via Contentful API
  • Content is stored in cloud servers
  • Build out customer content models

ImageX Contentful Content CMS and App


By keeping a close eye on engaging resources for content marketers you can ensure you're not just throwing your marketing dollars to the wind. Integrating fresh resources into your audience outreach strategy helps you stay on top of your game and continually interact with your online audience in new ways. Do you think you'll be incorporating any of the above-listed resources into your brand's growth efforts?

Jan 12 2016
Jan 12

ImageX Web Design RFP Process

The Request for Proposal (RFP), is an intricate process that can take months and in some cases, years, of meticulous details and hardships from a team aspiring to overcome dated technology, designs and infrastructure. In the excitement of finally being able source a web design agency, it can be easy to rush the actual RFP document, including the process. Or, worse yet, having it controlled by a separate group who is not affiliated with the project beyond the purchasing process. 

  • What makes for a good RFP? How do we make sure we choose the right agency partner? 
  • How do we involve our team so that we get internal buy in? 
  • How do we ensure we’ll stay within our budget and deliver on time?

A lot hinges around RFPs and selecting the right partner. The RFP and the process for managing it will go a long way in determining your organization's success. 

Let’s review three important components necessary to build a successful RFP process.

1.   Disclosing RFP Budgets

One of the biggest mistakes we see is limited transparency throughout the RFP process especially around budget - a critical disclosure element within a successful RFP process.  At ImageX, one of the more common reasons we come across for not disclosing the budget in the RFP is that the the client wants the market to dictate the price, and that if a number is disclosed all of the proposals will come in at that number. 

Full transparency removes the guesswork

By removing the guesswork we can focus on the solutions.  By not disclosing the budget puts the bidding agencies in a difficult position; requirements in an RFP will almost always be “high level;” enough detail to give you an idea, but not detailed enough to allow you to write development requirements (which is what is required to give a firm estimate). The agency must make a choice; do they assume the “best case scenario” and estimate assuming the most optimistic set of circumstances or do they account for the unknown through more conservative estimates? 

When you open the RFP to enough vendors, you’ll likely see examples of both approaches, and it will be tempting to go with the lower bids. Keep in mind, almost all contracts are “Time & Material,” meaning you will be invoiced for the actual amount of effort it takes, regardless of what the original estimate was. Here’s a few recommendations to ensure a transparent RFP:

  1. Include more details within RFPs. More detail in the RFP =  stronger RFP responses. Outliers, both on the low and high ends of the budget spectrum will be easier to identify if you have more thorough requirements in the RFP, as the responses will be more thorough. There is nothing worse than choosing the winning bid based on an expectation of cost and having the project finish with a drastically higher price.
  2. Identify which requirements are “must haves” vs. “nice to have.”. Again, the more detail the better but this will allow the bidding agencies to show you how the project will be broken up and which requirements require more effort, allowing you to pick the ideal mix of features and functions.
  3. Give a budget range. This allows the agency to tell you what they can give you on the low-end vs. the high-end, and it can also give you another means for evaluating the responses. Where is the agency placing the most value, ie. what are they stripping out for the low-end response? This may help you identify which agencies have the best grasp for the project and its priorities. 

2.   Meeting with Interested Web Design Agencies

Another common mistake we see with RFP’s is the organization either unwilling or not allowed to meet with the agencies interested in bidding on the project. Formal procurement processes sometimes do not allow this to avoid any potential favoritism of vendor selection, and sometimes organizations do not want to have to meet dozens of agencies all asking similar questions.

The challenge with this approach is it doesn’t allow for either the organization or the agency to get to know each other; going back to our original statement that the partnership is more like a relationship than anything else, this is somewhat equivalent to an arranged marriage. There are a number of material advantages to meeting with agencies interested in bidding on your project:

  1. Get to know the personalities. You’ll be working with this team of people everyday for the foreseeable future, and sometimes personalities conflict. If all else is equal between 2-3 finalists, wouldn’t it be great to know who you get along best with to make the final decision?
  2. A better understanding of the RFP requirements = more accurate estimates. Having a Solution Architect review your requirements allows them to understand the logic behind them. Technology, and in particular Drupal, is extremely customizable. The time spent reviewing the requirements will produce better proposals, more accurate estimates and ultimately, a more informed selection of the agency partner.
  3. Get first-hand experience into your potential vendors competencies. By reviewing the proposal with the agency gives you a glimpse into their competencies, communication and project approach. Listening to how they constructed the solution they did, what logic was applied, what assumptions were made, how they communicate and who worked on it will be a good representative sample of how it will be working with that agency. The best proposal writers doesn’t necessarily equal the best delivery (although there is a strong correlation). 

Ultimately, some organizations will not have the opportunity to engage with bidding agencies due to procurement processes. There are two ways we’ve found to obtain some of the intangibles outlined above in environments with strict buying processes:

  1. Question periods to clarify and evaluate
  2. Meet with at least 3 - 5 of your top vendor finalists

Question periods to clarify and evaluate 

A question period is the only way a bidding vendor can dig deeper on the requirements to provide better responses and estimates, but often you can get a sense of the vendor by the questions they ask (or don’t ask). Did the questions seek to clarify, or did they challenge, in a positive way, your desired approach? Are the questions trying to point you in a different direction you may not have considered? If so, chances are this agency may have a better way of meeting your goals. 

Meet with 3 - 5 of your top vendor finalists. 

You’ve narrowed down your selection out of the dozens or perhaps even hundreds of proposals. The procurement team has done their job and ensured that a fair and level buying process was adhered to. Hopefully, the RFP has been constructed in such a way where the best agencies for the job are clear, and you are not choosing just based the lowest bid. 

Now is your time to meet each and there is a lot more to learn from these meetings. Here are a few approaches that can really help spot the differentiators between the finalists:

  1. Request to meet the team members assigned to your project and their work experience with similar clients/projects. 
  2. Outline your top 3 project goals and/or challenges, and ask for case studies on how they have helped organizations with similar challenges accomplish those goals.
  3. Ask the agency to present their process. Many agencies, to win a deal, will come into a presentation with a slick design mockup to showcase talent; however, chances are, every finalist you’ve selected has talent and likely a good portfolio which you’ve already referenced. Instead, ask them to outline their process in key areas of the project, such as design and development and make sure that is a process you are comfortable. 

For example, if you want a strict adherence to the project scope once the development starts, you’ll want an agency that utilizes a Waterfall approach to development vs. an Agile process. Similarly with design, a beautifully designed website is irrelevant if the business goals are not accomplished. What data and process does the agency apply to come with a design they are confident will meet the website goals (conversion)?

3:   Approaching the Market with Your RFP

Once you’ve drafted your RFP, and assuming you don’t have an incumbent agency already selected, the next step will be sharing it with the marketplace. There are generally three approaches to this process:

  1. Open process, whereby you put the RFP on a syndication service that thousands of agencies will see. This is typically done where the process is managed by a procurement team, and a large number of responses are desired.
  2. Closed process, whereby a select number of agencies are requested to bid on the project. This is typically done when an organization has selected the very specific criteria they want in a partner and have found a small number of potential partners that have those characteristics.
  3. Hybrid process, whereby the RFP is publically announced on the organization's website and selected agencies are targeted. This allows you to consider submissions that meet your criteria that you may not have otherwise known about.

The way you distribute the RFP should be aligned with how you want to manage the process; for example, publically announcing the RFP on a syndication service while agreeing to meet with every agency that responds would be a massive time commitment (it’s not uncommon to receive more than 100 proposals with this approach). 

Conversely a closed process run by a procurement team that will not meet with the responding agencies will likely not provide you with the depth of response you are looking for. In the end, there is no right or wrong, only what is right or wrong for your organization.

Final Thoughts...

When procuring a web design and development vendor, the RFP process can be hard and painstaking. We’ve had success implementing the strategies and recommendations shared above to streamline our process and provide clients with a better RFP experience. Share your thoughts in comments below.

Jan 12 2016
Jan 12

The Drupal community is full of people who make the world a brighter place. Now that we’ve made it through the holidays, we’d like to start the new year by winding up our 12 days of Drupal blog series. Thank you to our community for inspiring us every day.

About Mike

One would think that Mike never has time for sleep. He has been a Drupal developer, trainer, and consultant for almost 10 years, as well as a Drupal 8 Core Migrate module contributor, and a volunteer manager of the Community Cultivation Grants program. Mike also helps produce the DrupalEasy podcast and trains new Drupalers via a career mentorship program. If all that wasn't enough, he also organizes the Florida Drupal user's group.

What Mike says about membership

I doubt that the Drupal project would be where it is today without the Drupal Association. It takes a dedicated team of professionals to keep the servers humming along as well as organizing multiple DrupalCons around the world.

It’s often the small things that go the longest way. During the DrupalCon Barcelona sprint, I met a gentleman whose goal was to figure out how to use a new feature of one of the migration-related contrib modules. I didn’t have much experience with it, but together we figured it out in short order. He was super-thankful and promised he would write up the documentation page for the feature. Even though it was a small moment, it was one of many made possible by the Association’s constant support of the community.

If you are not yet a member, join the Drupal Association and be part of our success together.

Jan 12 2016
Jan 12


We at erdfisch are very excited to announce that the Drupal Business and Community Days will take place in Heidelberg, Germany from 8-10 April 2016.

This is the first in a series of blog postings explaining what we want to achieve with this event. I'll start with our location.

Our location: Heidelberg, Germany

This event is very much a team effort, I'm working on it together with my colleagues at erdfisch. Speaking personally, I'm especially excited to be welcoming members of the Drupal community to my new home town of Heidelberg. I am from England and Ireland originally, and have been here in Heidelberg for almost three years now. I'm very, very proud to live here, and want more people to know what a great place it is. You can take a look at some lovely photos of Heidelberg here.

The location for DrupalBCDays will be the Heidelberg International Youth Hostel.
How did we get the idea of holding a Drupal event at the local youth hostel? Well, before I go on, I should explain that this is no ordinary youth hostel! It was fact the location of the largest ever Debian Conference (DebConf) during the summer. You can watch a nice video about DebConf Heidelberg here, to give you a feel for the location.

DebConf16 in Heidelberg was my chance to "get off the island", to find out what makes another tech community tick. The thing that impressed me most about Debian community is its commitment to freedom. I felt really at home with them, and really welcomed by them. Also very impressive was the way they set up a glass fibre internet connection with the university, so that the youth hostel has a very fast internet connection! This was left in place as a legacy of the Debian Conference. So you can understand how excited we are to have this as our location for the Drupal Business and Community Days 2016!

OK. That's it for now, there are a few more blog postings yet to come.

Want to stay informed, and find out more?

Sign up for our newsletter and follow @DrupalBCDays on twitter.

We're looking forward to welcoming you to Heidelberg in April!

Jan 12 2016
Jan 12

Keeping up with web accessibility standards means making your website available to all users. It starts with building accessibility into your site from the very beginning and continues with the content editors responsible for making everyday updates.

We’re excited to release our latest ebook that covers proven techniques for content editors to maintain website accessibility. In this resource, you’ll learn quick tips for formatting content and images. We’ve also included a handy checklist to guide you through simple steps to publishing more accessible web content.

Sections include:

  • 5 accessibility best practices every content editor should know

  • Tips for working in the WYSIWYG

  • How to test your web content for accessibility

Simply put, following accessibility best practices is the smart thing to do. Ultimately, this will improve usability not only for users with disabilities but for everyone who visits your site. 

We hope that you find this ebook to be a valuable resource toward your organization's accessibility efforts. 

About the Author

Mediacurrent’s Accessibility Lead Michelle Williamson was recently published in a Website Magazine feature, Advice from the Pros: Designing for Web Accessibility. As Mediacurrent's resident expert on all things accessible, she can be found blogging about web accessibility terminologyaccessible name properties, legal liability issues, and more.

Accessibility Best Practices for Content Editors ebook: link to download the ebook

Additional Resources
5 Tips To Make Your Site More Accessible | Blog Post
The Business Benefits of Drupal 8 | Webinar Presentation
Designing Websites for Everyone | Blog Post

Jan 12 2016
Jan 12

Have you ever edited the appearance settings of a theme like Omega, and wondered how it provides its own custom options? Wouldn’t it be awesome if you could do this for your theme, and provide site builders with straightforward tools for choosing different style treatments, or localization settings? Then it’s time for you to dive into custom theme settings!

By leveraging custom theme settings themers can create a variety of controls to help site builders customize their sites, including localization options. In addition, advanced theme settings can be the perfect framework to build a one-size-fits-all theme on an enterprise level.

Check out the video of my DrupalCamp Atlanta presentation, “Learn to Create Advanced Theme Settings in Drupal — Including Drupal 8!” It covers:

  • An introduction to developing custom theme settings, including best practices and pitfalls to avoid.

  • Useful examples of where custom theme settings can help provide site builders with site-wide style treatment options.

  • How you can make use of custom theme settings for providing localization options.

  • What’s new in D8 for advanced theme settings.

[embedded content]

Additional Resources
Real-World Drupal 8 for Front-End Developers | Blog
Advanced Layouts with Flexbox | Video 
Drupal 8 Theming Update | Webinar  

Jan 12 2016
Jan 12


My previous post describes how you can list your local sprint as part of Drupal Global Sprint Weekend. This year it is January 30 and 31, 2016, and so far we have 24 locations all over the world. (There is still time to add your small local sprint. Read the post and get your sprint listed!).

Drupical map filtered to just purple sprint pins showing 24 locations


Here are some things you can do to prepare for organizing and hosting your local sprint.

Verify your location

Double check that the location you selected for your sprint has the space reserved for you, with the start and stop time you want. Make arrangements for a key or access to the space.

Make a list of what your sprint needs, like: tables, chairs, internet, and outlet strips. And depending on your type of sprint, maybe also include: drinks, snacks, lunch, paper, pens, markers, tape, signs, and whiteboards.

Verify that what the location will provide. Get the WiFi password. Verify what you will need to bring, and think about what you will ask participants to bring.

Update your announcements

Check your event (and blog,, or other post) and make sure the details are complete and accurate. Verify the location, date, and time. Make sure it includes a description of who is welcome and what attendees need to bring with them.

Decide on a topic

Not all locations need to sprint on the same topic. I recommend working on whichever project your most experienced contributor prefers. Sprinting on 7.x issues for contrib projects is a good idea. Porting a contrib project to 8.x is also a priority. For Drupal Core, there is lots to do on Drupal 8 still: reviewing, testing, and fixing bugs, especially bugs blocking porting contrib projects, API documentation, and the documentation User Guide for Drupal 8.

Reach out to local people who are experienced contributors or maintainers for the project you will sprint on. Let them know you plan to have a sprint on that topic. Invite them to the sprint. If they have time, talk to them about what would be good tasks for the sprint.

How many people are you expecting?

If you have fewer people signed up to attend then you were hoping for, make an announcement in your local user group, and in your company inviting people, ask if anyone has questions about sprinting, and remind them to sign up. Send notes to specific people and ask them to attend. (People respond to personal invitations.)

If you have more people signed up than you were expecting, you will need a little bit more preparation. Read the handbook page: Resources for sprint planners. It has estimates for WiFi needs, and contact information for increasing the limit of connections allowed from a single IP address to freenode IRC. For many people, you will also want to have some experienced people (mentors) that can help with newer sprinters. Send messages to experienced sprinters in advance making sure they will attend and ask them if they are willing to spend part of their time helping others. Estimate one mentor per four to eight other sprinters.

Tell people (again)

When people see a first announcement, they will think to themselves, "Oh, yeah. I should do that. I'll sign up later." When they see a second announcement, they remember they meant to take action. When they see a third, they think, "I've forgotten twice. I'll do it right now so I don't forget again." Reminders are good. People like them.

Make a comment on your event, send a announcement, post a link in your local IRC or slack channel, tweet (use the #SprintWeekend hash tag), etc.

What next?

As we get even closer to the event, I'll share some tips for how to prepare the issues for participants to work on. For now, go update (or make) your g.d.o event and tell people about it! :)


Have questions?

Tweet using the #SprintWeekend hash tag, post a comment on the g.d.o wiki page, ask in the Mentoring Group, or ask in IRC in #drupal-contribute. -Cathy (YesCT)

Jan 12 2016
Jan 12

We have heard from many website site owners who have a website that was designed with fresh, live data in mind who are finding that their pages are consistently showing stale, old data.

Nines times out of ten this is because a caching strategy was not considered at the outset of the project. The result is that the website got built and everything looked fine so it was deployed to the production environment. Most likely somebody observed that was the site was a little slugginsh and so, after some Googling, it was determined that the appropriate fix was to enable page caching via the administration pages in Drupal.

The consequence is that now the pages are cached, all of those live statistic such as page view counts, recent Tweets, latest news, new articles etc are now not updating until the caches get flushed.

You may now find that you are constantly having to keep flushing your cache. Not only does this task quickly become a rather bothersome chore, but it also adds to the work load for your server, since your are flushing all caches, not just the ones where new data is expected.

What you really need is a caching strategy.

Jan 11 2016
Jan 11

By Steve Burge 11 January 2016

How to Build Drupal 8 Slideshows

If you're getting started with Drupal 8, there are some key features you'll need to master.

You'll probably want to learn how to set-up calendars, contact forms, comments, multi-lingual sites and of course, slideshows.

In this tutorial, I'll show you how to build your first Drupal 8 slideshow.

Step #1. Getting set up with Views Slideshow

First, we need to install the modules and libraries needed for our slideshow:

How to Build Drupal 8 Slideshows
  • Extract the folder you just downloaded.
  • Rename the folder to /jquery.cycle/
  • Upload the files to the /libraries/ folder in the root of your site. This is different from Drupal 7, so be careful.
  • When you're finished, your folder structure will look like this:
  • Go to Structure > Content types.
  • Make sure you have a content type with an Image field attached:

Step #2. Create the view

Now we're going to use Views to create our slideshow:

  • Go to Structure > Views > Add new view.
  • Enter a "View name".
  • Click "Create a block".
  • For "Display format", choose "Slideshow".
  • Click "Save and edit".
  • On the left-hand side, look for the "Fields" area. Only "Content: Title" will be showing.
  • Click "Add".
  • Search for your image field and choose that field.
  • Click "Add and configure fields"
  • Click "Apply"
  • Scroll down to the Preview area at the bottom of the page and you will see that the image has been added.
  • Click "Save" to finish creating your View.

Step #3. Publish your slideshow block

Now let's publish our View so that people can see it:

  • Go to Structure > Block layout.
  • Click "Demonstrate block regions".
  • Choose the region you want to use for your slideshow. In my example, I'll use "Content":
  • Find the block region you want to use and click "Place block":
  • Find the block that you just created and click "Place block":

Under "Pages", choose which pages you want the slideshow to appear on:

  • Click "Save block".
  • If your chosen block region has multiple regions, make sure your block is correctly placed. In this case, I want it at the top:
  • Click "Save blocks".
  • Go and see your slideshow published on your site:

Step #4. Create image styles for your slideshow

At the moment our images are all different sizes and don't fit into the block region. Let's create an image style to ensure that all the images are the correct size.

  • Go to Configuration > Image styles > Add Image style.
  • Enter an "Image style name".
  • Enter a "Machine readable name".
  • Click "Create new style".
  • Choose an image effect. In my example, Resize will guarantee that all the images are the correct size:
  • Choose a Width and Height for your images. This will depend on the size of the block region you've chosen.
  • Click "Update effect".
  • Go back to edit your View:
  • Under "Fields", click on your image field to edit it.
  • Set "Image style" to the style you just created.

Save your view and visit the front of your site. Your slideshow should be working:

Pro tip: if you need help to make your slideshow responsive, enable the "Responsive images" module in the Drupal core. That will provide more image style options under Configuration > Responsive image styles.

Step #5. Add controls to your slideshow

Finally, let's add some controls so that our slideshow is easier for visitors to navigate:

  • Go back to edit your view again.
  • Under Format, click "Settings" next to Slideshow".

You'll now be able to add controls to your slideshow, including Previous / Next buttons, a counter and a pager:

About the author

Steve is the founder of OSTraining. Originally from the UK, he now lives in Sarasota in the USA. He was a teacher for many years before starting OSTraining. Steve wrote the best-selling Drupal and Joomla books.

Jan 11 2016
Jan 11

This year we received over 60 amazing session proposals. We have accepted 25 across a wide variety of topics for the 2016 camp.