Pages

Thursday 27 February 2014

Announcing Spark: authoring improvements for Drupal 7 and Drupal 8

At DrupalCon Denver, I announced the need for a strong focus on Drupal's authoring experience in my State of Drupal presentation. During my core conversation later in the week, I announced the creation of a Drupal 7 distribution named "Spark" (formerly code-named "Phoenix"). The goal of Spark is to act as an incubator for Drupal 8 authoring experience improvements that can be tested in the field.
I hope for Spark to provide a "safe space" to prototype cutting-edge interface design and to build excellent content tools that are comparable with the experience of proprietary alternatives. While not a final list, some initial thinking around the features we want to experiment with is:
  • Inline editing and drag-and-drop content layout tools ("true" WYSIWYG)
  • Enhanced content creation: auto-save, save as draft and more
  • Useful dashboards for content creators
  • Mobile content authoring and administration support
The vision behind the Spark distribution is to be "the Pressflow of Drupal authoring experience". Pressflow provided a "spoon" of Drupal 6 with various performance enhancements that made their way into Drupal 7 core while it was in development. The same improvements were made available to Drupal 6 users so they could easily be tested in the field. With Spark, we want to test authoring experience improvements in Drupal 7 on real sites with real users and real content. We also want to target the best improvements for inclusion into Drupal 8 core.
I'm excited to announce that Acquia will fund the Spark distribution. Core developers Gábor Hojtsy and Wim Leers will work on Spark full-time starting in late May. They will work along side Angie Byron (webhchick), Alex Bronstein (effulgentsia), myself and other members at Acquia. While we have some promising candidates so far, Acquia is still seeking applicants to join the Spark team (with a strong preference to candidates located in or willing to move to the Boston area):
The Spark team will collaborate with the Drupal usability and the core

Understanding The New Drupal Release Cycle

At the end of 2013, big changes were made to the Drupal release cycle.
You can read full details of the changes at https://drupal.org/node/2135189.
The changes will start with Drupal 8, but are going to impact almost all current and future versions.
In this blog post, I'll give you a short, plain-English overview of the changes.
I'll show how the changes will impact users of Drupal 6, 7, 8 and 9.

What is changing for Drupal 8?

  • Drupal 8 will have several releases with new features.
  • New Drupal 8 releases will come out every 6 months. They may have new features and will be called 8.1, 8.2, 8.3 etc.
  • The latest release will be the only one that's supported.
  • The end of the process will be a Long Term Support version or LTS. When that LTS arrives, no new features will be added, only security fixes.
