Planet Drupal

Subscribe to flux Planet Drupal - aggregated feeds in category Planet Drupal
Mis à jour : il y a 52 min 45 sec

Drupal Association News: DrupalCon Latin America Designer Chosen

ven, 25/04/2014 - 05:52

We are excited to announce that the Drupal Association, along with key community volunteers, has selected a designer for DrupalCon Latin America!

About a week ago, our DrupalCon Latin American selection team reached out to the community for RFP submissions. We received a number of colorful, lively and fun submissions from several regions, and had a wonderful time evaluating each proposal. Thank you to all who submitted thoughtful and exciting work.

On Tuesday, the team met to discuss the RFPs. During this process we discussed at length the designs submitted and unanimously landed on two semi-finalists.  We took the opportunity to interview both designers.

And our new designer is...Filipe Riach (feliperiach) of Bogota, Colombia! Filipe has experience working independently and on a team to produce sophisticated and unique designs, and we know his work will be a wonderful addition to DrupalCon Latin America. You can find more information on Filipe on his website

For those who have been following the selection process, you may be aware that Filipe is employed by the event’s fiscal sponsor SeeD. We want to make it absolutely clear that Fillipe’s selection was not influenced by this fact; the selection was unanimous on the committee and SeeD CEO Aldibier Morales recused himself from reviewing or providing input on Filipe’s entry.

Again, thank you to all who submitted design work for this project and thank you to our enthusiastic local team working hard to create a memorable DrupalCon Latin America. Stay tuned for more information soon.

Drupal on,

DrupalCon Latin America Project Manager
Drupal Association Community Outreach Coordinator

Catégories: Elsewhere

Cheeky Monkey Media: How to Build an Activity Stream by Using Message Module

ven, 25/04/2014 - 04:50
Submitted by Yan Yong on Thu, April 24.

What does do: the message module logs system events which can be used to create user activity streams.

Skill Requirement:

1) Be able to create a list using views module

2) Be able to use rules to set up triggers

3) Be able to create new content type and add fields

4) Understand what view modes are

Modules required: message, rules, views, entity reference, token

What we are going to build:

We are going to build a block that lists all recent activities of a given user. It looks like this:

John has created a post “10 things wordpress can’t do for you”

Apr 21st, 2014

John has created a post “Our logo design process - Cheeky monkey media”

Mar 30th, 2014

John has updated a blog post “Why I need to learn message module”

Feb 27th, 2014

General steps:

Step 1) In order to log system events, we need to setup a message to capture data first.

Step 2) We need to tell Drupal when and how to log the system event.

Step 3) Create a block using views to display logged messages to the user.

Detailed instructions:

Assumption: to get a working Drupal installation with a clean url, and the required modules installed and enabled. I also assume you to have the blog post content type configed.

Step 1: Setup Message

As we can see from the above table, in our Message we need to capture the following data:

user name, blog post URL, blog post title and timestamp.

We are going to store all the text from the first column of the table into a Message text field, and timestamp in date field. Ok, enough talk, lets configure the blog message.

1) Go to /admin/structure/messages

2) Click Add message type, give it a name called {blog message}

3) In the MESSAGE TEXT section, add the following text:

[message:user:name] has created a post "10 things wordpress can’t do for you"

4) Since we put some static text in the message field, we need to come back later to make it dynamic, but for now we can just carry on.

5) Click manage fields of the blog message we just created

6) We are going to attach this blog message to the blog content type, so we can get the blog title and url information. Type Blog reference in the Add new field section, and select Entity reference in the FIELD TYPE selection list. Then finally select Autocompleted in the WIDGET selection list and click Save.

7) In the next screen, make sure you select Node for the Target type selection list, and check Blog post (your blog post content type) in the Target bundles section. Click Save.

You will need to repeat this step in the next page, don’t worry it’s normal.

8) Now, our Blog message is attached to the Blog post content type, which gives us some data to work with. Click edit link of the Blog Message, and replace the text to the following

[message:user:name] has created a post "<a href="[message:field-blog-reference:url]">[message:field-blog-reference:title]</a>"

9) Now, we need to store timestamp data in a post date field, although the message entity comes with a timestamp, I find it easier to work with the timestamp store in a separate field.  Now let’s add a post date field to the blog message entity. I use Date (ISO format) and WIDGET use Text field.

10) For the last step, we need to ensure that Message text and Post Date field are visible and the Blog reference is hidden. Click the manage display link of Blog message, then make sure all the field visibilities are set up correctly.

Step 2: Setup rules to log events

In this step, we are going to tell Drupal to create a new blog message instance (when a blog post was created or updated). We also need to send the information needed to create a new message instance.

1) go to /admin/config/workflow/rules

2) click Add action, in the React on event selection list, select After saving new content event. (you need to add another event After updating existing content as well)

1) Restrict this rule to fire only to the blog post content type by using Content is of type in the condition section

2) Create a new action, select Create a new entity from the Select the action to add selection list. Then select Message from ENTITY TYPE selection list.

3) Select the blog message type that we created in step 1 from the TYPE selection list.

4) Type node:author in text field of the USER section

5) Do not change anything else, click Save.

The above steps creates a rule that triggers after every time a user creates a new blog post content type, the rules module will create a new message entity instance, to associate with that event. The next logical step is to provide data to the newly created message instance.

3) click Add action again, select Set a data value from select the action to add selection list.

1) Use data selector in the DATA section to target the property you want to provide data to

2) Use data selector in the VALUE section to select the source of data for the above targeted property

3) As a reference, I passed

node to entity-created:field-blog-reference


entity-created:timestamp to entity-created:field-post-date

4)Until you covered all the data needed in your message then click Save


Step 3: Create a block to display logged messages

In this step we are going to use the views module to create a block which lists all the blog post related activities of a given user id:

1) go to /admin/structure/views

2) click Add new view link and give a name

2.1) in the Show section, make sure select Message, and leave of type to All

2.2) check Create a block and uncheck Create a page

