Feed aggregator

Drupal CMS Guides at Daymuse Studios: Upgrade Your Tools: Build a Drupal Developer Toolkit Tutorial

Drupal News - October 1, 2015 - 4:03am

Drupal Developer Toolkit tutorial series reviews web apps, desktop applications, mobile tools, and web services to improve your work and quality of life.

Gbyte blog: What to keep in mind when creating Drupal 8 projects - for developers

Drupal News - September 30, 2015 - 5:50pm
With only a few critical issues left in the Drupal 8 queue and D8 being surprisingly usable, many developers already use it in small projects to play with the technology and to challenge themselves. I have to admit, I am no exception - the embracement of many PHP technologies and (finally!) the jump to the OOP paradigm makes me want to stop writing right now and code some more.

DrupalCon News: If you're not going to DrupalCon, you're missing out

Drupal News - September 30, 2015 - 11:21am

The Drupal Association has partnered with Niswey, an India-based marketing firm, to provide marketing materials for DrupalCon Asia. Every few weeks, we'll be sharing the blogs and comic strips that our Niswey friends have created in anticipation of the convention.

Red Crackle: Is Drupal Dying?

Drupal News - September 30, 2015 - 10:55am
I am sure you must have heard this question or pondered about it multiple times. Is Drupal dying? If you search about this topic on Google, you will see volumes of opinions, one way or the other. In this post, I am presenting some facts that were brought in front of me and some facts that I myself researched. As of now, I am still wondering whether Drupal is dying or not. Read the post and let me know what you think via comments.

Chapter Three: How to Get a Views & Panels Site to Work with Workbench Moderation

Drupal News - September 30, 2015 - 10:28am

Workbench moderation works by allowing you to keep a new revision of your content as a draft (or unpublished) while an older revision remains as your published version. Out of the box Drupal handles this beautifully, most of the time. However, once you start adding contributed and/or custom modules, things can start to get hairy.

For example, Path module will generate a new alias each time your node is saved (if you define one in your node’s settings). This is great when the latest revision is your published content, but when the latest revision is a draft, you’ll want the keep the old alias until you publish the draft.

Drupal core announcements: Drupal 8 beta 16 on Thursday, October 1, 2015

Drupal News - September 30, 2015 - 8:57am
Start:  2015-10-01 (All day) America/New_York Online meeting (eg. IRC meeting) Organizers:  catch xjm

The next (and hopefully final!) beta release for Drupal 8 will be beta 16! (Read more about beta releases.) The beta is scheduled for Thursday, October 1, 2015. To ensure a reliable release window for the beta, there will be a Drupal 8 commit freeze from 00:00 to 23:30 UTC on September 30 (later on today).

Beta 16 will include a couple of important changes, including the removal of the ! placeholder from t(), and the moving of vendor code from /core/vendor into /vendor.

Kodamera Screencast: Webform - A short introduction

Drupal News - September 30, 2015 - 5:58am

The Webform module is a powerful ally when you need complex forms. In this video I talk briefly about when you can use Webform, what different components that ships with the module and also a little about the functionality the the module offers when is comes to sending emails and showing the information added to the webform.Read more

Freelock : Countdown to Drupal 8!

Drupal News - September 29, 2015 - 7:25pm

Drupal 8 has only 4 critical issues before getting released out of beta! Fingers crossed for a release this week!

The major issues that remain are: 

Drupal PlanetBusiness Intelligence

Gbyte blog: When custom t() strings are missing from the translate interface

Drupal News - September 29, 2015 - 7:13pm
The Drupal 7 translation system including the internationalization package is a heavy beast and while it mostly gets the job done, it is all but intuitive in use. For high volume translations it is recommended to use the translation template extractor and translate the strings externally. For small corrections however, it is often much more convenient to use the translation interface (admin/config/regional/translate/translate).

Web Wash: Build a Blog in Drupal 8: Content types and Fields

Drupal News - September 29, 2015 - 1:11pm

With Drupal 8 on the horizon, now is a good time to start using it. The best way to learn the new version is to build something with it.

Over the next few weeks, I'll be publishing a series of tutorials teaching you how to create a blog in Drupal 8. The aim of the series is to help new comers, as well as experienced site builders, how to create a blog website using Drupal 8.

Throughout each tutorial, major changes between Drupal 7 and 8 will be highlighted. Even if you know Drupal 7, follow along and you'll learn what's new in Drupal 8.

In this first tutorial, you'll learn how to create a Blog content type and how to add custom fields. You'll also learn about the Taxonomy system by creating your own vocabulary to categorize blog posts.

OSTraining: Use Adminimal for a Responsive Admin in Drupal 7

