Drupal

North Texas Drupal April Meetup Notes

We had a big crowd at our April meetup of the North Texas Drupal Users group this past Monday.  And it was all about the Drupal 8!

I gave a brief intro on Drupal 8 progress, stealing liberally from webchick's Drupal 8 slides.

Brent Bice was up next, speaking about the market and business side of Drupal 8, as well as some of his discussions with Acquia engineers and product managers.  His slides on are slideshare.

Brandon Williams from the Austin Drupal users group was generous enough to travel up to Dallas for the event to present on Drupal 8 changes for developers, specifically with regards to API.  He posted his slides on gitbub.

Since the normal May meetup date would fall right about DrupalCon LA, we decided to have our next meetup in June.  Details soon.

Drupal 8 Mega Resource Guide

Drupal 8 is coming soon (ok, soonish), so we've put together this mega guide for all your Drupal 8 edumacation. And don't forget our North Texas Drupal Users Group meetup Drupal 8 Extravaganza! here in Dallas in a couple weeks.

Official Drupal 8 page

"Drupal 8 Will Have Something for Everyone to Love"

Drupal 8 Preview Slideshow by webchick

"Drupal 8 will be the best release of Drupal yet."

The Drupal 8 Sessions - DrupalCon Austin

Links to 17 sessions related to Drupal 8

Why Drupal 8? Why now?  by jam

"As of March 2015, when should you deploy Drupal 8?"

Ultimate Guide to Drupal 8 by webchick   (eBook link)

"This blog series will attempt to enumerate the major changes in Drupal 8 for end-users, for site builders, for designers and front-end developers, and for back-end developers."

Drupal 8 - What's in it for me?

He looks at the benefits of using Drupal 8 for both marketers and technologists.

Try out Drupal 8 on Pantheon

It's still in beta, but Pantheon lets you spin up a Drupal 8 site quickly and easily.

Drupal 8 Release Date

A mathematical estimate on when Drupal 8 will be released based on the remaining number of critical bugs and tasks against Drupal 8 punched into a Monte Carlo simulation.

Drupal 8 Changes Twitter Bot

Follows changes from https://www.drupal.org/list-changes/drupal and tweets them.

Acquia's Drupal 8 Blog Series

It's a series of blog articles. By Acquia. On Drupal 8. That's pretty much it.

27 Questions (and Answers) from My First Drupal 8 Site Build

"Slowly, through trial and lots and lots and lots of error, I found answers to all of my questions. Those answers follow."

Dallas Course: Online System for Small Business Success

Are you a new small business owner who needs to build an online presence, or an experienced one who wants to learn more about building your website and improving your online marketing? If you live in the Dallas area, then do I have a learning opportunity for you!


Beginning on Tuesday, March 17, 2015, I am teaching a new continuing education course at the Collin College Courtyard campus in Plano. It will run for 6 weeks, 3 hours each Tuesday night from 6:30 - 9:30. The tuition cost for the entire program is just $199. It's the same place I teach Drupal courses, if you've ever been to one of those.
 

 

Register Button

Course Objectives:
Create an online website/system with compelling content; analyze website activity and improve results; research valuable keywords and competitor’s online activity; perform email and pay-per-click marketing.
 
Recommended Prerequisites:

Students should have a basic comfortableness with computers and the Internet.
 
Course Description:
Learn how to build a complete online presence to help make your small business or non-profit successful. This is a fast-paced, hands-on course with between-class “homework”. At the end you’ll have your own professional-looking and search engine optimized (SEO) website, along with integrated content and email marketing, analytics, social media and Google tools. You’ll understand how to attract prospects to your website using both organic and paid search techniques and encourage them to stay and convert.
 
This will be a comprehensive, fast-paced course that will cover a lot of ground. Be prepared to spend time in-between classes on specific “homework”, or you will fall behind. Some additional small student- paid expenses will be necessary for optimal results, including website domain registration (around $10, if needed), website hosting ($25 / month), and Google AdWords (pay-per-click) cost (varies, but we will initially keep the amount small just for testing and learning).
 