2.3) check Use a pager as well, and set items to 5 per page, then click Continue & edit

3) change Show: Fields in the FORMAT section to Rendered entity instead, I choose Full in View mode selection list

4) Click Advanced button to expand it

4.1) click Add button beside CONTEXTURE FILTERS

4.2) In the Search text field type uid, check Message: User uid in the result list

4.3) in the next screen select Display contents of "No results found" in the WHEN THE FILTER VALUE IS NOT AVAILABLE section and check Specify validation criteria, select Basic validation in Validator selection list, and select Display contents of "No results found" again in the Display contents of "No results found" selection list

That’s it. Congratulations! You have done it!

Learn more about... Web Development Web Design Cheeky Monkey Media Categories: Tags:
Catégories: Elsewhere

Friendly Machine: How to Remove Core and Module CSS from a Drupal 7 Theme

jeu, 24/04/2014 - 23:49

In the post on base themes that I wrote earlier this week, I pointed out that core adds a lot of CSS to your site that you may not want. If you find yourself overriding this CSS in your themes, you definitely have some bloat that you could trim down. You also run into this issue quite a bit with contributed modules. Views, Flexslider and Superfish are modules that typically add a lot of CSS I don't want.

So how to get rid of this potentially unwanted code? Below I've included a function that you can drop in your template.php file. Of course you need to replace YOUR_THEME in the function name with the name of your theme.

function YOUR_THEME_css_alter(&$css) {
// Remove Drupal core css
$exclude = array(
'modules/aggregator/aggregator.css' => FALSE,
'modules/block/block.css' => FALSE,
'modules/book/book.css' => FALSE,
'modules/comment/comment.css' => FALSE,
'modules/dblog/dblog.css' => FALSE,
'modules/field/theme/field.css' => FALSE,
'modules/file/file.css' => FALSE,
'modules/filter/filter.css' => FALSE,
'modules/forum/forum.css' => FALSE,
'modules/help/help.css' => FALSE,
'modules/menu/menu.css' => FALSE,
'modules/node/node.css' => FALSE,
'modules/openid/openid.css' => FALSE,
'modules/poll/poll.css' => FALSE,
'modules/profile/profile.css' => FALSE,
'modules/search/search.css' => FALSE,
'modules/statistics/statistics.css' => FALSE,
'modules/syslog/syslog.css' => FALSE,
'modules/system/admin.css' => FALSE,
'modules/system/maintenance.css' => FALSE,
'modules/system/system.css' => FALSE,
'modules/system/system.admin.css' => FALSE,
'modules/system/system.base.css' => FALSE,
'modules/system/system.maintenance.css' => FALSE,
'modules/system/system.messages.css' => FALSE,
'modules/system/system.menus.css' => FALSE,
'modules/system/system.theme.css' => FALSE,
'modules/taxonomy/taxonomy.css' => FALSE,
'modules/tracker/tracker.css' => FALSE,
'modules/update/update.css' => FALSE,
'modules/user/user.css' => FALSE,
'misc/vertical-tabs.css' => FALSE,
// Remove contrib module CSS
drupal_get_path('module', 'views') . '/css/views.css' => FALSE, );
$css = array_diff_key($css, $exclude);

This bit of code is something that I sorted out from a couple of different places. The Tao base theme uses something similar and Mike Herchel showed off some of his resets in a recent presentation at Florida DrupalCamp where I picked up a few I had missed. 

Catégories: Elsewhere

Drupal core announcements: Seeking input from contrib maintainers on extending Drupal 6 support past Drupal 8's release

jeu, 24/04/2014 - 23:34

Over in #2136029 : Decide if and how to extend D6 security support 12 months past an 8.0.0 release there's been a very lively discussion on how to deal with the situation of having ~200K active Drupal 6 sites with Drupal 8 on its way. We're trying to strike a balance between allowing site owners and module developers ample time to migrate away from Drupal 6, while at the same time not unreasonably burdening Drupal's contributor community.

The latest proposal there by Dries is to extend support for security fixes only for Drupal 6 until one year past Drupal 8's release (or 8.2.0 in the new world order), in order to allow time for a viable migration path from D6 => D8 to materialize. We're actively seeking input from contrib maintainers on this proposal.

Note: the discussion is long, but the issue summary is up to date, so hopefully allows you to save some time. :)

Catégories: Elsewhere

Cheeky Monkey Media: Off Canvas Menu in Zurb Foundation 4 - Drupal Theme Integration

jeu, 24/04/2014 - 21:09
Submitted by Joey English on Thu, April 24.

At Cheeky Monkey Media, we’re huge proponents of Zurb’s Foundation framework. We use it almost exclusively for all of our projects, and it assists us throughout every step of that process. From building the first wireframes for client approval, to our final front-end theme, Foundation has become an essential tool for our development team. If you’re not familiar with Foundation, I encourage you to do some research, grab a copy of the amazing Drupal theme (actively maintained and supported by a great list of contributors), and dive in. Start integrating it into your own projects, and see why Foundation has fast replaced favorites like Omega, Mothership, Aurora, and more.

As with all great things, however, nothing is quite perfect “out-of-the-box”.

Recently, we’ve been seeing much more interest from clients in building responsive sites. Rather than having to convince them of its benefits, we’re finding clients are simply requesting designs from our creative team that are mobile-friendly. As designers and developers, we’ve enjoyed seeing this shift in client mentality, and we’re always happy to build a site using progressive, mainstream concepts, and design trends. One of those recent trends, and one thing we’re seeing a lot of demand for lately, is the ubiquitous off-canvas menu. If you’re using your phone as much as the rest of us are, you will have run into off-canvas quite a bit. It’s that nifty menu that slides in from the left or right side of the screen, usually offering up important functionality like navigation, search, and other features. We happen to appreciate its usefulness, and see its benefits for use on mobile and tablet devices.

And therein lies the rub…