Drupal News - September 29, 2015 - 1:01pm

Do you want many of the benefits of the new Drupal 8 admin area, without actually needing to upgrade? Check out the Adminimal theme.

Adminimal provides a responsive admin area for Drupal 7 sites.

Adminimal also has several usability improvements. For example, Adminimal has colored buttons for common tasks like Submit, Preview and Delete to them easier to see. Adminimal also provides improved layouts for the Configuration, and Module screens. 

In this video, taken from our Better Drupal Administration class, Robert Ring introduces you to Adminimal:

Pantheon Blog: Drush and the Drupal Console with Drupal 8

Drupal News - September 29, 2015 - 12:05pm
With interest in Drupal 8 heating up, a lot of people are wondering whether they should be using Drush or the Drupal Console as their command line tool of choice. Drush is the longstanding heavyweight champion, widely used and supported in hundreds of contrib modules. Drupal Console sports the modern Symfony Console component, that provides a new object-oriented interface for command line tools, exposing the power of the Symfony framework to script developers. Which is better for Drupal 8? (Disclaimer: I am a maintainer of Drush, but the answer may surprise you!)

ThinkShout: Free Salesforce and RedHen Trainings at BADCamp

Drupal News - September 29, 2015 - 8:00am

This year marks a particularly exciting BADCamp for us. On Friday, October 23, we’ll be leading two official half-day trainings on Salesforce and RedHen CRM!

We talk a lot about Salesforce and RedHen on our blog, which is inevitable given how much time we spend working with both. Given that the Drupal Salesforce Suite we wrote and maintain powers over 1,200 sites, we decided we should talk about it more! Lev Tsypin, Tauno Hogue, Greg Boggs and I will be your trainers for the day.

RedHen CRM: Exploring CRM Solutions That Extend Drupal

This half-day workshop will begin with a detailed review of the modules that make up the “RedHen CRM ecosystem.” We’ll then show you how to leverage RedHen for building advanced CRM-driven solutions. A hands-on training, we will help you configure and customize your own RedHen instance, and we will teach you best practices for building solutions on top of this module suite. We’ll cover tools in the RedHen ecosystem, including memberships, donations, campaigns, engagements, deduping contacts, and integrating RedHen with other Drupal standard bearers such as Views, Rules, Context, etc.

Integrating Drupal and Salesforce: The World’s Most Flexible CMS Meets the Most Powerful CRM

After lunch, the latter half of our workshop block will start with the basics of configuring mappings between Drupal entities and Salesforce objects and leveraging typical Drupal development workflows. Then we'll dive deeper into complex scenarios including managing large datasets, customizing behaviors as objects are synced, and managing errors.

If you’ve ever wanted to talk to us in person about our work, or how to better leverage these CRMs to meet yours or your client’s needs, now’s your chance. These trainings are FREE (it’s $20 to reserve a seat, but that $20 will be refunded) and space is limited, so register early!

OpenLucius: Headless Drupal & Node.js | Part 2/3: Node.js

Drupal News - September 29, 2015 - 4:48am

This is part two of the series “Headless Drupal & Node.js”, for part one, click here. In this blog I will give you a 'Hello Node' introduction. 

About Node.js

Node.js uses complex techniques and can therefore be confusing to work with. It is therefore not suitable for the novice web developer.

Amazee Labs: DrupalCon Barcelona - Recap

Drupal News - September 29, 2015 - 2:44am
DrupalCon Barcelona - Recap Josef Dabernig Tue, 09/29/2015 - 12:44

DrupalCon is not only about sessions, though they are a big part of the conference. Up to 10 presentations at the same time ensure, that there is quality content for any audience. At the same time, many things happen alongside of the sessions.

Some of the side activities might be really familiar to anyone who has attended a Drupal event; some might be hidden gems that I would definitely recommend checking out.

Drupal is all about the people behind the great software we are using. Let's find out together what happens during DrupalCon.

Before starting with the actual conference, we did the second Tour de Drupal. This time, we were a much smaller team. Christian and I started in Andorra, cycling over the Pas de la Casa over the French boarder and back to Puigcerda, Spain on Friday. The next day we took a train to Vic and biked over some nice hills and down to sea level located Blanes.

Finally, on Sunday, the Tour de Drupal crew was completed when Gaele joined us from his 2 weeks cycling trip, along with Martin, for the final lap from Blanes to Barcelona alongside the beautiful beaches.

The local Spanish community and other conference attendees welcomed the Tour de Drupal team.  At a beach bar next to the conference centre we got to see some nice fireworks from the city centre. Pictures from Tour de Drupal Barcelona 2015 are available here

