Drupal Planet

Syndicate content
Drupal.org - aggregated feeds in category Planet Drupal
Updated: 45 weeks 2 days ago

Mediacurrent: Exporting and reloading Drupal databases with Drush

Tue, 2013-11-26 08:50

The Drush system is a tremendous productivity booster for those who learn to use it, it can be used for simplifying module updates, to upgrading from Drupal 6 to 7, to juggling Features. Furthermore, its potential is near limitless once a relatively simple set of hooks is learned. My focus today, however, is on a rather rudimentary problem - exporting & re-importing databases, a task that is typically used to make a copy of a production database in order to run it locally.

Categories: Drupal

Drupal Watchdog: The Angry Themer

Tue, 2013-11-26 07:32
Removing Module Provided CSS Files

In this article, let’s explore the art of removing, once and for all — with a few little magic tricks — the clutter of CSS classes and irritating CSS that you never need.

As a frontend developer, working in Drupal can be a bit of a hassle. One of the things that always shocks a new themer is where all those damn CSS files are coming from and what they’re supposed to do. Even more important: how to remove those that aren't needed.

The way Drupal works is that every module and its grandma brings along its own CSS file, which is intended to make everything work “right out of the box.”

That’s all fine and dandy, but let’s be honest here: we don't want to schlep any CSS around unless it's absolutely necessary for the site. Extra CSS is sloppy, makes the site slower and, let's not forget, you will end up spending days to overwrite CSS that was provided as a default. (Thanks but no thanks, Drupal.)

Morten DK

Morten runs a Drupal shop called geek Röyale, on a corner of Copenhagen's red light district. Besides having an ego the size of your cache tables, he is a "front-end developer" who has been in love with Drupal since 4.7. Morten despises the huge amount of mark-up and CSS that Drupal spits out, and continues to fight to improve the situation.

Categories: Drupal

Blink Reaction: How MVP, Drupal & Open Source Technology can Reshape your Business

Tue, 2013-11-26 05:50

There is no shortage of buzzwords or fads in tech today and they tend to get thrown around carelessly. But there is a growing trend in the start-up sector that  offers an essential lesson for businesses small and large.

This is the concept of Minimum Viable Product or MVP. MVP is thrown around a lot. I’ll leave the history of the term for another time. For now it’s important to know two things:

Categories: Drupal

Web Wash: How to Create a Custom Field Formatter in Drupal 8

Tue, 2013-11-26 00:35

In Drupal, field values are displayed to the end user via a field formatter. Formatters that come with fields are often pretty basic. If you want to change what a field displays, then the best way to do this is to write a custom formatter.

A field formatter in Drupal 7 can be created in a few ways: first with code or using the Custom Formatters module.

On the other hand, if you're using Display Suite, then you can create a "Display Suite Field" which is similar to a formatter.

But now it's time to learn how to create a field formatter in Drupal 8.

In this tutorial, we'll create a custom formatter for the link field that'll allow an editor to display an embedded YouTube video.

The link field will be used to store a YouTube URL and the formatter will be used to display the embedded video.

Categories: Drupal

Marek Sotak: Process improvement: Creating website manuals for clients in under 5 minutes

Mon, 2013-11-25 23:54

Back from Drupalcamp Vienna, where I talked about how supporting your users is one of the processes of web development that we should not forget about. I gathered some interesting feedback from visitors and again it proved how everyone is struggling with handing over any information on how to operate website. It either takes ages to create (screenshots and screencasts) or it is not reusable.

Categories: Drupal

Lin Clark: Video: Quickstart to testing with Behat, Mink, and Selenium

Mon, 2013-11-25 17:00

It is easy to test your website's functionality using Behat, a PHP framework for BDD (behavior driven development). This video quickly goes through the configuration of Behat, Mink, and Selenium.

Setting up Behat
  1. Install Composer
  2. Create a composer...
Categories: Drupal

Get Pantheon Blog: 12 tips to get your Drupal website humming for the holidays

Mon, 2013-11-25 15:25

Just in time for the holidays: we’ve put together 12 tips to help you get your site ready to handle holiday traffic spikes.

1. Optimize your Drupal caching settings and don't forget to aggregate your CSS and JS.

2. Use Redis as a caching backend.

3. Enable New Relic to monitor your site performance and alert you when things go awry.

4. Make sure Varnish is caching your site. 