At the time of this writing, Foundation’s Drupal theme is in version 7.x-4.0, supporting Foundation 4, and, rather unfortunately, not featuring the nifty off-canvas menu which Foundation has done an amazing job at implementing in most of its previous (and current) iterations. There is some reasoning behind the decision to leave this feature out, and while I agree with the logic, it’s a bit inconvenient for those of us using Foundation 4, but whom want the added functionality that off-canvas provided us in the past.

With several clients requesting this feature, and our design team producing PSD’s with off-canvas as a highlight of the mobile experience, we had a few options. We could build a bespoke solution, something we’ve done on previous projects, or try and utilize Foundation assets and integrate them into the theme as seamlessly as possible. We chose the latter, and sadly, there was very little in the way of existing resources out there to assist us when we began running into issues with the integration. Thankfully, with a few helpful posts from the Zurb community, some hair-pulling, and one big ah-hah moment over a weekend of obsessing over getting this piece of functionality to work, we were able to come up with a decent solution that should, ostensibly, work on every Foundation 4 project moving forward; that is, until Foundation 5 is ready to be used on production sites, as it should include this feature when it’s ready for the mainstream.

First, you’ll need a copy of the Foundation 5 code. From the downloaded files, you’re going to copy and paste the CSS that adheres to the off-canvas elements, then add these to your theme. Personally, I suggest keeping things clean and adding them to a separate _off-canvas.scss file, and setting that in custom.scss as an @import. This should make it easier to troubleshoot if you run into any problems, and is just good practice to keep things segregated and organized.