Those who do not have a current website or are willing to rebuild theirs will get the most out of this class. We will use the free, open-source Drupal content management system (CMS) to build websites. For students who do already have a business website, those with a Drupal-based website will get more out of this course than those using a different system (such as Wordpress) as the optimization techniques and plugins used will all be based on Drupal.  The marketing concepts will apply to any small business website however.
 
Lesson Plan (by week):
  1. Introduction, basic concepts, goal setting, begin initial website
  2. Continue website - look & feel, content, launch initial website, basic Google tools
 
  3. Advanced Google tools & analytics, configuring conversions, keywords, inbound marketing
  4. Social channels and sharing, media (photos, video, sound), email marketing
 
  5. More website functionality, link building, metadata and on-page SEO

  6. Ongoing website and marketing maintenance, CRM tools, going forward and review

I've poured everything I've learned in my 85 years about creating websites and online marketing for small businesses that attract viewers and converts them to customers into this course. Come learn and succeed!

Register Button

Drupal Podcasts - Keeping Up While Doing Something Else

Podcasts, or "a digital medium that consists of an episodic series of audio, digital radio, PDF, or ePub files subscribed to and downloaded through web syndication or streamed on-line to a computer or mobile device" (wikipedia) have been around a little over 10 years, and lately have seen a resurgance in popularity. It's a great way to learn something, or least be entertained while you are commuting to work, exercising, or just cleaning the kitchen.

My preferred iOS podcast app, Downcast, shows me subscribed to about 50 shows. Which of course is way more than I can listen to, but at least gives me choices. Many of those are Drupal, technology and marketing related. Some of the best:


 

Dropcast from Mediacurrent. Brand new from one of the top Drupal shops in the world. The first show comes in at 45 minutes, with a variety of topics.

 


 

Drupalize.me logo

Drupalize.me from Lullabot. Drupalize.me has been around a while and generally puts out 1-2 shows a month, each running 15-50 minutes.

 


 

Drupal Easy logo

Drupal Easy. With nearly 150 episodes, it's been around forever. Tends to go long and sometimes sound amateurish, but they have great guests.

 


 

Hacking Culture logo

Hacking Culture by Lullabot. Also brand new, and not Drupal-exclusive. But their first episode featured a Backdrop CMS (the Drupal fork) discussion.

 


 

Drupal Easy logo

Full Stack Radio. A podcast for "developers interested in building great software products, product design, user experience, testing and system administration."

 


 

Social Media Examiner. If there is a marketing and social media podcast out there that has more immediately actionable information in it, I don't know it.

 


What others do we like that maybe aren't Drupal or developer focused? Well, since you asked: Sword & Laser, TED Radio Hour, Science Friday, Radiolab, Duct Tape Marketing, Cool Tools, and Ask Me Another.

Happy Listening!

Drupal 8 Extravaganza at the March North Texas Drupal Users Group Meetup

Drupal 8 is likely going to launch sometime in 2015.  So we all need to get ready - Drupal 8 is a whole new ball game.  Likely agenda for the March 16 meetup:

  • Drupal 8 status
  • What's New from Drupal 7
  • Direction
  • Resources
  • Can You Build a Real Site With Drupal 8 Yet?

For that last one, we'll walk through the process of creating a new, functional website using just Drupal 8 and see where the pitfalls are.

And just for fun, DrupalReleaseDate.com uses Monte Carlo simulation to guesstimate the Drupal 8 release date.  As of today, it shows January 6, 2016.  Yikes.  Better get working on those blocker bugs.

So if you live in the Dallas / Ft. Worth area and use Drupal or want to learn more about Drupal, then the North Texas Drupal Users Group is the place to be.  See you in March.

AngularJS and Structural SEO in Drupal - Feb North Texas Drupal Meetup Notes

We had a nice turnout last night for the North Texas Drupal users group.  And we just cleared 100 members!  You need to join us on our Meetup page to learn about all our upcoming meetups.