5. Check your watchdog logs for PHP notices and warnings and fix them.

6. Make sure you're using the latest version of Drupal core. 

7. Make sure you have backups configured on your site so you can sleep well at night. 

  • Reduce potential downtime with one-click restore in case of an emergency.

8. Take a look at your Views caching settings and make sure they're logical. 

9. Try performing dashboard operations from the terminal to save time. 

10. Use a CDN: Here is how it helps:

  • Ensures your data is distributed across multiple data centers
  • Offers clear usage analytics (better forecasting and planning
  • Improves response times (Edge locations closer to users)
  • Handles traffic surges
  • Offers browser caching for static assets
  • Optimizes for mobile users

Two CDN options: 

  • Cloudflare - gives you greater control over your website
  • Cloudfront - great for sites with heavy media assets

11. Dont forget to QA. Here are two free services:

12. Load test your expected peak traffic. Here are 4 free services:

We hope these tips are helpful. What are your performance tips to make your website hum? 

Blog Categories: Education
Categories: Drupal

Phase2: Creating RSS Feeds With A Light Hand

Mon, 2013-11-25 11:00

Sometimes when you’re digging around for the “standard” solution to solve a particular problem in Drupal, you’re gifted with the surprise of finding a hidden little treasure that’s been lurking in the code all along. This happened to me recently while researching all the options for generating RSS feeds when I “discovered” the node_feed() function. Sure, it’s been around since version 4, and it works pretty much the same in versions 7 and 8 as it did initially, and Drupal uses it right out-of-the-box to give general RSS feeds for nodes, but it’s still news to me — and I’m so excited about it! In this post I’ll look at the general use “context” (if you will) for this little gem, discuss a basic implementation scenario, give some caching advice, and suggest possible next steps if stricter display control is needed.

But Isn’t That In The GUI Already?!

Anyone who’s spent more than a day seriously working in Drupal knows that Views is the go-to solution for aggregating data, and generating feeds is no exception here; you can quickly spit out RSSs or CSVs or even aggregated .doc or .pdf files if you’re so inclined. Further, using Views can simplify setting up and maintaining complex selection conditions or esoteric data relationships. However, if there’s a problem with Views, it’s that it can be a bit resource heavy at times, and if a site needs to be particularly streamlined for speed and efficiency while the project itself makes little use of aggregated data, then the team-lead may declare Views to be an anathema for that code base, and this was the situation I found myself in recently.

In contrast to creating a feed in Views, the node_feed() function can be a relatively inexpensive process, and it becomes even more efficient if caching mechanisms are effectively applied. If your data selection or formatting needs aren’t easily supported by Views, then node_feed() is a clearly an option to consider, or if you’re working on a project that needs to be kept streamlined and light-weight as possible, then this function may be the right solution for you — especially if the nature of the project is such that Views are being avoided in general, since you don’t want to be the one who wrote code that breaks that goal for the team, eh?

Gimme The Nitty Gritty Obligatory  Example

The general use case for this function is to generate content from a menu, usually filtering for particular data (e.g. based on a taxonomy, content type, author, etc.). This means implementing hook_menu() along with a call-back function which outputs content via node_feed(); e.g.:

/** * Implement hook_menu(). */ function my_module_menu() { $items = array(); $items['feed/%/%'] = array( 'title' => 'My Feed', 'page callback' => 'my_module_my_feeds', 'page arguments' => array(1, 2), 'access callback' => 'user_access', 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); return $items; }

The page call-back now needs to assemble the list of nids to include in the feed and set up the feed itself. There’s not much to say here that isn’t covered in my in-line coding-comments:

/** * Return feed for indicated content. */ function my_module_my_feeds($arg1, $arg2) { // make double darn sure what's coming in is free from evil $arg1 = check_plain($arg1); $arg2 = check_plain($arg2); // The content of $channel provides descriptions in the header of your RSS // feed; see the d.o. API docs for details. $channel = array( 'title' => 'MY RSS', 'link' => url( 'feed/' . $arg1 . '/' . $arg2, array( 'absolute' => TRUE, ) ), 'description' => 'This is my super duper RSS feed', ); // The number_of_items variable might be stored in an admin screen, or simply // adjusted with drush calls at need. $number_of_items = variable_get('my_module_my_feeds_number_of_items', 10); // Ultimately the $nids variable needs to be an array nid integers. $nids = db_select('node', 'n'); $nids->join('some_table', 'st', 'n.nid = st.nid'); // the call to join is non-fluent, soo... $nids->fields('n', array('nid', 'created')); $nids->condition('n.status', 1); $nids->condition('st.property1', $arg1); $nids->condition('st.property2', $arg1); $nids->orderBy('n.created', 'DESC'); $nids->range(0, $number_of_items); $nids->addTag('node_access'); $nids = $nids->execute()->fetchCol(); // And that's it! Call the function du jour and let the magic happen! =o) node_feed($nids, $channel); }

Caching For Fun & Profit

When node_feed() executes, it fully loads all of the nodes from the list of $nids, and to generate that collection there are inevitably DB queries involved. Altogether, this creates a bit more of a processing load than can be tolerated for every single feed request on a high traffic site. There might be an argument to be made for allowing Drupal’s standard page caching to deal with this on its own, but sometimes it’s better to control this yourself. In such a case, cache_set() and cache_get() make this a breeze.

In the following example, code in the my_module_my_feeds() example is expanded to include exactly that type of caching.

/** * Return feed for indicated content. */ function my_module_my_feeds($arg1, $arg2) { $cid = 'my_module_my_feeds_' . $arg1 . '_' . $arg2; if ( ($cache = cache_get($cid)) && is_object($cache) && !empty($cache->data) && time() < $cache->expire ) { drupal_add_http_header('Content-Type', 'application/rss+xml; charset=utf-8'); print $cache->data; } /// Generate $nids and $channel as above, but replace the call to node_feed() /// with the following: // The call to node_feed() outputs content directly, so its output needs to // be captured so it can be cached. ob_start(); // node_feed() sets the header, so it doesn't need to be manually set here as // it is when it's pulled from cache. node_feed($nids, $channel); $feed = ob_get_clean(); // The cache_expire_time variable might be stored in an admin screen or just // adjusted with drush calls at need; obviously, this code assumes the value // to be something parsable by strtotime(). $cache_expire = strtotime(variable_get('my_module_my_feeds_cache_expire_time', '+2 hours')); // Store the feed in cache for later use without all this work of generating // content. cache_set($cid, $feed, 'cache', $cache_expire); print $feed; return false; }

But It’s Not Pretty Enough! =o(

Suppose that the markup being generated in RSS content isn’t quite to your liking. There are a couple of ways to approach the problem of restructuring what’s included.

One option would be to copy the existing node_feed() code to your own my_module_node_feed() function and make adjustments from there, obviously calling this new function from the code above. There are probably contexts in which this will be the appropriate response, but the more canonical and upgrade-friendly approach would be to re-theme the content using native mechanisms. You might note that node_feed() calls node_view() and passes ‘rss’ as its $view_mode argument, and it’s useful to know that in turn this calls node_build_content() by passing that same argument. So, you could implement hook_entity_view_mode_alter(), detect that the current URL structure matches the path to your feed, and change the $view_mode to something else; e.g. ‘my_module_rss’. Strictly speaking, this step isn’t necessary, but it makes the following suggestions a bit more streamlined.

From here, it’s a simple enough matter from hook_node_view() and/or hook_entity_view() to modify content before rendering, but that can get a bit clumsy in some circumstances. A better approach might be to implement a node-preprocess function in a module or theme and add a template suggestion. If you’ve modified the view mode as suggested above then that could be used to detect changes at the theme level, or all of the code might be consolidated in that preprocess function; e.g.:

/** * Implement hook_preprocess_HOOK() for node. */ function my_module_preprocess_node(&$variables) { // if view_mode has been altered as described above: if('my_module_rss' == $variables['view_mode']) { $variables['theme_hook_suggestions'][] = 'node__my_module_rss'; $variables['theme_hook_suggestions'][] = 'node__' . $variables['node']->type . '__my_module_rss'; } // if view_mode was not previously modified, then this might make sense: if( 'rss' == $variables['view_mode'] && 'feed' == arg(0) ) { $variables['theme_hook_suggestions'][] = 'node__my_module_rss'; $variables['theme_hook_suggestions'][] = 'node__' . $variables['node']->type . '__my_module_rss'; // ... and perhaps you'll need special formatting with some args... if (!!($arg1 = arg(1))) { $variables['theme_hook_suggestions'][] = 'node__' . $variables['node']->type . '__my_module_rss__' . check_plain($arg1); if (!!($arg2 = arg(2))) { $variables['theme_hook_suggestions'][] = 'node__' . $variables['node']->type . '__my_module_rss__' . check_plain($arg1) . '__' . check_plain($arg2); } } } }

Obviously, you could then implement node--[type|nodeid]--my-module-rss--[arg1]--[arg2].tpl.php (or any of the other degrading variations just implemented) and output precisely the content you’d like to see in your RSS feed. =o)

And That’s It In A Nutshell!

As you can see, node_feed() is fairly simple withal. Leveraged correctly, it provides sites with a great deal of flexibility even while remaining fairly light with processing. It’s now my go-to solution for an RSS feed system, though I imagine I’ll continue to use Views as and when appropriate.

Makes ya wonder though: What other wee gems are lying around in Drupal core just waiting to be discovered?! =oP Feel free to share your favorite Drupal gem in the comments! Learn more about RSS feeds with Rob Bates here.

Categories: Drupal

Amazee Labs: Our Drupal Camp Vienna Slides

Mon, 2013-11-25 07:50
Be friends with your content editor

Boris doing his part of spreading the word of Pamela Barone's (pameeela) session at DrupalCon Prague.

Translation Management

Michael and Christophe Galli held a reprise of their DrupalCon session.

There Are No Bad Clients, Just Bad Project Managers

Dagmar talked about her experience as a project manager. According to Twitter this session was the best one at the camp.

Categories: Drupal

Mediacurrent: Meet Chris Hales

Mon, 2013-11-25 06:54

So Chris, what's your role at Mediacurrent, both internally and client-related?

I’m the DevOps Manager at Mediacurrent, so I end up wearing a variety of hats. Internally, I’m basically the “IT Guy” since I maintain our infrastructure, third party services, as well as handling a lot of general support for the entire Mediacurrent team.  For clients, I primarily consult on hosting architecture and site performance, but I’m still active as a Drupal architect and developer as well.

We're so glad to have you!  Give us an idea of what professional path brought you here.

Categories: Drupal

Unimity Solutions Drupal Blog: Fast Drupal Ajax calls for High Traffic sites

Mon, 2013-11-25 06:49

Attached an example file that demonstrates the same. In the example module the ajax call is using drupal menu callback triggered using event in jquery.

Categories: Drupal

Propeople Blog: Use the full power of Drush

Mon, 2013-11-25 04:37

Drush is probably one of the most useful tools a Drupal Developer has in his/her arsenal. Drush is a command line shell for Drupal and it can save you a lot of time when isntalling or updating Drupal instancenses with many modules. I was surprized to find out that there are lots of developers who don't yet use Drush full power and I can tell them one thing - you are missing big time, guys. In my post I will try to cover a few basic topics and, hopefully, will help you get started with Drush.

Table of contents


  1. Drush out-of-box commands
  2. Drush contrib commands
  3. Drush Aliases
  4. Improve your workflow with drush


Now, let's dig in...

Drush out-of-box commands

You can find all these commands here. But I will cover only a part of them, which I’ve used at least once and which can be useful to you as well.

Commands which you MUST know about:

  • cc - clear cache. Drupal core provides a round of cache types: default, bootstrap, field, menu, token etc. I hope you understand the purpose :) Because on large site calling drush cc all - is not a good way to achieve flushing agregated css or make new menu item appear. Use drush cc css+js.
  • dl - downloads given contrib module and put it into sites/all/modules/contrib by default. You can specify release version by adding -7.x-1.x ( drush dl entity-7.x-2.12 If you start to contribute (I hope so) you will need module repo instead of just module’s file, so you can change download handler with “--package-handler=git_drupalorg”. Then drush dl --package-handler=git_drupalorg draggableviews will make git clone of this project to your contrib directory (You can create own short command for it drush dlgit PROJECT_NAME for example).
  • uli - Get onetime login link for given user name or uid or uid=1 by default. Example drush uli m1r1k will try to find user with username 'm1r1k' and build url with onetime link - http://default/user/reset/1/1385380689/tqunn-cZ4YcSTke9kUWRCin3eiqiQNv12...
  • upwd - Update given user's password
  • sql-sync - lots of ways to make and restores mysql dump (details below). I think it is the fastest way to import production DB into your local one. Example: drush sql-sync @my_project.prod --create-db will make a dump on production server side, then rsync it to you machine, then drop you current db (--create-db key does it, because db merging usually brings lots of problems...) and run sql import. With second param you can even specify target drupal installation - drush sql-sync @my_project.prod @my_project.stage --create-db
  • rsync - shortcut of default linux rsync command (details below). Example drush rsync @my_project.prod:%files sites/default/files will rsync whole sites/default/files directory from production server to your local.
  • en, dis, pml, pm-uninstall - I guess everyone knows these commands, they don’t have interesting options.
  • make - build sites from make file without bash coding.
  • updb - invoke update.php from command line. This method doesn’t required authentication and has less steps.
  • vget, vset - work with variables also through the drush, becase you don’t need to serialize or unserialize it, like with database.
  • image-flush [image-style-name] - Flushes all generated presets.
  • eval - Invokes string with php code after drupal’s fully bootsraped, like from you .module file, but without creating new function and poluting your code. Have you ever tried to get dump of core function from core? To full field definition foe example? Or get phpinfo's grepped value? Now you can run drush eval "var_dump(user_load(1));" on production site and got user object without devel enabled and even from your local machine (using drush aliases).


I strongly believe that we MUST replace every same UI operation with these Drush commands in our workflow!

Drush contrib comands

Every big contrib module has its own Drush commands, which help invoke all the common tasks that are using Drush. All these commands you can find in the PROJECT_NAME.drush.inc file. Modules implement hook_drush_command(). Here are some examples of useful drush commands:


  • Devel
    • devel-reinstall (dre) - Disables, Uninstalls, and Installs a list of projects in one command.
    • fn-hook - gets the list of implementation of given hook - drush fn-hook menu_alter.
  • Apache Solr
    • solr-index, solr-mark-all, sorl-delete-index - much more faster and easier than the UI alternative.
  • Migrate
    • migrate-import - performs the import task ( I will prepare a presentation about Migrate later).
  • Registry Rebuild
    • rr - Rebuild Registry of drupal bootstrap process.
  • Metatag (including this patch)
    • metatag-import-mtq - migrates from Metatags Quick module to Metatag.


Drush aliases

Every development process includes multiple Drupal environments, small list of them: local, stage and prodaction server. Remember your working flow (except coding).

Here's an example of my workflow before I met Drush aliases:

  1. Get recent dump of DB and restore it to your local db (I had some bash aliases per project, sometimes I was using MySQL Client App and ssh connection);
  2. Sometimes you want to grab recent files from prod/stage (pure rsync with all ssh credentials);
  3. Code (unfortunately Drush can’t help here..) and push to origin repo;
  4. Connect to stage server;
  5. Make git pull;
  6. Then lots of different drush actions: clear cache, features, enable/disable/reinstall modules, reindex, whatever;
  7. Run tests
  8. If everything went fine on stage we repeat 4-7 steps for Prod deployment;


I think we’re making too much extra steps and lost too much time to routine tasks. Drush can help you here via Drush aliases. Here is an example:

<?php // FILE: ./sites/all/drush/project_name.aliases.drushrc.php // Site propeople, environment local $aliases['local'] = array( 'uri' => 'local.site.com', 'root' => '/path/to/drupal/root', 'databases' => array ( 'default' => array ( 'default' => array ( 'driver' => 'mysql', 'database' => database, 'username' => 'root', 'password' => password, 'host' => 'host', 'prefix' => '', ), ), ), ); // Site propeople, environment prod $aliases['prod'] = array( 'uri' => 'prod.site.com', 'root' => '/prod-path/to/drupal/root', 'databases' => array ( 'default' => array ( 'default' => array ( 'driver' => 'mysql', 'database' => database, 'username' => 'root', 'password' => password, 'host' => 'host', 'prefix' => '', ), ), ), 'remote-host' => '', 'remote-user' => 'root', 'ssh-options' => ' -i /path/to/key/file', 'path-aliases' => array( '%files' => 'sites/default/files', ), );
$aliases['stage'] = array( 'uri' => 'stage.site.com', 'root' => '/stage-path/to/drupal/root', 'databases' => array ( 'default' => array ( 'default' => array ( 'driver' => 'mysql', 'database' => database, 'username' => 'root', 'password' => password, 'host' => 'host', 'prefix' => '', ), ), ), 'remote-host' => '321.321.321.321', 'remote-user' => 'root', 'ssh-options' => ' -i /path/to/key/file', 'path-aliases' => array( '%files' => 'sites/default/files', ), );

Now my local drush knows everything about stage and prod environments and allows me use it localy in context of any other server. For example:

  • drush @project_name.prod cc all - Clear cache on prodaction server from my local
  • drush @project_name.stage uli - gives me link to login as admin on stage server
  • drush sql-sync @project_name.prod @project_name.stage --create-db - Truncate my local db, make dump of prod db, download it and restore it to my local db
  • drush rsync @project_name.prod:sites/all/files @project_name.stage:sites/all/files - rsync al files from prod to stage server
  • drush @project_name.prod ssh - connect to Prod server via ssh


The fastest way to get aliase definition is run such command in drupal directory context - drush site-alias @self --with-db --show-passwords and add remote host information for external environments

Improve your workflow with Drush

Try using Drush wherever it’s possible and you will save your time!

Also don’t forget that Drush is command line tool, it doesn’t need any UI, it doesn’t need any page on your site, it isn’t afraid of php memory or time limits but it still uses Drupal bootstrap initialization. It brings lots of benefits for you! Have you ever made kind of scrub script for mysql to replace something in every node? Have you ever wanted to delete ALL node of particular tabs? Have you ever wated to create for example child nodes for particucal nodes with some conditions? Or whatever? drush brings power of linux biult-in batch to you and your PHP scripts!

Try it out!

Language English Tags: DrupalCheck this option to include this post in Planet Drupal aggregator: planet
Categories: Drupal

TimOnWeb.com: Let's Drup Up The Week. Issue 8

Mon, 2013-11-25 03:54

The 8th issue of the weekly Drupal news roundup is out! In the issue: new versions of Drupal 6, 7 and 8, performance tips, recruiting tips, drupal snippets, tutorials and award winning music video for the dessert. Enjoy and let's drup up the week!

Read on about Let's Drup Up The Week. Issue 8
Categories: Drupal

Blink Reaction: Drupal Training Around the Planet

Mon, 2013-11-25 03:26

Nearly 50 organizations around the planet held free or reduced cost introductory Drupal classes on November 15. Blink alone registered nearly 100 people for its class in Manhattan.

Categories: Drupal

Web Omelette: Cool module: Webform Scheduler

Mon, 2013-11-25 02:50

Webform Scheduler is a cool module that allows you to schedule the opening and closing of a given webform. It works similarly to the Scheduler module except it does not publish/unpublish the node but simply opens/closes the webform on the node.

I have come across this module only recently due to a request that was made for webforms to be automatically closed at a specified date. Needless to say, this module worked like a charm for me so I decided to show you.

To get it going real quick, install like usual. With Drush if you go like drush dl webform_scheduler and drush en webform_scheduler -y, you are good to go. Make sure you have the Webform module installed though as it depends on it (drush dl webform && drush en webform -y will take care of that).

To use the webform scheduling functionality, edit the form settings of the webform you want (found at node/[node-id]/webform/configure) and below the Submission Access group you’ll find a new one called Scheduler:

There you can specify at what date the form should be open and at what date it should be closed. And you can rest assured that if you decide to manually close the form, this will take precedence over any scheduling. And you can also choose what happens when the form does get closed due to the scheduling: deny access to the whole page or just the webform itself or even show the webform but hide its components. Now this is some nice features to have.

And you have to admit the module is pretty powerful if you are dealing with a big website that needs to run many forms at the same time with various degree of overlap between their open times.

There is one thing however I needed and the module does not provide. I dread the default Webform drupal_set_message()-like message that appears at the top of the page when you are on a closed webform node. What I needed was a similar message appearing in the same place where the actual form was when it was open. So with some custom code I got rid of the top message (thaank god) and altered the node view to display my message instead of the webform when the latter is closed. Can you think of a better alternative? Drop a line in the comments if you can. Cheers!

Hope this helps.

In Cool Modules | Drupal var switchTo5x = true;stLight.options({"publisher":"dr-8de6c3c4-3462-9715-caaf-ce2c161a50c"});
Categories: Drupal

Károly Négyesi: Drupal 8 progress from my / MongoDB perspective: update #24

Mon, 2013-11-25 01:30

Drupal 8 Alpha 6 is out and it has a migrate module in there! It even has a few complete migrations: variables to the configuration files owned by system module. Since the last report the configuration of process has changed significantly, this is now documented in the handbook. We have two patches in the core queue, one potpourri of small fixes and one to split migrate into migrate and migrate_drupal, the latter holding the Drupal 6->Drupal 8 and Drupal 7->Drupal 8 migration. I have a third almost ready, this will be our first config entity migration, namely filter formats. This is actually working but the test is currently not doing much and the documentation is lacking -- once these easy problems are fixed, I will submit this as well. There's quite a lot of documentation to be written because this patch will introduce most generic process plugins we planned to write. A lot of code has been written for a fourth, this will be all the variables to configuration files. There's rapid progress, Mike Ryan now participates on a daily basis which means a lot of domain knowledge has been added to the team. marvil07 is working on porting the CCK fields code from migrate_d2d -- yes, the battle plan is that you will be able to migrate CCK fielded nodes to Drupal 8 straight. bdone and Mike is working on expanding the test coverage on two big classes which were straight ported from Drupal 7. YesCT is fixing our doxygen (I worked on this as well because the terminology was very confusing, hopefully now it's less so). My next task is to go over the existing hook_update_6xxx functions and see whether there's special logic that won't be covered by simple entity-to-entity migrations and create issues for them. fastangel have written the bulk of the fourth patch, I fully expect he will pick a lot of these issues, with the rest of the team piling on them once their work is done. With a little luck and perseverance the Drupal 6 -> Drupal 8 migration will be done by the Drupal birthday (January 15).

In the longer term, we will need to do Drupal 7 to Drupal 8 and I will need extra helping hands with multilingual issues. Ryan Weal already voluntereed to help, but I am sure we can use a few more so if you know i18n+migrate both, please don't hesitate to contact me.

Categories: Drupal

Mike Milano: Function Tracing with XDebug

Mon, 2013-11-25 01:05

Integrating XDebug into your IDE opens up a world of powerful debugging fu, but there's more to XDebug than that. There is an API you can leverage for alternate ways of peering into what's going on during that page load.

In this post I'll demonstrate some basic function tracing and related configurations.

Categories: Drupal

SystemSeed: Getting to Panopoly 1.0 and beyond!

Sun, 2013-11-24 13:39
Getting to Panopoly 1.0 and beyond!

Panopoly is a Drupal base distribution that provides a solid and robust starting point for those wanting to build their own Drupal websites and distributions. The Panopoly project was started by Pantheon's Matt Cheney and its really beginning to taking off.

Categories: Drupal

Drupal Easy: Teaching Drupal's "Big Five"

Sun, 2013-11-24 10:54

I teach Drupal to a lot of people. One thing I have learned, is that whether I'm teaching people who are so new that they're still learning how to pronounce "Drupal" or I'm teaching current users the intricacies of the Migrate module, there's one common thread: without a solid understanding of Drupal's "Big Five", students will have trouble gaining the confidence that all Drupal developers, themers, site-builders, and anyone else who interacts with Drupal on a daily basis need.


read more

Categories: Drupal

Victor Kane: Best = Free: Drupal IDE based on latest Eclipse release (Kepler)

Sun, 2013-11-24 09:48

I hate it when waves of closed source fashion hit the open source communities: Purchase such and such an IDE, “it's awesome”. Apart from paying a lot, hey, it's closed source! Forget that! This article is the first in a series that will show you how to get set up with a top of the line, free as in beer and truly open source Drupal IDE (and Project Management system!), complying with the following objectives:

  • Top of the line free software development IDE with multiple projects and a multitude of plugins, based on Eclipse Kepler.

  • No vendor lock in.

  • Support for Web development in general (HTML, CSS, JS, XML, etc.), that is syntax highlighting, autocomplete suggestions with pop-up documentation, mouse-over documentation.

  • Support for PHP development also.

  • Support for back-end languages (Java, etc.)

  • Support for Remote project development, including code highlighting, etc.

  • Support for Drupal development

    • Drupal coding standards,

    • Drupal files immediately editable as PHP code,

    • Spaces instead of tabs

    • The right encoding (Unix) so they can be committed to Drupal repositories.

read more

Categories: Drupal

Powered By