.off-canvas-wrap { -webkit-backface-visibility: hidden; position: relative; width: 100%; overflow-x: hidden; } .off-canvas-wrap.move-right, .off-canvas-wrap.move-left { height: 100%; } .inner-wrap { -webkit-backface-visibility: hidden; position: relative; width: 100%; *zoom: 1; -webkit-transition: -webkit-transform 500ms ease; -moz-transition: -moz-transform 500ms ease; -ms-transition: -ms-transform 500ms ease; -o-transition: -o-transform 500ms ease; transition: transform 500ms ease; &:before, &:after { content: " "; display: table; } &:after { clear: both; } } .tab-bar { -webkit-backface-visibility: hidden; background: #333333; color: white; height: 2.8125rem; line-height: 2.8125rem; position: relative; h1, h2, h3, h4, h5, h6 { color: white; font-weight: bold; line-height: 2.8125rem; margin: 0; } h1, h2, h3, h4 { font-size: 1.125rem; } .menu-icon { text-indent: 2.1875rem; width: 2.8125rem; height: 2.8125rem; display: block; line-height: 2.0625rem; padding: 0; color: white; position: relative; span { position: absolute; display: block; width: 1rem; height: 0; left: 0.8125rem; top: 0.3125rem; -webkit-box-shadow: 1px 10px 1px 1px white, 1px 16px 1px 1px white, 1px 22px 1px 1px white; box-shadow: 0 10px 0 1px white, 0 16px 0 1px white, 0 22px 0 1px white; } &:hover { span { -webkit-box-shadow: 1px 10px 1px 1px #b3b3b3, 1px 16px 1px 1px #b3b3b3, 1px 22px 1px 1px #b3b3b3; box-shadow: 0 10px 0 1px #b3b3b3, 0 16px 0 1px #b3b3b3, 0 22px 0 1px #b3b3b3; } } } } .left-small { width: 2.8125rem; height: 2.8125rem; position: absolute; top: 0; border-right: solid 1px #1a1a1a; left: 0; } .right-small { width: 2.8125rem; height: 2.8125rem; position: absolute; top: 0; border-left: solid 1px #1a1a1a; right: 0; } .tab-bar-section { padding: 0 0.625rem; position: absolute; text-align: center; height: 2.8125rem; top: 0; } @media only screen and (min-width: 40.063em) { .tab-bar-section { text-align: left; } } .tab-bar-section.left { left: 0; right: 2.8125rem; } .tab-bar-section.right { left: 2.8125rem; right: 0; } .tab-bar-section.middle { left: 2.8125rem; right: 2.8125rem; } .left-off-canvas-menu { -webkit-backface-visibility: hidden; width: 15.625rem; top: 0; bottom: 0; position: absolute; overflow-y: auto; background: #333333; z-index: 1001; box-sizing: content-box; -webkit-overflow-scrolling: touch; -webkit-transform: translate3d(-100%, 0, 0); -moz-transform: translate3d(-100%, 0, 0); -ms-transform: translate3d(-100%, 0, 0); -o-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); left: 0; * { -webkit-backface-visibility: hidden; } } .right-off-canvas-menu { -webkit-backface-visibility: hidden; width: 15.625rem; top: 0; bottom: 0; position: absolute; overflow-y: auto; background: #333333; z-index: 1001; box-sizing: content-box; -webkit-overflow-scrolling: touch; -webkit-transform: translate3d(100%, 0, 0); -moz-transform: translate3d(100%, 0, 0); -ms-transform: translate3d(100%, 0, 0); -o-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); right: 0; * { -webkit-backface-visibility: hidden; } } { list-style-type: none; padding: 0; margin: 0; li { label { padding: 0.3rem 0.9375rem; color: #999999; text-transform: uppercase; font-weight: bold; background: #444444; border-top: 1px solid #5e5e5e; border-bottom: none; margin: 0; } a { display: block; padding: 0.66667rem; color: rgba(255, 255, 255, 0.7); border-bottom: 1px solid #262626; transition: background 300ms ease; &:hover { background: #242424; } } } } .move-right { > .inner-wrap { -webkit-transform: translate3d(15.625rem, 0, 0); -moz-transform: translate3d(15.625rem, 0, 0); -ms-transform: translate3d(15.625rem, 0, 0); -o-transform: translate3d(15.625rem, 0, 0); transform: translate3d(15.625rem, 0, 0); } .exit-off-canvas { -webkit-backface-visibility: hidden; transition: background 300ms ease; cursor: pointer; box-shadow: -4px 0 4px rgba(0, 0, 0, 0.5), 4px 0 4px rgba(0, 0, 0, 0.5); display: block; position: absolute; background: rgba(255, 255, 255, 0.2); top: 0; bottom: 0; left: 0; right: 0; z-index: 1002; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } } @media only screen and (min-width: 40.063em) { .move-right .exit-off-canvas:hover { background: rgba(255, 255, 255, 0.05); } } .move-right { > .inner-wrap { -webkit-transform: translate3d(-15.625rem, 0, 0); -moz-transform: translate3d(-15.625rem, 0, 0); -ms-transform: translate3d(-15.625rem, 0, 0); -o-transform: translate3d(-15.625rem, 0, 0); transform: translate3d(-15.625rem, 0, 0); } } .exit-off-canvas { -webkit-backface-visibility: hidden; transition: background 300ms ease; cursor: pointer; box-shadow: -4px 0 4px rgba(0, 0, 0, 0.5), 4px 0 4px rgba(0, 0, 0, 0.5); display: block; position: absolute; background: rgba(255, 255, 255, 0.2); top: 0; bottom: 0; left: 0; right: 0; z-index: 1002; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } } @media only screen and (min-width: 40.063em) { .move-left .exit-off-canvas:hover { background: rgba(255, 255, 255, 0.05); } } .left-off-canvas-menu { -webkit-transform: translate(-100%, 0); -moz-transform: translate(-100%, 0); -ms-transform: translate(-100%, 0); -o-transform: translate(-100%, 0); transform: translate(-100%, 0); } .right-off-canvas-menu { -webkit-transform: translate(100%, 0); -moz-transform: translate(100%, 0); -ms-transform: translate(100%, 0); -o-transform: translate(100%, 0); transform: translate(100%, 0); } .move-left > .inner-wrap { -webkit-transform: translate(-15.625rem, 0); -moz-transform: translate(-15.625rem, 0); -ms-transform: translate(-15.625rem, 0); -o-transform: translate(-15.625rem, 0); transform: translate(-15.625rem, 0); } .move-right > .inner-wrap { -webkit-transform: translate(15.625rem, 0); -moz-transform: translate(15.625rem, 0); -ms-transform: translate(15.625rem, 0); -o-transform: translate(15.625rem, 0); transform: translate(15.625rem, 0); } .no-csstransforms .left-off-canvas-menu { left: -15.625rem; } .no-csstransforms .right-off-canvas-menu { right: -15.625rem; } .no-csstransforms .move-left > .inner-wrap { right: 15.625rem; } .no-csstransforms .move-right > .inner-wrap { left: 15.625rem; }

From here, you’ll want to modify your page.tpl.php file. What we chose to do was utilize the Top Bar, a feature currently in Zurb 4 that degrades quite nicely when used within the Off-Canvas menu, and some custom regions to get our main menu into the page. This allows the client to have control over this area just as they would with any other region on the page or within the site. We can add blocks to this region, add contexts for its usage on specific pages, or under certain conditions, really opening up the possibilities of what the menu can be used for. Imagine a scenario where, on user profile pages, the off-canvas menu included links to content creation tools, user settings, etc. After you download the tpl file, you’ll want to take your current page.tpl.php contents, and insert them within the Section with the class of “main-section.” This is basically your normal page contents, with everything else being the wrapper and structure of your off-canvas menu.

Home " title="<?php print t('Home'); ?>" rel="home" id="logo"> " alt="<?php print t('Home'); ?>" /> <?php if ($top_bar): ?> <?php if ($top_bar_classes): ?> "> <?php endif; ?> >
  • Main Menu
<?php if ($top_bar_main_menu) :?> <?php print $top_bar_main_menu; ?> <?php endif; ?> <?php if ($top_bar_secondary_menu) :?> <?php print $top_bar_secondary_menu; ?> <?php endif; ?> <?php if ($top_bar_classes): ?> <?php endif; ?> <?php endif; ?> <?php if ($page['off_canvas']): ?>
  • Main Menu
<?php print render($page['off_canvas']); ?> <?php endif; ?>

The final step here is to ignore the Javascript that comes with Foundation 5 for off-canvas functionality (a mistake I made and suffered with trying to troubleshoot for quite some time) and just implement these few simple lines into your scripts file.

Shared File:

$(".left-off-canvas-toggle:not(.processed)").click(function() { $(".off-canvas-wrap").toggleClass("move-right"); }).addClass('processed'); $(".exit-off-canvas:not(.processed)").click(function() { $(".off-canvas-wrap").removeClass("move-right"); }).addClass('processed'); $(".right-off-canvas-toggle:not(.processed)").click(function() { $(".off-canvas-wrap").toggleClass("move-left"); }).addClass('processed'); $(".exit-off-canvas:not(.processed)").click(function() { $(".off-canvas-wrap").removeClass("move-left"); }).addClass('processed');

There are some tweaks that can be made from here, and I recommend that if you’re looking for more robust cross-browser support, you look into the current string of threads over on the Zurb community to see what works best for your needs. For us, this solution has resolved a big need for our clients, and is now allowing us to deliver beautiful off-canvas menus on every project, while keeping everything clean, organized, and Zurby.

Learn more about... Web Development Web Design Cheeky Monkey Media Categories: Tags:
Catégories: Elsewhere

Doug Vann: Blue Drop Awards & Why It Matters

jeu, 24/04/2014 - 21:06

Further below is a crosspost of a page from Blue Drop AwardsUsed with permission. Before you read the crosspost, I would like to share why I support and believe in the mission of the BDA [Blue Drop Awards].

This year I'm volunteering time and supporting the BDA financially for the 3rd year in a row.
But why?

  1. I believe, and testimonies and feedback confirm, that there is lasting value in an awards program that is completely operated within our very own Drupal Community.
  2. I believe that many Drupal shops and freelancers are creating quality sites, and that the news of these accomplishments is not easily spread.
  3. I believe that the Blue Drop Awards creates a needed buzz around the many amazing accomplishments of the Drupal Community.
  4. I believe that DrupalCon is THE PLACE to take time out to recognize these accomplishments AND drink free beer as we do!
  5. I believe that our collective goal of marketing Drupal is made easier when we can point to a homegrown system that brings more awareness of our communities accomplishments. 
  6. I believe if more people get behind the Blue Drop Awards, the value will increase, the momentum will pickup and the Drupal Community will be better served.


There's no lack of opportunities to serve the Drupal Community. Is it preposterous to think that serving with the Blue Drop Awards is as important as squashing a Drupal 8 bug? I submit to you that the hard working people in our hard working community deserve recognition and praise in a public forum. Hanging the shiny Blue Drop Award in the wall of your office is a side benefit of the Blue Drop Awards. Sharing your success with the Drupal Community at large is far more valuable. More than valuable, it is necessary. Our community is SO LARGE that is simply not an option to be aware of, much less appreciate, the volume if amazing accomplishments that are being undertaken in the name of Drupal.

The Blue Drop Awards attracts these good people to a single place where they can take their hard work and have it compete while acquiring the recognition it deserves. And that is why the Blue Drop Awards deserves the recognition that many of us give to it!

----- begin crosspost of ----


Submitted by Erik Wagner on Thu, 04/24/2014 - 16:41

Since the Blue Drop Awards started in 2012, we have seen continual growth in the amount of positive feedback and participation. This has encouraged us to continue this project in hopes that we can help improve the public's knowledge of Drupal and show off the best of what Drupal has to offer. 


There have been a few, very vocal opponents to some of the changes that we made to the 2014 Blue Drop Awards website. I wanted to address these changes and the reasoning behind them and announce a few changes of our own in response.

First, I want to remind everyone that the 2014 Blue Drop Awards is an ALL volunteer organization. We have very limited funds and unfortunately, this year, we only have six volunteers and two sponsors. We’re thin on bandwidth and money, thus I would ask if you wish that the Blue Drop Awards be handled differently If you have specific feedback, please feel free to reach out to me directly, I’m happy to answer any questions or concerns that you may have.

Second, I want you to keep in mind that we (the volunteers organizing Blue Drop Awards) have tried to make the Blue Drop Awards as inclusive an organization as possible; an organization that represents and exalts the best of Drupal.


Since day one we’ve realized that we would like to make the Blue Drop Awards as accessible to both the Drupal community and people outside of the immediate Drupal community. Meaning, we want both Drupal companies and their customers to be able to come to Blue Drop Awards and participate. We also have the problem of dealing with fraudulent votes. We don’t want voters to create dozens of fake accounts to vote up their favorite website.

The first year we addressed this problem by requiring accounts for every voter. The problem is, we had very few voters besides the developers themselves. These websites are generally created for companies who are not active in the community. We had to make it easier for people to create accounts and vote or else this project was doomed to fail. Fast forward to this year-- we decided to limit the solution to Facebook, the most widely used social media network in the world. It also is more difficult to defraud than many of our other alternatives.


While we are an all-volunteer organization, there are still expenses that must be covered. Which is why we came up with the $10-$25 nomination fee. Below is a list of items that must either be paid for or donated:

  • Awards: We have 22 categories at the Blue Drop Awards (including site of the year). Each category receives an award. Each award costs roughly $50 to design and print for a total of $1,100.
  • Hosting: One founder has been kind enough to let us use theirs this year, but this is an expense we cannot guarantee will be covered next year.
  • Development: This year we have not had any volunteers to help with the development of the site. I’m not even sure how much we invested in this, but my guess is somewhere in the range of $5,000-$7,000.
  • Party: Last year’s party at Drupalcon Portland was not a cheap endeavor and this year we were hoping on hosting another party at a bar on Sixth Street during Drupalcon Austin. $7,000.

While not a complete list, these expenses alone can reach nearly $15,000 a year. To cover this amount, we would need to get 1500 nominations at the $10 fee or 600 nominations at the $25 fee. We have never had that many nominations and realistically, we do not expect to reach that number this year.

So, how do we cover the rest of our expenses? Perhaps we do not have a party? Perhaps no physical awards?

Blue Drop Awards Changes:

To continue with the Blue Drop Awards, we have made the following changes.

  1. Add Twitter login functionality. We do so at the possible cost of having a less accurate vote count.
  2. Reduce the nomination fee to $10. We do this at the potential cost of not having a party or physical awards for the winners.
  3. Extend the nomination period. Lastly, we have decided to extend the deadline for the nominating period to 5/5/14, giving everyone a full extra week.

We would really like the BDA to be what it was always intended to be: an award system that showcases the best of Drupal. But do that, we need everyone in the community to help. If we get enough donations, volunteers and sponsors, we could do away with the nomination fees altogether.


Drupal Planet

View the discussion thread.

Catégories: Elsewhere

Cocomore: Drupalcamp Spain is approaching...

jeu, 24/04/2014 - 13:00

Drupalcamp Spain 2014 will be at Valencia on May 16-18th, and we will be there.

If you are attending, you will probably know that there will be sprints during all the camp, and you may want to sign up to the Valencia sprints. We will have tasks for everybody, no matter if you never contributed before or if you are not even a developer, so don't be shy and join us.

read more

Catégories: Elsewhere

Chris Hall on Drupal 8: Drupalcon Amsterdam sprints do not require a ticket

jeu, 24/04/2014 - 10:07

Short and sweet, I am planning more activity for post Beta launch, but "Good news everybody".

After a bit a of activity on Twitter it was made apparent that a ticket is not required to attend Drupalcon Amsterdam sprints (presumably other Drupalcons as well). This is probably not news to some people but it appears many are not aware of this, or like me have not really thought about it. 

For those coming to #DrupalCon Amsterdam, solely to attend code sprints: you don't need a ticket for that. Feel free to come without!

— DrupalCon Amsterdam (@DrupalConEur) April 24, 2014

As a freelancer I was sadly coming to the conclusion that Drupalcon Amsterdam was out of reach, after ticket price, accommodation travel, loss of earnings etc. the expense is rather large especially when you have a family to consider (I find it hard to justify why I should spend so much on a holiday just for me). 

Now however I have the option to take a shorter hop and still get to meet some interesting people, perhaps even combine with another day or so in Amsterdam with my partner. 

This really extends the options for those of us not too far away from Amsterdam and thanks for the clarification.


Catégories: Elsewhere

ThinkShout: Slice and Dice Entities with Views Modes and Bean Entity View

jeu, 24/04/2014 - 09:00

Want to use a node as a block without creating a View or a block in custom code? Or maybe display a few fields of a node in a different region, but don't want to add the overhead and complexity of Panels or Display Suite?

Introducing Bean Entity View!

This freshly-minted module builds on Bean to provide a bean type for displaying an entity using a particular view mode. To start, there are only three basic configuration options:

  1. Type of entity to display
  2. View mode of that entity to render
  3. Specific entity to render

The first two options are straightforward while the third option provides two main choices: enter a specific entity ID or leave the field blank to attempt to render the entity that the current page is displaying. To help the plugin determine which entity you are currently viewing, you may set which position in the url the entity id should be located in. For nodes (node/1234) the position would be 1, while for RedHen contacts (redhen/contact/1234) the position would be 2.

Using the option to display a view mode of the current entity allows for displaying different displays of an entity across several page regions. In addition to the default/full page view of the node, Bean Entity View beans are used to render a header view mode in the header region and a sidebar view mode in the sidebar region.

A beta release is available on and this module is already used on several projects, so the code is stable and ready for use. Patches to support block caching or other improvements are welcome!

Catégories: Elsewhere

Jeremy Epstein: Sharing templates between multiple Drupal views

jeu, 24/04/2014 - 08:13

Do you have multiple views on your Drupal site, where the content listing is themed to look exactly the same? For example, say you have a custom "search this site" view, a "featured articles" view, and an "articles archive" view. They all show the same fields — for example, "title", "image", and "summary". They all show the same content types – except that the first one shows "news" or "page" content, whereas the others only show "news".

If your design is sufficiently custom that you're writing theme-level Views template files, then chances are that you'll be in danger of creating duplicate templates. I've committed this sin on numerous sites over the past few years. On many occasions, my Views templates were 100% identical, and after making a change in one template, I literally copy-pasted and renamed the file, to update the other templates.

Until, finally, I decided that enough is enough – time to get DRY!

Being less repetitive with your Views templates is actually dead simple. Let's say you have three identical files – views-view-fields--search_this_site.tpl.php, views-view-fields--featured_articles.tpl.php, and views-view-fields--articles_archive.tpl.php. Here's how you clean up your act:

  1. Delete the latter two files.
  2. Add this to your theme's template.php file:
    <?php function mytheme_preprocess_views_view_fields(&$vars) { if (in_array( $vars['view']->name, array( 'search_this_site', 'featured_articles', 'articles_archive'))) { $vars['theme_hook_suggestions'][] = 'views_view_fields__search_this_site'; } }
  3. Clear your cache (that being the customary final step when doing anything in Drupal, of course).
Catégories: Elsewhere

Drupal Commerce: Improving the Experience of Commerce Bundles

jeu, 24/04/2014 - 07:28

Commerce Bundles, while very powerful, isn’t exactly the most user-friendly from a UI standpoint. However, it is very customizable and there are a few things we can do really easily to improve the overall experience:

Using a View for the Bundle Item Autocomplete

Out of the box, Commerce Bundle’s Bundle Item Autocomplete looks solely at the title. This doesn’t scale really well if you give all of your products in a set (e.g. S-XXL shirts) the same name, which is pretty common. So instead, we can modify the widget to use a custom view to load and search for autocomplete suggestions. To enable:

Catégories: Elsewhere

AGLOBALWAY: Top 5 Reasons to Choose Drupal

mer, 23/04/2014 - 19:26
Drupal is an open source content management platform for developing powerful, flexible and robust websites, social media networks and applications, that leads the market.   But why Drupal? What are the key points of this open source?     Flexibility   Drupal was created with the idea of ​​being flexible.Usually when someone looks for a feature or specific functionality, most of the time it has already been set or can be easily created. As a powerful open-source content management framework  used by a wide variety of small and large businesses, Drupal gives a handless countless content types, that includes text, blog, videos, podcasts, menu handling and optional revision control.      Highly Customizable   Drupal is designed with a highly customizable features, functionalities and layout that incentive the consumers to interact, share, and create their content.  Unlike other CMS products, Drupal don’t force you to work within a rigid paradigm that makes you build a website base the original developers thoughts. Most of the time a Drupal website can be structured in almost any imaginable way, but if the Drupal core or a contributed mode don’t do what you need, you always can go into the source code and develop your own customized functionality.      Rapid Development   Drupal gives you the opportunity to build internal or external-facing websites in matter of hours. With a single download, you can utilize a multi-site configuration or use a Drupal Distributor that provides you the essential features and functions to build a site.      Scalability   Drupal provides you a high scalable solutions that support enterprise level corporate websites and applications very easily. To be aware of the grandeur of the community that is using Drupal, these are some examples of websites with high traffic worldwide that are using Drupal: White House, CNN, Sony Music, Grammy’s, The Economist, Tesla Motors, UK government, and much more.     Security      Among with all the CMS’s of the world, Drupal is known as one of the most secure platforms available. Thanks to a constant review and excellent knowledge of handle security issues among thousand of developers, Drupal core is kept secure.    Tags: drupal planet
Catégories: Elsewhere

Wunderkraut blog: Just get the files you need when you develop

mer, 23/04/2014 - 15:34

When you work locally on development or test on stage/dev whatever you sometimes needs the files from production. Our old way in solving that is downloading the whole file catalogue and have it local. Sometimes the file catalogues where several gigabytes large so that is not a good workflow at all.

To solve that problem we are now using Stage file proxy. We have been using it for some time now to get files to stage or locally, and it works really well (we have some issues on D6-sites, but works almost flawless on D7-sites). Stage file proxy downloads the files that are requested from production (or whatever) site running environment.

So you just get the files you need, and you could easily delete the files locally and get them back when called for. Time and space saver.

A nice patch to the module is getting an admin-interface - so that you don’t need to add settings to settings.php or creating variables. EDIT: Greggles just committed that patch to dev :-)