First up was the various Drupal ecosystem updates:

  1. DrupalCamp New Orleans is on March 28th.  Beignets and Drupal- can't beat that!
  2. DrupalCon LA starts on May 11.  Only one week to submit session proposals.  Although we all know that only the big sponsors get selected, but you can try anyway.
  3. CiviCon 2015 starts on Apr 23 in Denver.  The conference site should be up soon.
  4. BackDrop CMS had their 1.0 GA release.  This was the fork of Drupal made a year or so ago.  You can spin up an instance to play with on Pantheon.
  5. Lots of great Drupal podcasts out there to help you keep up while commuting or exercising.  Dropcast, Drupal Easy, Drupalize.me are all Drupal-focused.  Others of interest: Hacking Culture (open source), http://fullstackradio.com/ (dev), and The Changelog (dev)
  6. Wonder when Drupal 8 will release?  DrupalReleaseDate.com uses Monte Carlo Simulation to take as good a guess as anyone.  Says Oct 29th right now.
  7. Weather.com was launched by MediaCurrent, making it the most heavily used Drupal site developed to date.  And, it has a AngularJS front end!

And that's what Travis presented - using AngularJS as a front end to Drupal.  His presentation is on his website - http://travistidwell.com/

Next, I spoke on Structural SEO in Drupal - how the construction of your Drupal website affects its search engine placement … and conversions … directly and indirectly.  My 75 slides aren't that useful without me talking about them, but I will be turning it into a more readable document shortly and it will be available on our website.

Next month - It's all about the Drupal 8!  See you then.

 

Firehose Program for Fixed-Price (nearly) Unlimited Drupal Development

FireRoad Digital (FRD) is excited to announce the Firehose program for Drupal website owners that eliminates the typical pain and friction that comes from hourly-based pricing.


Do you own or manage a Drupal website for a small/medium business or non-profit, and need to make regular updates, add features, and keep it updated and secure, but either don’t have in-house Drupal expertise or your IT staff never has the bandwidth to help out with that long list of site improvements you need? There’s no reason to hire an expensive full-time Drupal developer- sign up for Firehose instead!

For a single fixed price per month, you can call or email us with most any request for site changes or improvements, from simple changes to a new feature, and we will take care of them quickly and expertly.

This includes consultations on design, strategy or functionality as needed, via phone/ video calls, email or in-person (Dallas / Ft. Worth area). We will also proactively look for ways to continuously improve your Drupal website and structural on-page SEO, discuss with you, and implement with your approval.

No need to get an hourly-estimate from us first or call your CFO to see if you can afford a desperately needed new website feature. It’s like having an experienced Drupal developer available on staff, but at a fraction of the cost, and that is already budgeted.

The Firehose also includes proactive Drupal core and contributed module updates, to keep your site safe and secure. We track changes from drupal.org and update your site as needed, without you having to even think about it. Remember Drupageddon?

All developers at FireRoad Digital have at least a Computer Science bachelor’s degree and 5-7 years of experience working exclusively with Drupal on over one hundred websites and complex Drupal projects from SMB to Fortune 500- it’s all we do. We are all USA-based, working in Dallas, Texas. Nothing is outsourced or offshored!

Finding and hiring a full-time experienced Drupal developer is difficult and can cost $150K a year in salary and benefits. For a small fraction of that cost you can have a team of skilled US-based Drupal developers available for most anything you need.

Call or contact us to learn more about Firehose!

North Texas Drupal February Meetup

We've announced the first meetup of 2015 for the North Texas Drupal Users Group - Monday, Feb 16th at 6:30 at the Addison Treehouse.  If you do Drupal in the Dallas area, you should be there!

First off, we'll be learning How To Integrate AngularJS into Drupal.  AngularJS a lightweight Javascript open-source web application framework maintained by Google and a community of individual developers and corporations to address many of the challenges encountered in developing single-page applications.

Then, we will take a look at Structural SEO in Drupal.  Come learn how to optimize the structural elements of your Drupal website to optimize your on-page SEO - all with just Drupal contrib modules and configuration - no programming!  You know, the stuff we talk about here at FireRoad all the time!

We'll be announcing the March meetup soon, and it's all about the Drupal 8.

More info and register on our Meetup event page.  Free as usual.

And what's with the two guys holding fish?  They're ... Anglers!  We are so clever..