We got to the conference on Monday, where community members where already working on fixing the last critical bugs for the upcoming Drupal 8 release during the extended sprints. There are always a few people taking pictures, including for example Paul Johnson. We were also glad to see Boris Baldinger, former Amazee Labs colleague, join us for DrupalCon as part of his new business as full-time photographer.

Mondays at DrupalCon are often underestimated as just a day of arrival, attending trainings, or participating in the business summit. But besides that, there is a room full of sprinters and there was also a community kick-off event happening. People interested in the inner workings of the Drupal community joined together to discuss internal topics like event organization and best practices - for example.

On the ground floor, companies were busy preparing their sponsor booths in the exhibit hall. We from Amazee Labs traditionally see DrupalCons as a big investment; we are sponsors, and put a lot of work into our booth. In this way we can both support the Drupal community by facilitating such an important event but also represent our brand across the community and provide visitors and employees a comfortable area to discuss business and hang out. 

The evenings and nights after DrupalCon are packed with social events where community members gather to chat, drink, or eat together in a more relaxed atmosphere.

Tuesday morning, just before the Keynote by Drupal founder Dries Buytaerd (aka "Driesnote"), Robert Douglass, Jeffrey "Jam" McGuire, and a team of creative community members present the "Prenote". Each DrupalCon, they come up with a great show explaining Drupal to newcomers and share regional fun facts about the hosting city or country. 

After each keynote there is a moderated Q&A where Mike Anello asks questions collected via twitter, which provides a great way to discuss instant feedback from the audience on the presented topics. Check out the hashtags #driesnote, #DCNahai, #DCRozas, #DCBell for more info.

Just after the first keynote, all conference attendees gather outside for a big group picture. This time, more than 2000 folks interested in Drupal joined in. That's Diana up there at the top, the DrupalCon production lead, strapped in a safety harness to get the shot!

Drupal heavily relies on contributions by individuals who invest a lot of time into making the system better. Drupal 8 has an incredible amount of more than 3000 active contributors. In the sponsor hall, the Drupal8 Contributors Hall Of Fame, contributed by CTI Digital, visualized all the names as a floor graphic.

Tuesday evening, the local Drupal association threw a great party at the beach with live music allowing the diverse crowd to connect with each other in an open, outdoor environment. 

Alongside sessions and workshops, many interviews were held, capturing voices from influental community members about the current state of Drupal, and their experiences doing business and working with the community.

To compensate for heavy coding sessions and deep technical discussions, Drupalists also hang-out with each other and just have a good time at the beach, swimming or enjoining the ocean breeze.

While most of the sessions are related to technical topics, there is also another track that I find really interesting. In Core Conversations, we discuss how to improve our processes, what works well, and what needs to be fixed in order to work well together. On the above picture, you can see YesCT, kgoel, bfr, and alimac in their session Paid contribution: past, present, and future.

Drupal core development is a constantly evolving process. In the Drupal 8 release cycle, initiatives where introduced to allow breaking down the complexity of tasks into different areas. Now, with the Drupal 8 release coming up soon, Dries and the team of core committers took a chance to do a retrospective on what went well and what needs improvement: Drupal 8 retrospective with Dries.

In the closing session, the next big DrupalCon events are announced. Besides Frontend United Ghent (May 27-28, 2016)Drupal Dev Days Milano (June 2016), DrupalCon Asia (Feb 18-21, 2016)DrupalCon New Orleans (May 09-13, 2016) and DrupalCon Dublin (September 26-30, 2016) were announced. In the above picture you can see the enhusiatic Indian community promoting their local event. 

On Thursday evening, "Trivia Night" was on! A fun Irish-style pub quiz with questions on Drupal and picture puzzles. 

Conference attendees from various countries and continents celebrate the game together.

Friday is the official sprint day of DrupalCon. The entire day is dedicated on workshops that allow contributors to improve Drupal core and contributed modules. Our sucessful mentoring system ensures that new contributors are onboarded properly to Drupal's contribution systems and processes.

A great collaborative effort is being made to facilitate moving Drupal forward, while at the same time providing free training for anyone interested in learning new systems first-hand from the experts in Drupal.

There were three rooms full of contributors: one with a First-Time Sprinter Workshop, a second one hosting a Mentored Core Sprint and a third one where contributors work in a self-organized way on different initatives per table. As part of the #d8rules initiative, I led a sprint table for porting the Rules module to Drupal 8.

There is a lot going on during DrupalCon. Thanks to everyone for organizing and making DrupalCon such a multifaceted event!

More photos can be found on the Amazee Labs flickr account:

Darryl Norris's Blog: Light Skeleton - A Simple Theme (MVP)