Photo by James Butler

Catégories: Elsewhere

Frederick Giasson: Exporting Entities using OSF for Drupal (Screencast)

mer, 23/04/2014 - 14:41

This screencast will introduce you to the OSF for Drupal features that let you export Drupal Entities in one of the following supported serializations:

  • RDF+XML (RDF in XML)
  • RDF+N3 (RDF in N3)
  • structJSON (Internal OSF RDF serialization in JSON)
  • structXML (Internal OSF RDF serialization in XML)
  • ironJSON (irON serialization in JSON)
  • commON (CSV serialization to be used in spreadsheet applications)

I will show you how you can use OSF for Drupal to export entire datasets of Entities, or how to export Entities individually. You will see how you can configure Drupal such that different users roles get access to these functionalities.

I will also briefly discuss how you can create new converters to support more data formats.

Finally, I will show you how Drupal can be used as a linked data platform with a feature that makes every Drupal Entities dereferencable on the Web1. You will see how you can use cURL to export the Entities‘ descriptions using their URI in one of the 6 supported serialization formats.


  1. OSF for Drupal follows the Cool URIs for the Semantic Web W3C’s interest group notes
Catégories: Elsewhere

Drupal Commerce: Commerce Module Tuesday: Commerce Add to Cart Extras

mer, 23/04/2014 - 14:35

