Automated Feeds
Drupal Watchdog: Responsive Web Design: Look Great On Any Device
It’s 2011, and the world is going mobile. People don't just use their desktop computer or laptop anymore to visit the sites you build. They're coming at you with smartphones, tablets, TV screens— and who knows what they’ll bring next year? With all this device-switching going on, one of the questions that site builders ask themselves is, how can we keep catering to all these different devices? The good news: There is a way. It’s called responsive webdesign.
In this article, we briefly lay out what responsive webdesign is, and, more importantly, how you can use it in your Drupal projects today.
What is responsive web design?In his 2010 article on 'A List Apart', Ethan Marcotte coined the term "responsive webdesign," referring to responsive architecture. If architects can design rooms that change according to the number of people inside them, why can't web designers build web pages that adapt to the people who view them?
As you may have guessed from the name, responsive web design is all about, yes, responding to the site user's device specifics. Does the device have a wide or narrow screen? How is the user holding the device? What OS is powering the device? All these questions determine how the user experiences your website. With responsive webdesign, you can accommodate all these possible differences.
Using a combination of CSS3 media queries (which query the device's capabilities to determine the proper stylesheets to load), a flexible grid acting as the site’s foundation, and images that change according to the screen resolution, responsive webdesign allows you to work in a so called "device agnostic" way. It doesn’t matter whether the user has the latest tablet, or an early-adapter smartphone: if your design is responsive, it can adapt to the user. Think of it as a fluid (vs fixed) webdesign on heavy steroids.
Author Bruno De Bondt & Kristof OrtsBruno De Bondt has been theming and developing Drupal sites since 2005. He is the technical lead at DeWereldMorgen.be, a popular independent news website in Belgium. He has also worked as a Drupal developer and themer for Krismon, one of the main Drupal shops in Europe. Working with them, he has built several media, non profit and advocacy websites. Bruno currently lives in Vancouver, Canada. You can reach him on Drupal.org or Twitter as brunodbo or on http://brunodbo.be.
Kristof Orts loves the web and specializes in user experience and usability. He's also a team player, for big projects he likes to work with partners that have the same knowledge and passion as he does. Some keywords Kristof uses every day: CSS3, HTML5, JS, flexible layouts, responsive and mobile design. He also loves to speak about these things at conferences.
Friendly Drupal: 15 modules to improve your Drupal administration and content management experience (D6 & D7) - part II
A continuation of the useful administration modules list started in Part I.
DevelUsed extensively by the developers, devel module can also be very helpful to the site administrators. One of its more popular features is automatic content generation (such as users and nodes) - including media files! Another nice feature is switching between users (for example, to test access permissions). It also integrates well with the admin menu module mentioned in the first part of the article.
To use Devel on Drupal 6, go to admin/generate and choose the type of items to generate (the modules comes with taxonomy, content and users, other modules add more types of content). The module can also delete the existing items (for examples, nodes by type).
Related stories:
If you liked it this story, you might like the following:
15 modules to improve your Drupal administration and content management experience (D6 & D7) - part IRedirect 403 to User Login (r4032login module).Custom contact form with conditional fields using webform and webform conditionalDrush Site Aliases and Interactive ShellInstall Drupal 7 site with DrushDrupalize.Me: Getting Started with Calendar
In this chapter we will get a calendar up and running on our demo site. We will cover the necessary modules, how to install them, as well as basic site configurations. We'll also show how simple it is to get a calendar on your site using a views template, and then give a tour of some calendar features.
Resources Modules Needed: 9m Publication date May 16, 2012 - 9:00am Rules trigger for changing creation date on a scheduled publication. NoDrupalize.Me: Calendar Series Overview
In this series we focus on building calendars with Drupal. We'll be covering topics such as basic configuration for fields and views, using calendar templates, creating blocks and different ways of displaying the calendar, along with customizing the look and feel.
This video assumes that you understand the basics of content, fields, and Views in Drupal. If you need a refresher on these topics, or want to find out more about using the Date module, here are some other tutorial series to review:
WANTED: Drupal Developer
Eastvantage has an exceptional opportunity for a driven, technically savvy team-player who has a strong desire to become a real guru. We are at the cutting-edge of developments in this ever-changing landscape and are now set on Drupal. When you join our team, you'll be directly working with our Europe and US based clients.
If your skill set includes expertise with Drupal and PHP you possess the aptitude to learn the necessary skills to become a Drupal expert, keep reading!
DRUPAL DEVELOPER
National Capital Reg - The Fort, Taguig City
Primary Duties and Responsibilities include:
Create new Drupal modules, blocks, views from scratch or tweaking
Work in a team with agile tools
Configure servers and hosting
Stay current on Drupal, web design, web development, analytics, website optimization and trends through publications, blogs, forums, and self-discovery.
What you need:
Expert knowledge of Drupal, in particular the modules CCK, Panels, Views, Node Queue, Image Cache, Display Suite, Ubercart
Fluency in English (spoken and written) is a must.
Job Qualification:
You are interested in and active within the Drupal community
Self-starter with "can-do" attitude, strong work ethics, time and project management skills
Experience working in a virtual team environment
Ability to adapt to a constantly changing environment
Excellent command of the English language, both oral and written.
Our offer:
A challenging role in a fast growing international team
An opportunity to show your initiative and grow with us
A no-nonsense culture and direct interaction with our clients
Prime offices located in Fort Bonifacio Global City, Taguig
A competitive remuneration package and Manila working hours.
All inquiries: recruitment@eastvantage.com
Website: www.eastvantage.com
Modules Unraveled: 020 Steven Jones and The Aegir Project - Modules Unraveled Podcast
This week I talk with Steven Jones of the Aegir Project.
Here are some of the questions I asked him- I’ve only heard of Aegir, but never actually used it. What exactly is it?
- How did you get started with Aegir?
- What kinds of things can Aegir do other than site install?
- How does Aegir integrate with Git?
- What sort of people is Aegir appropriate for?
- How does Aegir compare to other tools like Pantheon or Acquia’s dev cloud?
- What about tools like Puppet or Capistrano?
- How can people get help?
- What’s the future of Aegir?
- @TimeRaider: What are the plans for 7.x release and new Drush support?
- @tgroff: What should distributions do to ensure Aegir compatibility?
Matt Farina: Drupal 7.14 API Compatibility Breaking Change
Minor Drupal versions are usually for bug fixes, security updates, and the occasional new feature that doesn't break backwards compatibility. Compatibility changes are reserved for major Drupal releases. There are exceptions such as Drupal 6.2. It was such a big deal there is an update documentation page just for this release. When Drupal 7.14 made an API breaking change without providing documentation or notification to module developers I was quite surprised. The lack of detail made it difficult to track down the changes when I had a broken codebase. Here are the details so others can, hopefully, have an easier time if they run into this problem.
Matt Grasmick: Connecting Facebook with Drupal, the easy way: Part 2
In Part 1: Connecting Facebook with Drupal, the easy way I extolled the wonders of Facebook OAuth and showed off its excellent API with an example of how to map facebook user data to Drupal user objects.
For part 2, I'm going to show you another side of the API. But before we get started, I'd like to give a quick shout-out to Nathan Haug (@quicksketch), author of Facebook OAuth. I'm about to take a lot of text directly from the Nate's well-written README.txt, so don't be confused by the liberally-applied quotation marks.
Writing custom Facebook OAuth Actions"The Facebook OAuth module provides an API for executing queries against Facebook's vast store of user data." How does this translate into user experience (UX)? In extreme layman's terms, Facebook Oauth allows you to create custom buttons that, when clicked, will 1) grab some good facebook data, and 2) let Drupal interact with it. Sounds like fun, right?
Here are a few examples of things that you could do:
- Create a post to facebook wall link on certain node types
- Import a list of a user's facebook friends and expose it to Views (whoa!)
- Import a user's facebook pictures and ... expose them to the Media module!? (that would be cool)
Hopefully you're starting to see how great this can be! Best of all, you can accomplish all of this without learning Facebook's Javascript SDK! Nate has streamlined the process of asking for facebook permissions, obtaining access tokens, etc. You just need to make a few Drupal hooks and you're off!
A simple exampleTo create a custom Facebook Oauth action, you'll need to drop a bit of code into a custom module. We'll start by telling Facebook Oauth that we have a new action that it should be aware of. This is done with hook_fboauth_actions().
/**
* Implements hook_fboauth_actions().
*/
function mymodule_fboauth_actions() {
// Give each action a unique key, such as "mymodule_photo_import" for a photo
// import. This function should begin with the name of your module.
$actions['mymodule_photo_import'] = array(
// Give you action a human-readable name. This will be used when showing
// the user a link to start this action.
'title' => t('Import my Facebook photos'),
// Specify the name of your callback function that contains the import.
'callback' => 'mymodule_fboauth_action_photo_import',
// Specify permissions you need to do this action. See the Facebook API for
// a list: http://developers.facebook.com/docs/authentication/permissions/
'permissions' => array(
'user_photos', // Gets access to a user's photos.
),
// Optionally specify a file that contains your callback function. If you
// put your callback function in the .module file, this is unnecessary.
// 'file' => 'mymodule.inc',
// Optionally define a theme function for printing out your link (not
// including the "theme_" prefix). If you use this option, you must register
// this function in hook_theme(). If you don't use this option, the link
// will be output with the theme_fboauth_action() function or the automatic
// suggestion theme_fboauth_action__[action_name]().
// 'theme' => 'mymodule_fboauth_action',
);
return $actions;
}
Next, you'll need to actually create the mymodule_fboauth_action_photo_import() function specified in the above hook. Until now, we've engaged in what Jeff Eaton might refer to as "Wishful Programming," meaning that we make calls to functions that we wish existed. Let's make this function a reality.
/**
* Facebook OAuth action callback; Import a user's Facebook photos.
*/
function mymodule_fboauth_action_photo_import($app_id, $access_token) {
// Query against the Facebook Graph API. See the Facebook API for a list of
// commands: http://developers.facebook.com/docs/reference/api/
$result = fboauth_graph_query('me/photos', $access_token);
foreach ($result['data'] as $photo) {
// Do whatever you like with the photos!
}
// Optionally set a completion or error message.
drupal_set_message(t('Import complete!'));
// Optionally return a path to which the user will be redirected. If not set
// the path in the $_REQUEST['destination'] variable will be used. If there
// is no path at all specified, the user will be redirected to the homepage.
return 'mymodule/import-complete';
}
"Now to get the user to actually execute this action, you need to link to Facebook so that the user can grant the necessary access. You can do this with the utility function fboauth_action_display(). Our example action was keyed as "mymodule_photo_import", so we would print the link like this:"
print fboauth_action_display('mymodule_photo_import');
"Now when the user clicks on the output link, they will have the option of granting access to the requested information. If they approve, your callback function will be executed."
What's going on behind the scenes?Before I go too much further, it may be good for us to go over exactly how Facebook Oauth is doing its magic. The README.txt does a great job of explaining this:
..in order to use this API it is important to understand the basic concepts of OAuth. In short, the user (and only the user) is capable of granting your site access to query information
against Facebook. The user is also only able to do this on Facebook.com, so any requests to query against Facebook must first redirect the user to Facebook where they can grant access. The full workflow looks like this:
- The user clicks on a link (such as the Facebook Connect button) that sends the user to Facebook. If the link is requesting permissions that the user has not yet granted, the user is prompted to allow access. After the user has granted access, or if the user granted access previously, the user is redirected back to your site.
- When the user is redirected back to your site, Facebook sends along an access "code". Your site then takes this access code and does a server-side request to Facebook's API servers. Facebook's servers return an access "token" to your server. This token is valid for a short amount of time and allows you to access the information to which the user granted you access.
- Your site can now execute queries against the user's Facebook information while the token is valid. Because this token only lasts a short amount of (about 6 hours usually), it's safest to always request access from Facebook before every data import session (by having the user click the link), which will renew the existing token or generate a new one.
Whew! Let it me said this really does happen behind the scenes. If the user has already granted the necessary permissions, they don't even see the redirect. Now let's dive back into the code.
Calling your custom actions programmaticallyYou may be tempted to ask, "But Matt, what if I don't want to require the user to click a button? Can I just fire my facebook action programmatically?" I'm glad you asked, because yes, you can! There's a fairly simple way to accomplish this.
// Extract the link from a given fboauth action. $fb_link = fboauth_action_link_properties('my_custom_action'); // Extract the request url from a given fboauth action link, including the query parameters. $fb_query_url = url($fb_link['href'], array('absolute' => TRUE, 'query' => $fb_link['query'])); // Redirect user to facebook for authorization. drupal_goto($fb_query_url);
When might you want to do use this method? I had two use cases for this approach:
- Creating a menu callback that will execute an action.
- Creating a $form['submit'][] handler that will execute an action.
Facebook also offers a rich API for sending data back to Facebook. How can we utilize those features? It's not actually that hard. Let's take a look at how we can accomplish this by leveraging some of Facebook Oauth's built-in ability to communicate with Facebook.
The following snippet uses Facebook's Graph API to post to a user's Facebook wall.
function mymodule_fboauth_action_post_to_wall($app_id, $access_token) { // Build the data array that we'd like to post to facebook. // See https://developers.facebook.com/docs/reference/api/user/#posts for valid array keys. $query = array( 'link' => $awesome_node, 'picture' => url(drupal_get_path('theme', 'my_theme') . '/images/logo.png', array('absolute' => TRUE)), 'name' => t('@name loves Drupal', array('@name' => $user->name)), 'caption' => t('ZOMG'), 'description' => t('This message was endorsed by Grasmash'), 'app_id' => variable_get('fboauth_id', ''), ); $response = fboauth_graph_query('me/feed', $access_token, $query, 'POST'); if (isset($response->id)) { drupal_set_message(t("You have posted to your facebook wall. That must have been hard. Take a break. Have drink. You're done.")); } else { watchdog('mymodule', 'Error executing fboauth action: @error', array('@error' => (isset($reponse->error) ? $response->error : t('Something went horribly wrong')))); drupal_set_message(t("Oops! We couldn't post to your facebook wall. Try clicking harder.")); } // Optionally redirect user. return '<front>'; } The Encore
The possibilities don't stop there! Facebook OAuth also provides:
- alter hooks to modify default actions
- save and pre-save hooks for facebook registrations
- the ability to hook into the deauthorization process
How might that help you? Well, I used these hooks to integrate Facebook OAuth with the Invite module, such that Drupal can send invites via facebook and then react to fulfilled (facebook) invitations. I'm sure you'll think of great ways to use it too.
That's all folks! I hope these quick posts have been helpful for you. If you liked the article, mention me on twitter or /msg me on IRC — madmatter23.
7.x, drupal, facebook, oauth, fb, fboauthMediacurrent: Webinar: A Drush Aliases Primer
A drush site alias file allows you to streamline advanced drush commands and make running them against both local and remote sites a breeze. With a properly configured alias file and an SSH key you can run frequently used commands that have complex options, with a concise easily remembered "alias" on any site. This will help you be far more productive and you will find yourself using drush itself far more often.
Acquia: File import improvements for Migrate 2.4
The Migrate module is the leading tool for migrating data from an external application into Drupal. Migrate has been used to bring many world class sites onto Drupal, including The Economist, Martha Stewart and thousands more. The main theme of the upcoming Migrate 2.4 release is improved file handling on Drupal 7.
Commerce Guys: Commerce Module Tuesday: Commerce AutoSKU
Commerce AutoSKU is a really useful tool for those Drupal Commerce users that don't need or don't care about generating their own SKU identifiers. This module uses the Drupal core capabilities to manage tokens and generate SKU for the products based in other product properties such as title, product id or any other token available in the product context. Additionally, the contributed Token module helps a lot with the selection of the pattern.
The automatic SKU generation can be configured at the product type level and the SKU field can be hide to the administrator users, it also supports case transformation and other settings.
Tags: Drupal 7Commerce Module TuesdayPlanet DrupalPhase2 Technology: Creating handlers for Video Embed Field
Midwestern Mac, LLC: Filter/Search on multiple fields with Views 3.x
A common need I run into with a ton of Drupal sites and Views is searching/filtering content based on multiple fields. For example, a lot of people would like to search for content using either the Title or the Body for a particular content type.
There are two primary solutions offered for this situation, but they both have downsides or are overly complex, in my opinion:
- Use the Computed Field module to create yet another field stored in the database, combining the two (or more) fields you want to search, then expose a filter for that field instead of both of the individual fields. (I don't like this because it duplicates content/storage, and involves an extra module to do so).
- Use the Views Filters Populate to invisibly populate a second field that you've added to a views OR group (using Views OR in Views 2.x, or the built-in AND/OR functionality in Views 3.x). (This module is slightly limited in that you can only work with strings, and again, it involves an extra module).
Instead of using an extra module, I simply do the following to achieve a multi-field search:
Acquia: Measuring Community Participation in Open Source Projects: Data from Drupal.org
A defining aspect of open source software such as Drupal is the collaboration among multiple individuals and organizations on the same software.
So how do you measure the activity of contributors who are working on that software?
For Drupal-based projects, the issue queue and project usage statistics are two good sources of data for measuring participation.
Morten.dk: the second rate citizens of drupalcon
Today the Drupal association presented a new initiative for getting more students & grow the talent pool for the Drupal Project. This is done by setting x number the tickets for Drupalcon munich to half price of the 400€ - well that is if you're a student. This raises big problems about the future the event I see as the Heart & Soul of the Drupal Community.
Drupal Association News: Our Drupal.org Website Is Stepping Up To Drupal 7
There's a new initiative in the wind to upgrade our own Drupal.org site to version 7, and look out, its flying on its own!
Yes, it's been a long time desire ever since Drupal 7 launched, but the momentum and prowess of our amazing community is finally magnetizing into action around the Upgrading Drupal.org to Drupal 7 initiative! It started with a fantastic planning and coding sprint in Portland, OR last month. (see the video) We are now full speed ahead in virtual space and IRC and the issue queues.
Drupal Association News: Our Drupal.org Website Is Stepping Up To Drupal 7
There's a new initiative in the wind to upgrade our own Drupal.org site to version 7, and look out, its flying on its own!
Yes, it's been a long time desire ever since Drupal 7 launched, but the momentum and prowess of our amazing community is finally magnetizing into action around the Upgrading Drupal.org to Drupal 7 initiative! It started with a fantastic planning and coding sprint in Portland, OR last month. (see the video) We are now full speed ahead in virtual space and IRC and the issue queues.
Drupal Association News: Application Process Opens Today For Drupal Community Cultivation Grants
Building on a successful 2011 pilot program, the Drupal Association is opening a new application process for Drupal Community Cultivation Grants. The grants will assist organizers and leaders within the community that seek to transform, support, and educate Drupal communities around the world. The 2011 program awarded more than $20,000 to 17 projects all over the world in support of camps, training, sprints and a publication.
Drupal Association News: Application Process Opens Today For Drupal Community Cultivation Grants
Building on a successful 2011 pilot program, the Drupal Association is opening a new application process for Drupal Community Cultivation Grants. The grants will assist organizers and leaders within the community that seek to transform, support, and educate Drupal communities around the world. The 2011 program awarded more than $20,000 to 17 projects all over the world in support of camps, training, sprints and a publication.
Urban Insight: How to Display One Value from Two Fields in a Drupal View
There is a situation where one field of a Drupal View needs to pull its content from two fields (aka cck fields) of a node. In my case, they were default author field and a custom field called contributor. This example uses Drupal 7 and Views 3.