Drupal News - September 29, 2015 - 2:41am

Light Skeleton is a theme base on version of Skeleton v2. The goal of this project is trying to be as close as Skeleton v2 in the Drupal theme. Light Skeleton is a very lightweight theme that does not require any type of compiling, and provide an out-box styling, without a need of not large UI framework.
  • A new truly responsive grid based on percentages
  • Mobile first media queries
  • New typeface Raleway as default
  • Generally simpler style
  • More robust forms (especially in relation to grid)
  • Inclusion of basic table styling
  • Inclusion of super basic code styling
Similar Projects They are couple contrib themes based on Skeleton, however; none of them are based on the latest version of...Read more

InternetDevels: How Responsive Web Design Works — Presentation

Drupal News - September 29, 2015 - 2:09am

If you already know the name of Ethan Marcotte and the term “responsive design”, you have chosen the right direction. If not - this direction is a fortiori necessary for you. Let’s take a look on the brief history of the responsive design.

Read more

InternetDevels: How to start with Symfony2 framework: tutorial for beginners

Drupal News - September 29, 2015 - 12:27am

If you want to begin studying Symfony web development, this
Symfony2 framework tutorial by our developer could be very
useful for you. However, if you want to hire a Symfony developer
for building an amazing website, you’re always welcome!

Read more

Chromatic: Programatically Creating and Storing WordPress Migrate Migrations in Drupal

Drupal News - September 28, 2015 - 7:17pm

Migrations are never glamorous, but doing them right and verifying their integrity is essential to their success. The WordPress Migrate module gives you an easy turnkey solution to migrating content into Drupal from WordPress. It allows you to create each migration through an interactive admin form, allowing you to configure your migration entirely through the UI. This is great, but it does not make creating or storing the resulting migrations easy to manage across multiple environments, since the migrations are not defined in code like a typical Migrate class. Short of copying database tables or re-entering the configuration through the admin forms, developers are stuck with the migrations stored in a single database and thus it is not easy to move to other environments for testing or further development.

Copying data tables is almost always the wrong solution and manually re-entering all of the migrations would be way too time consuming, so our solution was to create the migrations programmatically. To do this, we hooked into the existing WordPress Migrate codebase and used its logic to build programmatically, what it builds from data input to its admin forms. Then we are able to define all of our migration sources in code and instantly create all of our migrations in a new environment, or recreate them after something fails during development.

As mentioned, this solution relies upon programmatically submitting admin forms, which is often not an ideal scenario. Additionally, there is the almost inevitable request to add additional customizations beyond what Wordpress Migrate supports out of the box. Sometimes this makes WordPress Migrate more of a hinderance than a help. So why not just create a custom Migrate class from the outset and avoid all of these issues? Here are some factors to consider:

  • Writing a custom Migrate class for your WordPress content always sounds more appealing until you run into problems and realize WordPress Migrate already solved those issues.
  • The WordPress Migrate module offers a lot of functionality, including file transfer, author migration, embedded video processing, internal link rewriting, comment migration, etc.
  • You might not need much custom code and just tweaking the WordPress Migrate functionality by extending one of its classes will easily do the trick.
  • You might not have the resources (time, knowledge, etc.) to write a custom Migrate class.
  • Running and testing the migrations on multiple environments might not be in your workflow, although I would argue it should be.
  • You might only have one or two WordPress sites to migrate content from, so manually re-creating them is not an issue.

If after weighing all of the factors, you decide using the WordPress Migrate module is in your best interest and manually recreating the migrations is not an option, then follow along as we walk you through our approach to creating and storing WordPress Migrate migrations programmatically.

Our Solution

First we need to define the list of source blogs. The keys of each item in this array can be added to as needed to override the default values we assign later.