Commerce Add to Cart Extras is a great little module that provides the ability to turn a product listing view into an add to cart form. It does this by providing a new field that you add to a view which provides a quantity text box and makes the entire view an add to cart form. This differs from the existing “Add to Cart” field provided by commerce, which allows you to add a single item to the cart from a list.

This allows you to do some useful things such as creating a bulk order form which lists some or all of the products on your site, allowing customers to enter a quantity directly for the products they want. Or, you can utilize standard Views functionality to create another add to cart form for wholesalers on products with several attributes allowing them to add quantities of each individual product quickly and easily. Let’s take a brief look at how we can do this.  Just download and enable the module, and you’re ready to get started.

Video and run-down after the break.

Catégories: Elsewhere

Károly Négyesi: How to crash your site

mer, 23/04/2014 - 08:14

I got a desperate call about a site being down, this is ordinary for me (advertisment: you can contact me if it happens to you). But the error I saw was new to me. This is surprising -- I have thought I have seen it all and then some. The modules/views/includes/ was fataling about the function views_include not existing. At first I thought opcache went south cos how on earth could an include be loaded when the module isn't?? But it wasn't opcache. Next step was adding a debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) before the offending views_include call and behold... what?? variable_initialize?? o_O OH! Obviously the poor thing is trying to unserialize a views object but it's superb early in the bootstrap and so modules aren't loaded. So while unserializing the classloader loads which leads to this fatal. Neat. Moral of the story: don't ever try to store a views object in variables. Or an array containing a views object.