Here's a graphical overview of how the releases will work:
media_1393365446214.png
Here's the big change: new features can now be added after the 8.0 release.
One of the downsides to Drupal's old release cycle is that new features couldn't be added.
Drupal 7 was essentially finished in 2010 (although it was released the next year). So no new features have been added to Drupal since 2010.
That feature freeze is great for enterprise customers, but very clunky for today's software developers who are used to working iteratively, making fast and regular updates.
In the proposal, Dries said that the new release cycle allows them to use "a more agile development approach of getting smaller changes out faster, seeing how they do, and making further changes based on real-world data. "
In the comments, Jesse Beach (who is responsible for much of the work on Drupal's UI) said, "Building a usable UI requires numerous iterations and we really don't get those over large major release cycles."

What does this mean for Drupal 9?

  • Drupal 9 will only start development when the the core team have completed a new feature big enough to justify a new version.
  • Drupal 9 should arrive on a normal schedule, which is 2 or 3 years after Drupal 8.

What does this mean for Drupal 6 and 7?

Wait, why are we bringing 6 and 7 into this?
Because this new release cycle may be good news for owners of Drupal 6 and 7 sites:
  • Drupal 6 would be security supported until 8's LTS rather than only until 8.0.
  • Drupal 7 would be security supported until 9's LTS rather than only until 9.0.
So this change could mean an extra 18 months of fixes. It's possible that this could mean Drupal 7 support until 2018 or 2019.

What does this mean for you building sites in the future?

Be very careful with the selection and quantity of modules you use in Drupal 8. This is good practice anyway, but will become a more formal recommendation with Drupal 8.
Here's the advice from the release cycle proposal:
"Don't use custom modules; stick to only contrib modules that are adequately maintained. Or, if your site requires custom code, make sure the developers you hire know to limit their code to only accessing APIs marked as stable."
In other words, changes may happen between Drupal 8.0 and the Drupal 8 LTS. If you build you own modules or use poorly supported custom modules, watch carefully in case updates cause problems.

Wait, doesn't this all sounds very familiar?

Yes, this release cycle is very similar to those adopted by Joomla and Typo3 amongst others.
This release cycle is one form of Semantic Versioning which is adopted by many products: http://semver.org.

Show Drupal Users Their Own Content

If you have multiple content creators on your site, you may want to make their life easier.
One way that you can help is by providing a list of the content they have created.
There are advanced ways to do this, such as using the Workbench module, but in this tutorial we'll show you an easy way to provide a list of each user's content.
The only module that you need to do this is Views:http://drupal.org/project/views.
  • Get started by going to Structure > Views.
  • Click Add new view.
  • Enter a View name.
  • Choose to create a block.
media_1386106465094.png
  • Click Continue & edit.
  • Find the Relationships area on the right-hand side and click Add.
media_1386106565625.png
  • Search for and choose Content: Author
media_1386106599828.png
  • Click Apply (all displays) twice.
  • Find the Filter Criteria area on the left-hand side and click Add.
media_1386106701331.png
  • Choose User: Current.
[Note] In Views 2, this option was available without adding the relationship first. Now, you must make sure the relationship is added.
media_1386106784320.png
  • Click Apply (all displays).
  • Set Is the logged in user to Yes:
media_1386106839544.png
  • Click Apply (all displays).
  • Click Save in the top-right corner.
If you want to test that you've set up your block correct, try this test:
  • Click Add next to Fields.
  • Search for and choose User: Name.
  • Click Apply (all displays).
You'll now be able to see the preview below. You can make sure that each content comes from the same author.
media_1386106993040.png
If this is correct, you can click Cancel to discard your changes.
You can now go and publish your block via Structure > Blocks.

Display Suite and Views Together in Drupal

Display Suite is one of our very favorite Drupal modules.
We love how easy it is for even new Drupal users to control their content layouts with Display Suite.
In this tutorial, we'll show you how you can use Display Suite together with Views. This allows you to create complex pages, controlling both the output and layout, without knowing any code.
  • Go to Structure > Content types and click Manage Display next to a content type.
  • Unless you change it, you're going to be redesigning the "Default" view mode for this content type.
media_1386614981920.png
  • You'll see the Display Suite options at the bottom of this screen.
media_1386614119733.png
  • Choose the Select a layout option. In this example, I choose Two column.
media_1386614143932.png
  • Click Save.
  • The fields can now be placed into Left and Right regions to reflect the two column layout:
media_1386614450017.png
  • Click Save to complete the Display Suite changes.
  • Go to Structure > Views and edit the view that you want to use with Display Suite.
  • In the Format area, click the Show area, as shown below (note that Display Suite doesn't work with all Views formats)
media_1386614212718.png
  • Choose Display Suite as an option
  • Click Apply (all displays)
media_1386614259728.png
  • Choose the options you want for Display Suite. The most important setting is the view mode - make sure you select the same one as did at the start of the tutorial.
media_1386614295059.png
  • Click Apply (all displays)
  • You should now see that your two column layout has been applied to your view:
media_1386614486586.png

4 Social Sharing Modules for Drupal

If you don't give your site visitors an opportunity to share your webpages, you're missing out on an opportunity for others to hear about your great content.
Drupal has several modules that allow you to add Facebook, Twitter, Linkedin and other social buttons.
In this blog, we're going to introduce you to four different options for adding social sharing to your Drupal site:
  • Service Links
  • Social Share
  • AddThis
  • AddToAny

ServiceLinks Module

media_1386198659455_1814f30195a25737958403ee9188e8ac.png
There are so many options available in this module, we could do a full blog on just this one. But this is about comparing so let's cover the basics.
  1. Download and install https://drupal.org/project/service_links.
  2. Enable the Service links module and at least one of the Service links services modules that shipped with this module. I enabled Widget services.
  3. Configure at admin/config/services/service-links. This is where you decide the type of node that can be shared and if you want the links at the bottom of the node).
  4. Select the widgets (Facebook, LinkedIn, etc) here admin/config/services/service-links/services.
  5. Configure widgets here admin/config/services/service-links/widgets.
  6. If you want the buttons in a block, visit the blocks admin page and configure either/or the node block or the block designed to allow non-node pages to be shared.

AddThis Module

media_1386199961392_cacca17d067e0c66ec70066905411881.png
This module taps into the Addthis.com service. You don't need an account to make this work.
  1. Download and install https://drupal.org/project/addthis.
  2. Enable AddThis and AddThis Displays.
  3. Configure at admin/config/user-interface/addthis. This is where you select the social network services you want to make available.
  4. Add an AddThis field to the content types if you want the link to appear in the content type.
  5. Manage the display to make the icons to show and hide the label.
  6. If you want the buttons in a block, visit the blocks admin page and configure the AddThis block. This will share the non-node pages.

AddToAny Module

media_1386200595480.png
This module has the fewest options but it's easy to set up.
  1. Download and install https://drupal.org/project/addtoany.
  2. Enable AddToAny.
  3. Configure for all content types at admin/config/system/addtoany. The screenshot shows the button in the Link variable but you can include where "Bookmark/Search ..." is located. This module does not appear to give you the option to choose which networks you want users to be able to access.
  4. If you want the buttons in a block, visit the blocks admin page and configure the AddToAny block. This will share the applicable nodes and the homepage. It will not share non-node pages.

Social Share Module

media_1386201073294.png
I like the default buttons that come with this one.
  1. Download and install https://drupal.org/project/social-share.
  2. Enable Social Share.
  3. Configure at admin/config/content/social-share.
  4. Configure networks and label (if you want one) on each content type in the Social Share vertical tab.
  5. If you check the box to make a block, it will be automatically placed in a region ... at least that's what happened in Bartik. It showed up in the Header region. Configure the block to set the networks. FYI, the block recognizes non-node pages.

Sending HTML Emails from Drupal Webform

The Webform module is one of the most popular modules in Drupal.
Webform is relied upon for everything, from contact forms, to donations to event registrations.
By default, Webform sends emails in plain text. In this tutorial, we're going to show you how to send Webform emails in plain text, which allows you choose different layouts or designs.
media_1386859816684.png
  • Go to Configuration > Mime Mail.
  • You can choose Full HTML under the "E-mail format" setting.
media_1386859771575.png
Now it's time to setup your webform.
  • Find your webform.
  • Click the Webform tab and then click E-mails.
  • Click Add.
  • Enter the email addresses you want to send webform results to.
media_1386859674331.png
  • Scroll down to the E-mail template area.
  • Check the "Send e-mail as HTML" box.
  • Click Save e-mail settings and the template box should now show HTML:
media_1386860400793.png
  • Check the results of your new HTML email:
media_1386860307093.png

Decimal, Float or Integer in Drupal Fields?

Drupal comes with 13 fields and several of them deal with numbers.
Newcomers to Drupal can become confused about the difference because there are 5 different number fields available:
  1. Decimal
  2. Float
  3. Integer
  4. List (float)
  5. List (integer)
In this tutorial, we're going to explain the difference between those 5 number fields and explain when you would use each one.

Integer

Integer is the easiest table of number field to understand. Integer is another word for whole numbers.
Integers are whole numbers such as 1, 2, 3, 10 or 500. This is ideal for numbers such as ages or years.
There are no settings at all for Integer fields:
media_1387475209862.png
You can't enter any spaces, letters or any punctuation into Integer fields.
Things such as spaces, commas or decimal points are added from the Manage Display tab:
media_1387475385532.png

Decimal

The Decimal field allows numbers with fractions.
You can decide on three settings for the field, including:
  • Precision: the total number of digits, both before and after the decimal point.
  • Scale: the number of digits after the decimal point.
So in the example below, a Scale of 2 would be ideal for storing prices. This is because there can only be two numbers to the right of the decimal point in prices such as $32.89
media_1387475296029.png
As with all of the number fields, you can't enter any spaces, letters or any punctuation into Integer fields.
Things such as spaces, commas or decimal points are added from the Manage Display tab:
media_1387475358659.png

Float

Float is definitely the most confusing of the umber fields.
Here's our simple rule: if you don't know what a floating point number is, you don't need to use the Float field.
However, for those of you that don't know but are curious, here's a quick explanation:
"Floating point" is a term used in computer programming. Basically, floating point numbers are numbers that contain floating decimal points.
Here's the best, simple explanation I've read about why floating points are used: http://floating-point-gui.de/formats/fp/
"Since computer memory is limited, you cannot store numbers with infinite precision, no matter whether you use binary fractions or decimal ones: at some point you have to cut off. But how much accuracy is needed? And where is it needed? How many integer digits and how many fraction digits?
    • To an engineer building a highway, it does not matter whether it’s 10 meters or 10.0001 meters wide - his measurements are probably not that accurate in the first place.
    • To someone designing a microchip, 0.0001 meters (a tenth of a millimeter) is a huge difference - But he’ll never have to deal with a distance larger than 0.1 meters.
    • A physicist needs to use the speed of light (about 300000000) and Newton’s gravitational constant (about 0.0000000000667) together in the same calculation.
To satisfy the engineer and the chip designer, a number format has to provide accuracy for numbers at very different magnitudes. However, only relative accuracy is needed. To satisfy the physicist, it must be possible to do calculations that involve numbers with different magnitudes.
Basically, having a fixed number of integer and fractional digits is not useful - and the solution is a format with a floating point."
Here are the field settings for a Float in Drupal. The only thing you can choose is whether to use a decimal point or a comma.
media_1387475251888.png
The Manage Display settings are the same as for Decimal.
media_1387475326005.png

List (float) and List (integer)

Both of these fields allow you to create a list of pre-defined choices. Unlike the other 3 fields, people will not be allowed to enter their own numbers.
media_1387477816235.png
If you choose "Check boxes/radio buttons", then this is how the options will show. If you want to remove the N/A option, set the field to be required.
media_1387477879075.png
If you choose "Select list", then this is how the options will show:
media_1387477972391.png

Entity Views Attach: Use Views Almost Anywhere

Entity Views Attach (EVA) is a wonderfully useful Drupal module which makes Views more powerful.
EVA allows you to automatically attach any view to content, comments or terms.
We're going to show you 2 examples of EVA in use. Both of them solve problems that were asked by our members this week.
First, we'll see how to sort terms however we want and then we'll see how to add an image for a file download link.

Example #1: Sort taxonomy terms

You can download EVA from https://drupal.org/project/eva.
Here's the first problem we face. We don't have any way to contol the order of our taxonomy terms. Our training member wanted to take control of the ordering and sort these terms alphabetically.
media_1389133598566.png
Let's go and create a view that will sort our terms.
  • Go to Structure > Views > Add New View
  • Choose to show "Taxonomy terms" and then select the terms you want to show. In this example, we'll show "Tags".
  • Choose the Display format you want, but you must choose to show fields.
  • Click Continue and edit.
media_1389132814072.png
  • At the top of the Views screen, click Add and then choose EVA Field.
media_1389133131369.png
  • You will now see a new area of Views called "Entity Content Settings":
media_1389133169834.png
  • Click Entity Type and choose where you want to attach this View to. In our example, we chose "Node".
It's worthing noting that you can also use EVA to attach Views to Comments, Terms or users. For example, you might want create a View showing the content that a user has created and show it on their profile. In that instance, you would choose "User".
media_1389133193568.png
  • Click Bundles and choose which content type you want to attach this View to. In our example, we choose "Article".
media_1389133441656.png
Finally, we need to make sure that EVA will only pull in the terms that have been added to the content we're looking at. Otherwise, we'd end up with a very long list.
  • Under Advanced, click Add next to Relationships.
  • Check the box "Taxonomy term: Content with term" and then on the next screen, check "Require this relationship".
media_1389194589478.png
You are now free to create the view as you wish. Here's one change we need for our example:
  • Under Sort Criteria, choose to sort the view how you wish. In this example, we choose "Taxonomy term" and "Sort ascending".
media_1389133543745.png
  • Save the view.
  • Visit any article on your site with terms and you'll see that your new view has been attached:
media_1389133576686.png
If you want to remove the original Tags field, go to Structure > Content types > Manage Display and move the "Tags" field to the "Hidden" area:
media_1389134060194.png

Example #2: Changing a download link into an image

Here's an alternate example of EVA in action. In this example, our member wanted to change a file name into a "Download image".
We've shown how to do this before with Display Suite. Now we'll show how do it with EVA. The image below shows the problem - the file name is showing instead of a download button that we can style.
media_1389134017895.png
  • Go to Structure > Views > Add New View
  • Choose to show an "Unformatted list" of "fields"
media_1389135263579.png
  • Click Add > EVA Field
  • Click to add a new field and choose "File: Path"
media_1389136150279.png
  • Check "Display download path instead of file storage URL"
media_1389136227861.png
  • Check the box for the "REWRITE RESULTS" area.
  • In the Text area, use HTML to show an image and a link. We can use the Replacement patterns to automatically insert the URL with [field_file]. To do this, you will need to know the URL to the image, which in this example is http://bit.ly/19ZE2db.
media_1389134438655.png
  • Look under "Entity Content Settings", Click Entity Type and choose where you want to attach this View to.
  • Click Bundles and choose which content type you want to attach this View to.
media_1389134476360.png
We now need to add both a Contextual Filter and a Relationship.
  • Contextual Filter: select "Content: NID"
  • Relationship: select "Content: File". Make sure to check the "Require this relationship" box.
media_1389136344829.png
That should complete the process and the image will show. Click on it and you'll download the file.
media_1389136415994.png