Planet Drupal

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

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

mer, 30/09/2015 - 20:28

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.

Catégories: Elsewhere

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

mer, 30/09/2015 - 18:57
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.

Catégories: Elsewhere

Kodamera Screencast: Webform - A short introduction

mer, 30/09/2015 - 15:58

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

Catégories: Elsewhere

Freelock : Countdown to Drupal 8!

mer, 30/09/2015 - 05:25

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
Catégories: Elsewhere

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

mer, 30/09/2015 - 05:13
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).
Catégories: Elsewhere

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

mar, 29/09/2015 - 23:11

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.

Catégories: Elsewhere

OSTraining: Use Adminimal for a Responsive Admin in Drupal 7

mar, 29/09/2015 - 23:01

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:

Catégories: Elsewhere

Pantheon Blog: Drush and the Drupal Console with Drupal 8

mar, 29/09/2015 - 22:05
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!)
Catégories: Elsewhere

ThinkShout: Free Salesforce and RedHen Trainings at BADCamp

mar, 29/09/2015 - 18:00

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!

Catégories: Elsewhere

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

mar, 29/09/2015 - 14:48

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.

Catégories: Elsewhere

Paul Johnson: Drupal 8 hall of fame

mar, 29/09/2015 - 14:29

At DrupalCon I arranged for a 9 metre squared floor decal celebrating the top 1000 contributors to Drupal 8. So many of you asked for access to the original artwork, and many who could not be at the conference, so I have prepared this page so you can!

It was such a delight to witness so many Drupalists, with a great sense of pride, photographing theirs and friends names, sharing on social media. The larger a name is, the more they have contributed. But honestly if your name is there, bravo to you!

Below the tag cloud is clickable so you can reach each persons D.O account. There is also attached a PDF version so you can print it if you like.

I used for source data and to produce the artwork. I hope you enjoyed seeing it and look forward to seeing you at future Drupal events.

File:  Drupal8.pdf
Catégories: Elsewhere

Amazee Labs: DrupalCon Barcelona - Recap

mar, 29/09/2015 - 12:44
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:

Catégories: Elsewhere

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

mar, 29/09/2015 - 12:41

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
Catégories: Elsewhere

InternetDevels: How Responsive Web Design Works — Presentation

mar, 29/09/2015 - 12:09

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
Catégories: Elsewhere

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

mar, 29/09/2015 - 10:27

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
Catégories: Elsewhere

Chromatic: Programatically Creating and Storing WordPress Migrate Migrations in Drupal

mar, 29/09/2015 - 05:17

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' => '',
      'domain' => '',
      'domain' => '',
  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.

Catégories: Elsewhere

OSTraining: New Video Class: Speeding up Joomla

mar, 29/09/2015 - 03:22

If you run a Joomla site, then you really need this week's new video class from Rod Martin called "Speeding up Joomla".

Rod starts by showing that a normal Joomla site is not highly-optimized and then he takes you through 10 steps to improve your site speed.

First, you'll learn to use Google PageSpeed and YSlow to test your site. Then Rod shows you how to use caching, compresssion, .htaccess, CDNs and more. By the time you've finished this class, you'll have a blazing fast Joomla site!

Catégories: Elsewhere

Gbyte blog: How to use the Drupal 8 honeypot module efficiently

mar, 29/09/2015 - 00:33
The Honeypot module is a great captcha alternative, as it keeps spam bots from submitting content while also saving your site visitors from having to type in mundane character combinations. Configured properly it will prevent the majority of bots from submitting forms on your site including registration forms, contact forms, comment forms, content forms... any drupal forms.
Catégories: Elsewhere