Catégories: Elsewhere

Modules Unraveled: 105 Using Membership Entity to Set Up a Drupal Based Membership Site with Caleb Thorne, Bryan Jones and David Csonka - Modules Unraveled Podcast

mer, 23/04/2014 - 07:00
Published: Wed, 04/23/14Download this episodeProject
  • What is the Membership Entity module?
    Project background
    First membership site developed was Mercedes-Benz Club of America (
    Involved a bunch of custom code.
    Entity API
    Key features
    Multiple users per membership (primary and secondary)
    Join/Renew online
    Role management
    Membership terms and modifiers
    E-Commerce solutions (coming soon)
    Commerce integration (Caleb)
    Ubercart integration (Bryan)
    product class
    Using product attributes to store membership data.
    Investigating better ways to store data before official release.

  • Do you handle pro-rated renewals?

  • Trials?
  • How are you guys dealing with role based permissions, and time limited access?
  • Are there different levels of membership?
  • Do you deal with CC details?
  • What other solutions did you guys look at before creating this one?
    • Why not just use profile2/rules/civiCRM or other existing modules?

The big problem with Profile2 is that it only allows one user per profile. Some fields should be shared for all users that belong to a single membership.
Membership Entity includes rules integration.
Membership Entity is 100% Drupal. No third party integration required.

Use Cases
  • Do you guys have any sites currently running the Membership Entity module?
    (David) - Joined the team after much of the development of the module was already done, so had the perspective of a developer on the outside, learning what the module provides and how to extend it. Being built around the Entity API made creating Views-based reports very simple, as most of the membership data that I needed to display was already exposed. For any that wasn’t, the extensible nature of the module (via things like all of the provided custom hooks) made the process of developing additional custom entities derived from membership meta-data rather straightforward.
    (Bryan) - Drop in solution for simple membership sites (CEMA).
    No custom code required.
    Membership process working in less than an hour.
    Integrated with Ubercart (Module coming soon).
Episode Links: draenen (Caleb Thorne)BryanDavid CsonkaMonarch DigitalMembership EntityCommerce integration (sandbox)Ubercart integration (sandbox)Module release blog postWe will be having a BoF at DrupalCon Austin. Watch for it atTags: 
Catégories: Elsewhere

Darren Mothersele: Drupal Site Builder Patterns - The State Machine

mer, 23/04/2014 - 01:00

In this new series for my blog, I'll be documenting some common design patterns for Drupal site builds. This first post is about the State Machine pattern, which is something I've used on several sites recently.

First, let me explain what I mean by "pattern". If you are already familiar with design patterns in Object-oriented software then you can probably skip this bit, but I think it's useful for context.

Design patterns?

Here's a quote from the original Gang of Four book on design patterns. That book is about design of object-oriented software, but I think it applies to Drupal development too. The quote is from p.1 of the book, apologies if I offend anyone by bastardising it. I've taken the liberty of substituting the words "Designing object-oriented software" with "building Drupal sites", and a few other substitutions to make my point...

[Building large maintainable Drupal sites] is hard... Your design should be specific to the problem at hand but also general enough to address future problems and requirements [and be maintainable]... Experienced [Drupal site builders] will tell you that a reusable and flexible design is difficult if not impossible to get "right" the first time.

Yet experienced [Drupal site builders] do make good designs. Meanwhile new [site builders] are overwhelmed by the options available and tend to fall back on non-[Drupal] techniques they've used before. It takes a long time for novices to learn what good [Drupal site building] is all about. Experienced [site builders] evidently know something inexperienced ones don't. What is it?

One thing expert [site builders] know NOT to do is solve every problem from first principles. Rather, they reuse solutions that have worked for them in the past. When they find a good solution, they use it again and again. Such experience is part of what makes them experts.

So I've been looking at what these "good solutions" are that I might have been using, and as I identify them I've been documenting them along the same lines of the original design patterns from the Gang of Four book:

  • Pattern name - the handle we use to describe the problem
  • Problem - explain the problem and its context, and when you might want to use this pattern
  • Solution - describe the elements that make up the solution, in my case how the pattern can be best implemented in Drupal
  • Consequences - results and trade-offs of using the pattern, in this case I also consider further issues that many need to be considered as a result of using the pattern.

So, first let's look at what a state machine is, and what problems it solves, before going on to look at how to configure it in Drupal.

State Machine

A state machine is a theoretical computer science concept that provides a mathematical basis for modelling computation. But don't worry, the kind of state machines we'll be using don't require a degree in computer science to understand.

All you really need to know is that the state machine (or more correctly a Finite State Machine) has a finite number of "states" it can be in and the machine is only ever in one of these states at a time, it's current state. The state machine can change from one state to another triggered by an event or condition. This change of state is called a transition. A state machine is typically visualised using a state machine diagram, for example:

As you can see the states are represented by an ellipse with the name of the state inside, the arrows denote the possible transitions. You can also see how the entry point and exit point would be notated.

Here's a (very simplified) example of a ticket in an agile issue queue. In reality this would probably have several other states but for the sake of this example, here's a simple state machine for the ticket:

A state machine is defined by the list of possible states and the event/condition that triggers each transition.

If you're reading this and thinking "Events", "Conditions", sounds a bit like Drupal Rules, then you've already worked out how we're going to implement this in Drupal!

In this simple ticket example the states are "In progress", "Approval", and "Finished". The transitions are "Completed", "Rejected", "Accepted".

When to use it?

It might be useful to think that in business speak, when they say "business processes" they are actually talking about state machines. Here are some cases when you might want to think about state machines:

  • If you've ever had to model a "state" or "status" field, then you've got a good candidate for a state machine.
  • If you've ever wanted to anything more complex than just published and unpublished nodes then you have a good candidate for using a state machine.
  • If you have boolean fields in your content model called things like "paid/unpaid".
  • If you have records that need to expire after a specific period of time

Drawing out a state machine diagram to model this kinds of problems can be really useful to help identify any "edge-case" scenarios you may not have thought of, and capture them early in the design process. It also shows you exactly what you need to test further along in the site build.

Let's build it

As with anything in Drupal there are several ways to achieve this functionality, in fact there's even a State Machine module, but that relies on creating custom plugins. If you're a developer you might want to take a look at this module.

Workbench Moderation and various other workflow modules include a state machine implementation for a specific purpose.

The approach documented here is suitable for site builders, is flexible, and provides a neat solution that can be configured using the following contributed modules:

I said before that the state machine is defined by it's set of possible states and set of transitions. In Drupal we'll be using a simple list field to store the list of possible states for the node.

In a recent post on they mention the addition of the ability to hide form fields in Drupal 8 core. In Drupal 7 we need a module to help us do this. In this case we are adding a field that will never be directly edited by the user so we just deny access to edit that field using the Field Permissions module.

For the simple ticket example, we have 3 states. So use an integer list field with the following allowed values:

  • 0|In progress
  • 1|Awaiting approval
  • 2|Finished

I said that the state machine was defined by the set of possible states (implemented by our list field), and a set of transitions. These transitions can be implemented using the Rules Link module.

Using the Rules Link module you can add a button to the ticket node which manipulates the "state" value preventing the user from actually editing the value in the state field directly, and thus enforcing the workflow defined in our state machine.

Each "Rules link" is configured in two parts. First you define the conditions for when the link should be visible using standard Rules conditions. Secondly, you use the rules reaction to set the value of the state field to the new value (and perform any other actions that you want as a side effect of the transition).


It's good to follow a principle of audit-ability, so you probably need to keep the transition history. A simple solution might be to add a timestamp field such as "confirmed at" to mark when it went to confirmed state. If using node, you could log revisions to track state changes in the revision log for the node. Or you could look at Messages module to log messages when state changes happen.

More patterns

If you're interested in learning more from my 7 years of Drupal experience (and if you're based in London) why not join me for Everything I Know About Drupal an intensive 2-day Drupal training I've been working on. It's taken a lot of preparation, and there's still a small number of tickets available. You can find more information on my blog post about it or grab a ticket on the Eventbrite page.

Catégories: Elsewhere

Evolving Web: DrupalCamp NYC at the United Nations - Recap and Photos

mar, 22/04/2014 - 23:52

This year's DrupalCamp NYC was held at the United Nations. The camp was crammed with summits and useful sessions and included a lot of content about Drupal 8.

read more
Catégories: Elsewhere

Drupalize.Me: Webinar: Easily Create Maps with Leaflet

mar, 22/04/2014 - 21:50

Curious about Leaflet? Join Drupalize.Me Trainer Amber Matz for a live tutorial on how to add Leaflet maps to your Drupal site during this Acquia hosted webinar on May 1, 2014 at 1:00 PM EDT.

Catégories: Elsewhere