Advanced FlexSlider Construction in Drupal 7

Flex Slider is a popular Drupal module used to create responsive sliders with the FlexSlider 2 jQuery plugin. It's powerful and flexible with good hooks available for customization. It's not always clear, though, how to construct sliders in more complex situations.

The Challenge

Our example scenario consists of two content types. The first, call it Roadkill, has two fields of interest: a multivalue image field and a standard body field. The second, Cuisine, has a multivalue field collection field (field_cuisine_slider). The field collection field consists of a reference to a Roadkill node plus a single value image field.

The challenge is to create a slider with the following characteristics:

  • The main slide consists of the field collection image field plus the body text of the referenced node.
  • The slider uses thumbnail navigation using the first image of each referenced node.

(Note: this scenario may appear a little contrived, but it's actually based on a real case in which one group of users could create and edit the first content type and another group of users could create and edit the second content type.)

Site Building

The amount of extra site building is actually pretty minimal. First, we need a couple of modules (other than Flex Slider and the modules used to setup the content type architecture):

Next, create a new view mode. In Display Suite, you can do this by going to Admin→Structure→Display Suite→View modes→Add a view mode. Give it a name, like Cuisine Slider (machine name cuisine_slider) and enable it at least for field collection entities.

In the field collection (Admin→Structure→Field collections→your field collection→manage display→Custom display settings), enable the new view mode for this field collection. Save the field collection, then configure the view mode so that it contains just the image. This will be the main slide image. We'll add the text later in code. Save the field collection again.

(Note: you could instead add text from the Roadkill node here using the Rendered entity field formatter and appropriate configuration on the Roadkill node, but we're doing it this way to look at a particular facet of Flex Slider.) 

Now, add a FlexSlider option set in Admin→Configuration→Media→FlexSlider→Add. Give it a name, like Cuisine Slider (machine name cuisine_slider) and on the Navigation and Control Settings vertical tab, set Paging Controls to Thumbnails. You might also uncheck Slideshow on the General Slideshow and Animation Settings tab so that the slider doesn't rotate automatically, but that's up to you. Save the option set.

In the Cuisine content type, manage the display where you are going to use the slider (Admin→Structure→Content types→your content type→Manage display). For the field collection field, set the Format to FlexSlider. Choose the Option Set you just created (Cuisine Slider), and the view mode you created (Cuisine Slider). Change the number of values to display or skip if you want. Click Update and then save the content type.

That's all the site building that's necessary. Just four things:

  1. Create a view mode
  2. Configure the field collection to use the view mode
  3. Create a FlexSlider option set
  4. Configure the content type to tie it together.

Write Some Hooks

FlexSlider defines several useful hooks, but we only need one of them plus one other core hook.

In your theme's template.php file, write an implementation of template_preprocess_field. In this hook, we:

  1. Extract the field collection fields we need
  2. (This is key) Put them in a place accessible to the other hook we're implementing.

You can use any method you want to get the field collection fields in an easier to manage state; I just used the function from this Four Kitchens post verbatim.

/**
 * Implements template_preprocess_field
 */
function mytheme_preprocess_field(&$vars, $hook) {

  if ($vars['element']['#field_name'] == 'field_cuisine_slider') {

    $field_array = array('field_roadkill', 'field_main_slide_image');
    _rows_from_field_collection($vars, 'field_cuisine_slider', $field_array);

    // Copy the rows into the item array so they will get passed to the flexslider list preprocessor.
    // Do this here to keep the row processor generic.
    foreach ($vars['items'][0]['#items'] as $index => $item) {
      $vars['items'][0]['#items'][$index]['row'] = $vars['rows'][$index];
    }
  }
}

/**
 * Creates a simple text rows array from a field collections, to be used in a
 * field_preprocess function.
 *
 * @param $vars
 *   An array of variables to pass to the theme template.
 *
 * @param $field_name
 *   The name of the field being altered.
 *
 * @param $field_array
 *   Array of fields to be turned into rows in the field collection.
 */

function _rows_from_field_collection(&$vars, $field_name, $field_array) {
  $vars['rows'] = array();
  foreach($vars['element']['#items'] as $key => $item) {
    $entity_id = $item['value'];
    $entity = field_collection_item_load($entity_id);
    $wrapper = entity_metadata_wrapper('field_collection_item', $entity);
    $row = array();
    foreach($field_array as $field){
      $row[$field] = $wrapper->$field->value();
    }
    $vars['rows'][] = $row;
  }
}

Next, write an implementation of template_preprocess_flexslider_list (see flexslider.theme.inc that is part of the FlexSlider module). In this hook, we're doing a few things for each slide:

  1. Retrieve the values from the referenced Roadkill node we need for the slider.
  2. Set the $items[$index]['title'] element to the body of the Roadkill node. The FlexSlider theme function wraps this in a <p class="flex-caption"> tag, so you might want to do some processing on the text to ensure there are no disallowed tags (like <div>).
  3. Set the $items[$index]['thumb'] element to the first image of the referenced Roadkill node.
/**
 * Implements template_preprocess_flexslider_list
 */
function mytheme_preprocess_flexslider_list(&$vars) {

  // Only process the optionset we defined
  if (isset($vars['settings']['optionset']->name == 'cuisine_slider') {

    $items = &$vars['items'];
    foreach ($items as $index => $item) {

      // Use entity_metadata_wrapper for more standard access
      $roadkill = entity_metadata_wrapper('node', $item['row']['field_roadkill']);

      // The thumbnail is the first image in the referenced roadkill
      $thumb = $roadkill->field_image[0]->value();
      $thumb_style = $vars['settings']['optionset']->imagestyle_thumbnail;
      $items[$index]['thumb'] = image_style_url($thumb_style, $thumb['uri']);

      // The caption is the body of the referenced roadkill. The 'title' index becomes the 'caption' 
      // index in flexslider list theme functions.
      $items[$index]['title'] = $roadkill->body->value->value(array('sanitize' => TRUE));
    }
  }
}

Move Along

In this example, we've taken a relatively complex challenge and reduced it to a few configuration steps and a couple of hooks. All that's left is the theming.

Advanced Page Title Tags Using Drupal Views

In Part 1 of Page Title Tags in Drupal we looked at setting your front page and individual page <title> tags.  But reviewing our Google Webmaster Tools report on HTML Improvements, we saw that it reported five Duplicate Title Tags.

Duplicate title tags

These are all Blog archive pages, generated by Views to show teasers of all our blog posts published in a single month.  They are all just using the default - <title>FireRoad Blog | FireRoad Digital</title>.  So we need to enable a Metatag sub-module to let us set <title> tags for pages created by Views.  Look under SEO in admin/modules and enable Metatag: Views.
 
Drupal metatag module enable Views
 
This will add a new option inside all of your Views to set Meta Tags.  Edit one of your Views and you should see this in the middle section of the initial admin edit screen:
 
Drupal Metatag settings link inside of a Views edit screen
 
Out of box it is set to use defaults, which if we click through shows us:
 
Drupal Metatag module Views defaults
 
So, similar to the default for individual nodes, but using the [view:title] token rather than the [node:title] token.  So what is the [view:title] token set to?  Click on the appropriate View Display and look under Title.  For our main /blog page, it is set to ..
 
Drupal View page title

If we look at the source for the /blog page, the title tag is then appropriately set to <title>FireRoad Blog | FireRoad Digital</title>, following the rule set under the Metatag config we saw above.  And that's fine for that page.  But we need to differentiate each of the archive pages.  Each situtation will be different - you may need to find a token that you can use that is specific to that page, like the date or a username.  We are using a contextual filter to restrict the view to just show blog posts for that month and setting the title using the name of that month an the year, so we get a unique <title> tag for each month.  Such as <title>FireRoad Blog: December 2014 | FireRoad Digital</title>.  Just figure out a token or such that will make each page title unique.  And no more duplicate page titles ... and complaints from Google Webmaster Tools!  You can see all the available tokens if you click on the Open Graph option on the View's Metatag configuration and click on Browse available tokens (not sure why it got put there...)
 
Don't forgot to do the same for the Description meta tag.  We'll cover that in a future post.

Pages