* Define the WordPress blogs to be imported.
function example_wordpress_migrate_wordpress_blogs() {
  // Any key not set here will default to the values set in the
  // $blog_default_settings variable in the drush command.
  $blogs = array(
      'domain' => 'www.example.com/site-one/',
      'domain' => 'www.example.com/site-two/',
      'domain' => 'www.test.com/',
  return $blogs;

Next we’ll create a custom drush command so that we can easily trigger the creation of our migrations from the command line.

* Implements hook_drush_command().
function example_wordpress_migrate_drush_command() {
  $items = array();
  // Creates WordPress migrations.
  $items['example-migrate-create-wordpress-migrations'] = array(
    'description' => 'Creates the WordPress migrations.',
    'aliases' => array('mcwm'),

  return $items;

Be sure to note the example_migrate_wordpress_password variable below, as you will need to ensure you set that in settings.php before creating the migrations. The WordPress Migrate code needs to be able to login to your site to download the source XML file, and a password is paramount to the success of that operation!

* Callback for WordPress migration creation drush command.
function drush_example_wordpress_migrate_create_wordpress_migrations() {
  // Reset the file_get_stream_wrappers static cache so the 'wordpress' stream
  // wrapper created by the wordpress_migrate module is available.
  $wrappers_storage = &drupal_static('file_get_stream_wrappers', NULL, TRUE);
  // The wordpress_migrate module's UI is a multi-step form that collects all
  // configuration needed to migrate a given blog. As this form's steps are
  // submitted and validated, an export file is downloaded for each blog and its
  // contents are migrated. There is no easy way to export these settings or use
  // code to provide that configuration and then trigger a migration, so the best
  // bet is simulate the submission of those form steps with the needed data.
  module_load_include('inc', 'migrate_ui', 'migrate_ui.wizard');
  // Get a list of blogs to migrate.
  $blogs = example_migrate_wordpress_blogs();
  $blog_default_settings = array(
    'source_select' => '1',
    'domain' => '',
    'username' => 'admin',
    'password' => variable_get('example_migrate_wordpress_password', ''),
    'wxr_file' => NULL,
    'do_migration' => 0,
    'default_author' => 'admin',
    'page_type' => '',
    'blog_post_type' => 'story',
    'path_action' => 1,
    'tag_field' => '',
    'category_field' => '',
    'attachment_field' => '',
    'text_format' => 'filtered_html',
    'text_format_comment' => 'filtered_html',
  // Import each of the blogs.
  foreach ($blogs as $blog_settings) {
    // Combine the default settings and the custom per blog settings.
    $blog_settings = array_merge($blog_default_settings, $blog_settings);
    // Skip the import if no username or password was found.
    if (empty($blog_settings['username']) || empty($blog_settings['password'])) {
      $message = t('The :site-name migration was not created since no username and/or password could be found. Verify that the example_migrate_wordpress_password variable has been set.');
      $replacements = array(
        ":site-name" => $blog_settings['domain'],
      drupal_set_message(t($message, $replacements), 'warning');
    // Set the form state values.
    $form_state['values'] = $blog_settings;
    // Store the values so we can use them again since $form_state is
    // a reference variable.
    $form_state_values = $form_state['values'];
    // Build the import form.
    $form = drupal_get_form('migrate_ui_wizard', 'WordPressMigrateWizard');
    $form = migrate_ui_wizard($form, $form_state, 'WordPressMigrateWizard');
    // Create a Migrate Wizard object.
    $form_state['wizard'] = new WordPressMigrateWizard();
    // Set the number of steps in the form.
    $form_steps = 6;
    // Go through all of the steps.
    foreach (range(1, $form_steps) as $step) {
      // Validate the form data.
      // Submit the form page.
      migrate_ui_wizard_next_submit($form, $form_state);
      // Put any values removed from the array back in for the next step.
      $form_state['values'] = array_merge($form_state_values, $form_state['values']);
    // Submit the form.
    drupal_form_submit('migrate_ui_wizard', $form_state);
    // Save the settings into the wizard object.
    // Notify the user that the migration was created successfully.
    $replacements = array(
      '@site-name' => $blog_settings['domain'],
    $message = t('The @site-name migration was successfully created.', $replacements);
    drupal_set_message($message, 'success');

With all of this in place, the source WordPress sites and the configuration needed to import them are now fully defined in code along with a custom Drush command to create the required migrations. No longer will each individual site need to be re-entered through the UI introducing opportunities for mistakes and wasted time.

Now when you are in a new environment or after you reset your migrations, you can simply run drush mcwm.

Following its successful completion, the following are done for you:

  • A new Migrate group is created for each individual blog.
  • The actual Migrate classes within each group that migrate, authors, content, terms, and attachments are created and configured as defined in the code.
  • The source WordPress XML file is downloaded for each site and stored in wordpress://.

Then simply run drush ms to verify everything was created successfully, and you are ready to migrate some content!

Now that you have the tools and knowledge to evaluate your unique migration needs, you can make a well informed decision if this approach is right for you. However, we think that more often than not, all of the incredible functionality you get pre-built with the WordPress Migrate module will outweigh the issues that arise from not being able to fully build and store your migrations in code, especially when you add the functionality outlined above that gets you the best of both worlds. So have your cake and eat it too, and define your migrations in code and utilize the WordPress Migrate module while you are at it!

If you decide to go this route, all of the code referenced here is available in this gist. Please note that this was all built for WordPress Migrate 7.x-2.3, so future updates to the module could break this functionality.

Syndicate content