Drupal Planet

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

Zivtech: Transitioning From a Freelance Drupal Contractor to a Drupal Shop

Mon, 2014-03-10 06:00
Hi, my name is Jason Moore and I am a Developer here at Zivtech. I recently started working for Zivtech full time, helping their talented team continue to build and maintain awesome Drupal websites and applications for their clients. For the three years prior to joining Zivtech, I built a name for myself in the local Philadelphia Drupal community as a go-to “freelancer”, specializing in small to medium-sized projects that shops like Zivtech and Rock River Star couldn’t take on, for one reason or another. I held out for quite a while as a freelancer as things were going great. But then I got an email from Alex, co-founder of Zivtech, asking me if I was looking for full-time work. It was at that point I realized that my Drupal skills were in higher demand than I thought and that I might be selling myself short by doing it all by myself.   When I say doing it all, I really mean everything. I did all project management, billing, development, theming, QA, training, planning and deployment for every project that came through my pipeline as a Drupal freelancer. The only thing I didn’t do myself was design, so I partnered with a graphic designer early on to solve that issue. At first this all seemed easy, but as new projects continued to roll in and my schedule continued to fill up with actual development hours, time during my work day disappeared for doing all the non-development tasks associated with each client project. Being my own boss ended up producing some very long days and more stress than I anticipated.   Outside of actual time spent working on client projects and administrative overhead, I also spent a fair amount of money on the expenses required to run a small business. Many expenses were for services or other required components of running a successful Drupal development business. These included hosting costs, hardware costs and software that I needed for my day-to-day operations. The largest expense had to be my health insurance, which I paid out of pocket as an individual. My insurance premium nearly doubled during a three-year time span, starting at $151/month and increasing to $250/month.  Zivtech has a generous benefits package, which helps cover most of the cost of my health care plan. Now I am even able to cover my fiancé, which is a huge benefit since we are expecting a baby in June.   It might sound a little bit like I didn’t enjoy what I was doing as a freelancer, but that honestly was not the case. It really is a pure dose of freedom to live the American Dream working for yourself and actually succeed at it. It is the ultimate satisfaction knowing that you are making it all work without a college degree. That uncanny amount of freedom in my freelance work lead to both good and bad times during my freelancing days. It meant that I did not have a real start time to my day, which ultimately led to many late night development sprints. Many of my clients were based on the West Coast, so naturally I would modify my work schedule to be available during their work day. In the end, I believe my body thought I was located somewhere in the Southern Pacific, while my mind was busy building websites in Philadelphia.   The transition from a freelance Drupal contractor to a Drupal shop has really been quite seamless to this point, as I have been using many of Drupal’s best practices and helpful development tools for years. This general understanding of best practices and helpful tools like git helped me jump right in on Zivtech client projects and infrastructure improvements within my first few days. Generally, I had used git to control only my own code changes, but now I am working with a larger team at Zivtech. This is a bit of a change in workflow than I am used to, and it caused a few snags early on. Luckily there are great team leaders like Jody Hamilton and Howard Tyson there to point out helpful workflow best practices to make that transition less painful. There are also project managers on our team like Jeff Waldman and Michael Gubicza, who help keep the ball rolling by delegating tasks through Unfuddle’s ticketing system. This keeps us on track (and within budget!) during a particular sprint. The Unfuddle ticketing system is very similar to the Bitbucket repository and ticketing system I had been using for the past 3 years on my freelance projects. It seems I was meant to be in a team environment, rather than a solo career as a Drupal developer. Zivtech is definitely a well-oiled factory of machines compared to the small button factory I used to build sites out of.   The most noticeable change from freelancing to working in a shop is that I no longer have to follow up with clients for payment. There weren’t many occasions where I had to do this, but it was never a fun conversation and always led to some stress. Chasing clients down for payment is now ultimately not part of my daily tasks, which lets me focus on what I enjoy doing: building websites. It’s very nice to know that finding new projects is no longer part of my job description and the work just keeps coming in.   At the end of the day, my transition to working at Zivtech on a larger team of skilled developers has been both very positive and a great learning experience. It has put me in a better mood on a daily basis with less stress and I am definitely working in a more educational environment than working alone in my home office. If you’re a freelancer and can hold out until you find a great company that fits your needs, then don’t sell yourself short; see if making the transition to a shop is right for you! Terms:  Drupal Planet Drupal Drupal Contractor Freelance Developer
Categories: Drupal

Web Omelette: Cool Module: Menu Token

Mon, 2014-03-10 01:10

In the previous article I showed you how you can add menu items with wildcards to your menus in custom modules. Since then, however, I've been shown a cool module that allows to do similar things through the UI: Menu token.

Menu token allows you to define menu items that include tokens (provided by the Token module). These tokens get replaced on page load depending on the context or whatever rule you set when you created the menu. So let's take a look at how it works.

To install it, go through the normal module installation procedure. With Drush, this is simple:

drush dl menu_token token && drush en menu_token token

You'll notice that we also install the Token module as it is needed.

Before anything, navigate to admin/config/menu_token and check/uncheck the relevant boxes. These are basically the available entity types exposed by Menu Token.

Next, go to your menu and add a new link. You'll notice a new checkbox saying Use tokens in title and in path. Check that box and you'll get all the options for the token in that menu link.

Example #1: Current User ID

Let's see how we can create a menu link that goes to the user page of the currently logged in user.

  1. Under Method for users, select User from context.
  2. Best to also check the box Remove token if replacement is not present to avoid problems if the token is not available on a given page
  3. Browse the available tokens and look for this one: [current-user:uid]. This is the token for the currently logged in user account ID.
  4. Add your menu title and for the path specify: user/[current-user:uid].
  5. Save

Now if you go somewhere your menu is visible, you'll notice a new link that leads to your user account page. Neat. We have't done anything that isn't already available in Drupal core, but still neat. The reason I'm saying this is that you can create a menu link with the path user/ that will lead the same place. But for illustrating the power of Menu Token, it's a good example.

Example #2: Current Node Type

Let's say you have a View that displays nodes of two different content types: Article and Basic Page. This View has a contextual filter to show nodes of the type article when the first parameter after the path to the view is article. And same for the Basic Page (with page being the machine name). The view path is nodes.

Let's create a menu link for the main menu that will link to this view and pass to the URL the content type of the currently viewed node.

  1. Under Method for nodes, select Node from context.
  2. Best to also check the box Remove token if replacement is not present to avoid problems if the token is not available on a given page
  3. Browse the available tokens and look for this one: [node:content-type:machine-name]. This is the token for the currently loaded node content type.
  4. Add you menu title and the following path: nodes/[node:content-type:machine-name]
  5. Save

Now if you navigate to an article page, you'll notice in your main menu a new link to the following path: nodes/article. If you go to a Basic page, it'll be nodes/page. And clicking on these will of course take you to your View page with the filtering applied.


These are a couple of simple examples of how you might use Menu Token. Of course you can use it in other situations depending on what you need and what tokens are available.

Hope this helps.

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

Damien McKenna: Convention plans for the year

Sun, 2014-03-09 12:26

While I'm not going to Drupalcon, missing my second 'con in a row, I am hoping to attend some regional camps this year:

Categories: Drupal

SystemSeed: Panopoly 1.2 released

Sat, 2014-03-08 11:20
Panopoly 1.2 released

We are pleased to announce that the Panopoly 1.2 release is now available on Drupal.org.. Once again, thank you to all those that contributed.

Categories: Drupal

Deeson Online: Deeson Online 2014 DrupalCamp London round up

Sat, 2014-03-08 09:24
Deeson Online 2014 DrupalCamp London round upBy Lizzie Hodgson | 8th March 2014

Running from Friday February 28 to Sunday March 2, DrupalCamp London was the second largest DrupalCamp ever seen in Europe: Attended by over 600 people, it included a CxO day, over 30 sessions and Bofs, and high-caliber keynotes from organisations ranging from Cancer Research and Government Digital Service to Drupal Association and Acquia.

Drupal's growing up

The event itself had more of a DrupalCon feel than a Camp - emphasising the view that Drupal community is 'growing up', something that Associate Director at Drupal Association, Megan Sanicki, also hit home in her keynote. We were lucky enough to catch up with Megan where she expanded on topics covered in her speech.

Expanding the Drupal talent pool


Talent was also very much part of the focus of DrupalCamp London. This was not only reflected in the attendance of a group of Drupal Apprentices (above) who met with potential employees at a special Bof, but also with the inclusion of Eric Gaffen, Global Manager, Talent Acquisition at Acquia. Eric travelled over from Boston to be at the event, and in this great short video told us why nurturing great Drupal talent is important for the whole of the Drupal ecosystem.

Networking, sessions... and swag!

Deeson Online not only sponsored it, MD Tim Deeson was also one of the organisers. And as this Vine proves, was also king of networking...

Deeson Online Developer Annika Clarke gave a session entitled Introducing Demo Framework, a distribution that aims to make the process of pitching Drupal to new clients a lot easier, while Solutions Architect John Ennew delivered his session on concurrent programming in Drupal. We'll be putting up their well-attended presentations very soon - so watch this space.

But as is the case with anything vaguely Drupaly... it's the swag that people really love, and our We Are Smarter Than Me tees went down a storm again!

2014 DrupalCamp London definitely upped the game, and next year's event will no doubt build on the great foundations set down last weekend. We're looking forward to it already!

Categories: Drupal

Deeson Online: DrupalCamp London: Interview with Megan Sanicki

Sat, 2014-03-08 07:12
DrupalCamp London: Interview with Megan SanickiBy Lizzie Hodgson | 8th March 2014

While at DrupalCamp London, we caught up with Associate Director at Drupal Association, Megan Sanicki, for a quick video interview.

In it Megan highlighted key elements from her keynote speech including how:

  • Drupal Association is stepping up their mission to further the project and help expand the community
  • They plan to grow from 3% to 10 % of the web
  • They're investing £850k to improve Drupal.org including marketing to help people understand why they should adopt Drupal 8.
A call to action

In the video, Megan also emphasises that Drupal Association want to know how they can better serve the UK Drupal community - so tell them @drupalassoc or contact them via their website.

Megan's DrupalCamp London keynote

You can also see the slide deck from her DrupalCamp London keynote below. In it Megan shares in more detail the Association's vision and the programs being implemented to help make that happen.

Drupal Camp London Drupal Association Keynote 2014 from Drupal Association
Categories: Drupal

Jackson River: Jackson River Earns 2013 inc5000 Honors

Fri, 2014-03-07 13:22

When we started Jackson River in 2008 we had a simple business plan.  It wasn't filled with lofty goals for things like revenue, number of employees or market share. Those things are important in business but can also lead to the tail wagging the dog.  Instead we had one simple idea: figure out the problems progressive nonprofits face and solve them...and that became our business plan.

read more

Categories: Drupal

Nextide Blog: Maestro - Drupal 8 - Road map

Fri, 2014-03-07 10:43

With Drupal 8 emerging on the horizon, we've started to delve in to our core modules, Maestro and Filedepot, beginning the process of porting them from Drupal 7 to 8.

For our Drupal 8 version of Maestro, I have some immediate concerns that I would like addressed, but also some "wish list" items which I feel would bring a great deal of flexibility.

A condensed road map, of sorts, for Maestro's first release on Drupal 8 would be:

Categories: Drupal

Drupal Easy: X Marks the Spot: A Beginner's Guide to Online Maps in Drupal

Fri, 2014-03-07 08:18

Mapping address data in Drupal can be confusing, if only because of the great number of contributed modules available that involve online maps. Picking the right module (or combination of modules) is challenging - especially for site builders who are new to mapping in Drupal. In this tutorial, we'll utilize the popular and well-supported Geofield module as one of the key ingredients in the common task of entering address data and having it displayed on an interactive map.

This tutorial contains step-by-step instructions for accomplishing this task, as well as a screencast demonstrating all of the steps.


read more

Categories: Drupal

InternetDevels: Drupal themes

Fri, 2014-03-07 01:13

Each site has its own design. Good-looking design will help attract users, they will stay on the portal longer and most likely will visit it again.

There are lots of Drupal themes that will help you to develop your own theme from scratch, to create a simple and beautiful catalogue website, or to make a useful site that will have a lot of helpful materials.

Read more
Categories: Drupal

Code Drop: Writing a Drupal 8 Image Effect Plugin for Image Styles

Thu, 2014-03-06 21:48

Recently at Drupal South I had the opportunity to upgrade the Image Style Quality module to Drupal 8. I was lucky enough to be surrounded by some of Australia's top Drupal contributors who were more than happy to lend a hand with the ins and outs. In this blog post I will run through the entire processes of writing an image effect plugin for Drupal 8.

Categories: Drupal

Advantage Labs: Baking our cake and eating it too: an uncamp FTW

Thu, 2014-03-06 14:05

In the past 3 years the Twin Cities Drupal community has organized one of the best annual Drupal camps in the country. But still we find learning gaps -- people new to Drupal looking for help answering questions they haven't yet formed; advanced developers seeking challenges; self-taught site-builders wanting to understand if they've put the pieces together correctly. Staring at another 7 months before our next DrupalCamp Twin Cities, this past Saturday we hosted the first ever Twin Cities Drupal Open House (TCD'OH!) in an effort to address the difficulty of being everything for everybody every time.

Categories: Drupal

Modules Unraveled: How to use multiple logos in responsive design

Thu, 2014-03-06 11:14

When re-designing my site, I needed to make the logo responsive so that it could stay out of the way, and not take up more screen real estate than needed. Here's my (debatably hacky) solution to creating a responsive logo using css and display:none.

Show Different Logos Based On Window Size Tags: 
Categories: Drupal

Lullabot: Creating a Simple Chrome Extension

Thu, 2014-03-06 11:00

As a front-end developer there are a lot of different technologies to keep up with. Whether I’m working with AngularJS or trying to set up Grunt tasks, I find myself having to look up a lot of things. To make that easier on myself, I decided to write Google Chrome extensions to simplify the process. It turns out that’s pretty darn easy! In this article, I’ll show you how to create a simple one that hooks into Chrome's Omnibar to search the Drupal API with a simple keyword.

Categories: Drupal

Phase2: Using Blueprints to clone spaces in Open Atrium 2

Thu, 2014-03-06 09:51

Open Atrium 2 supports many different patterns for your site’s Information Architecture.  Through the use of Spaces, sub-Spaces, and Sections you can easily create a hierarchy of content within your Intranet.  However, it can be tedious to create every new section within every new space.  The new 2.15 release of Open Atrium adds “Blueprints” which will allow you to clone an existing space structure and automatically create the necessary sections!

Creating a Blueprint

To create a Blueprint, simply create a sample space that contains all of the sections and content that you want to bundle.  Let’s create a Blueprint for a basic “Project Space”.  In this example, we want our Project Space to contain an Event Calendar, a Discussion Forum, a Document section, and a Task list.

  1. Create a new Space called “Project Blueprint” and save it as a Draft so other users don’t see it.
  2. Create each Section: Calendar, Discussions, Documents, Tasks.  In the new 2.15 release you’ll notice that the “Create New Section” action in the drop-down menu on the toolbar allows you to choose which type of section you want to create.
  3. At this point you can adjust any other settings for the space, such as color scheme, banners, taxonomies, permissions, etc.  You can even create sub-spaces within this Space and create additional Sections within those sub-spaces.  You can also create sample content, such as a Welcome document, or sample discussion forum.
  4. You can also customize any of the Section or Space landing pages using the “Customize Layout” and “Customize Page” buttons.  You can place additional widgets on the landing pages, or make any other customizations needed for the Space.
  5. Once your sample space is set up the way you like, click on the “gear icon” in the upper-right portion of the Space landing page and select the “Create Blueprint from this Space” option.  You will be taken to a form where you can enter the to name your Blueprint (we’ll call it “Project Space” in this example) and also enter a short description for this Blueprint.  Be sure the “Clone an existing Space” checkbox is enabled and that the “Space to clone” is set to the “Project Space” node you created above.  All of this should be set by default, but it’s good to verify.  When you are done, click the Save button.

Viola! You have created your first Space Blueprint!

Using a Blueprint to create a new Space

Now when you select “Create New Space” in the toolbar drop-down menu you’ll see a choice for the different Blueprints available on your site.  Simply select “Create new Project Space” from the menu and you’ll be taken to a normal Create Space form where you can enter the name of your new project space.  All of the other fields on this page are filled in automatically with the values from the Blueprint.  Change anything you like, then click Publish when you are finished and your Blueprint will be cloned into your new space.

You will be redirected automatically to your new space landing page.  Click the drop-down menu in the toolbar next to the space name and you will see the Sections for Calendar, Discussions, Documents, Tasks that you created above.  You didn’t need to create these manually, they were created for you automatically by cloning the Blueprint!

That’s really all there is to it…it’s simple to use and simple to understand and will save you hours and hours of work.

Behind the Scenes

How does Open Atrium 2 accomplish this magic?  The Drupal node_clone module is being used for the heavy lifting of cloning the actual content nodes, such as spaces and sections.  It provides hooks such as hook_clone_access_alter() that can be used to add custom functionality for specific OA2 plugins.  Beyond that, the new oa_clone submodule handles all of the OA2-specific settings, such as the space and section panelizer layout.  In addition, a new hook_oa_clone_group_metadata() allows submodules to clone any additional space-specific settings, such as the space colors handled by the oa_appearance module.

In addition to cloning the nodes and settings, oa_clone creates a new “Space Blueprint” vocabulary term (previously called “Space Type”) to represent your new Blueprint.  New fields have been added to this vocabulary to indicate an existing space should be cloned when creating spaces using this taxonomy term.  By selecting the “Clone an existing Space” option, the panelizer layout is taken from the specified “Space to clone” along with all of it’s structure and content.

If you don’t want to clone an existing space you can still create your own Space Blueprint taxonomy term as in the past to point to a specific custom panelizer layout by selecting the “Specify layout and node types by hand” option.

By controlling the cloning process via the “Space Blueprint” taxonomy, you can easily integrate other Drupal tools for importing content into this architecture.  For example, imagine you have a list of Projects to be created already saved in a *.csv spreadsheet.  Using the Feeds module you can import that spreadsheet to create a new Space node for each entry.  By simply specifying the Space Blueprint taxonomy term from the spreadsheet, each new space can be created as a clone of existing space structures, building out all of the child pages that are needed for each space quickly and easily.

Cloning Content

In addition to creating a Blueprint from an existing space, you can also just clone content directly.  On any content page, a “Clone this content” option is added to the “gear” icon in the upper-right corner of the page for users that have permission to clone content.   You can use this to clone an entire space, sub-space, or section.  You can also use it to clone specific documents, discussion posts, events, or any other content in Open Atrium.  Any “child” content is also cloned, such as content with sections, or replies within a discussion topic.


The ability to create entire Space hierarchies by simply cloning a Blueprint greatly increases the day-to-day usability of Open Atrium 2.  By allowing site admins to create their own Blueprints directly from existing Space examples, rather than filling out complex forms makes it even easier.  Open Atrium 2 was designed to be used as a toolkit for building many different types of collaboration sites, from intranets to project management sites to web portals.  Each OA2 use-case requires a different content structure and set of content-type features.  Blueprints allow you to easy to design your site’s information architecture and keep it consistent across all of your Spaces.

(NOTE: The OA 2.15 release still calls the taxonomy “Space Type” rather than “Blueprint”.  The vocabulary was changed to “Blueprint” in the recent -dev version.)

To get more tips and tricks for getting the most out of Open Atrium, sign up to attend this month’s Open Atrium webinar!

Categories: Drupal

Mediacurrent: Join us at these upcoming Drupal events

Thu, 2014-03-06 08:26

Our talented team here at Mediacurrent will be leading discussions on the latest developments in Drupal trends in a number of upcoming events. Check out the links below for more information and registration information. We hope to see you there and make sure you stop by and say “hello”!

Categories: Drupal

Forum One: 5 Lessons Learned for Content Migration

Thu, 2014-03-06 07:16

This past fall I undertook my first content migration effort. This was to migrate an existing site from Expression Engine to Drupal 7. I immediately began looking at the Migrate module to learn it's use and here are some lessons I learned along the way.

First of all, be aware that migrate is a module for developers. It does have a user interface, but this is merely to run the import process. All the real action happens in the code, so you will need to be familiar with object oriented programming in PHP.

Lesson One: Don't Force a 1-1 Relationship

Do not try to force a 1-1 relationship with your migration classes and your destination content types. If you are migrating a site, you very likely are taking the equivalent of Drupal content type in the legacy system, creating similar types in Drupal, and probably combining a few of these because you realized in discovery sessions that some of the legacy system's content types are redundant. Although I did not use this method myself, given another migration project, I would create a 1-1 relationship between the migration classes and the legacy system's content types. This will avoid some awkward logic in your migration code as you try to route multiple possible source fields into a single field in Drupal.

In other words, don't do this:

Source type \
Source type ---> Migration ---> Drupal content type
Source type /

Do this:

Source type ---> Migration ---> Drupal content type
Source type ---> Migration ---> Drupal content type
Source type ---> Migration ---> Drupal content type

Lesson Two: Document

Be obsessive about in-code documentation/comments. In code comments are always a good idea, and you can never comment too much, but this is especially true with migrations. I did this from the start and it helped greatly when I had to revisit the migration code. Migrate is handy in that it provides tools to integrate in a project management system by linking to available tickets and places to add descriptions for mappings. Use these, your client's product owner will greatly appreciate it as they are reviewing the state of the migration. Which brings us to Lesson 3.

Lesson Three: Break out your migration into tasks

Break out the migration task into it's own project/ticketing system and use it! Migration tasks seem to live in a bubble within the larger site build project. Avoid this by separating the migration effort into it's own sub-project with a dedicated ticketing system. This way you won't clutter up the build's ticket queue with migration work and the whole team can observe the progress of the migration.

Lesson Four: A Gotchya!

A small gotchya on Migrate: If your source and legacy databases are owned by separate users, remember to set the "join" option to false in each of your migration classes with this bit of code:

$options = array('map_joinable' => FALSE); $this->source = new MigrateSourceSQL($query, array(), $count_query, $options);

This may be the cause of some permissions errors. You may wish to make these databases joinable however, since the performance hit of not joining these is huge, (close to doubling the import in my own casual observation).

Lesson Five: Entity Reference Field Handlers

Entity reference field handlers do not currently support multiple cardinality (as of December 2013). This means fields with multiple values. You will need to write extra code in your prepare() method to handle this, e.g. 

$related_nodes = $this->getRelatedContent($row); //Custom method to seek related nodes based on source id foreach ($related_nodes as $related_node) { $node->field_content_relationship[LANGUAGE_NONE][]['target_id'] = $related_node->nid; }

* assuming this is not a multi-lingual field. 

During this effort, I took it upon myself to develop a small Drupal module that would allow users to explore the Channel data (Expression Engine's version of a content type) of an Expression Engine site. I call it Expression Engine Analyzer and have posted it on Drupal.org as a sandbox project. It's been a great tool to help self understand the source data better and proven to be an excellent visual aid with clients while we discuss the the migration work. The whole team wishes we had such a tool at the beginning of a project, and going forward, I may consider making similar tools at the beginning of other migration efforts.

Five practical Drupal lessons learned during a recent content migration effort.

Categories: Drupal

Linnovate: mean.io + Drupal - Meaningful Untheming

Thu, 2014-03-06 03:42

Maybe it's just me.. But I see more and more DG's (Drupal Geezers) find themselves introspecting and thinking about the technology they have invested their past 7-8 years in.

The web is exploding with tons of amazing javascript mvc platforms, crazy socket madness and stunning widgetry all running client-side (in the browser) with amazing sub-second speeds.

Our reality is that we still live in a world where 10% of the functions we use frequently in drupal end with .+_alter - Drupal typically will output whatever markup you want and then you find yourself wrestling with it and altering it to fit the semantic html you want. To actually get Drupal to come close to sub-second performance means to wrap it with so many caches it looks like an Egyptian mummy.

Unthemeing The main challenge I see with Drupal revolves around theming, because Drupal is a great CMS for beginners it bundles every layer of markup possible so it can be tweakable from the admin UI, but in the process if you want clean, simple semantic markup of blocks, menus, views, panels etc... - you really need to know what you're doing. Thus you see more and more Drupal shops experiment with decoupling the front and back side of Drupal. Drupal is awesome in managing content, users, groups and processes but when it renders that information it's sometimes heavy, bloated and inflexible. The way we approach this is through building the interface with angular.js an awesome MVC javascript framework and connecting through web services to the Drupal containing the data. In the past 2 years we have started to experiment with technologies augmenting Drupal - building apis powered by node.js and mongoDB for scalable mobile endpoints, and building angularjs based widgets that we've inserted in to existing Drupal sites. I talked about this in a webinar by acquia 2 years ago but as we reimplemented these fullstack javascript implementations we felt we needed to standardise around a common solution for our internal needs. Mean.io We've merged all of the best practices for fullstack javascript development within the mean.io project. MEAN is an acronym coined by Valery Koltarov from MongoDB and is used to describe applications built by MongoDB, Express, Angular.js and Node.js. We and over 3200 developers which stared the project in github are awed in the speed and quality that comes when you're actual building what you need and not constantly altering what you got from Drupal. So we have this awesome js framework that knows how to serve content very well but lacks a CMS, and we have a CMS (that we still love) which does an awesome job of managing content but can do a better job serving it. We combined both worlds with the mean module providing a standard way to bi-directionly communicate between mean.io instances and Drupal. The mean module Although Drupal 8 is coming up there are tons of Drupal 6 sites out there that want to spice up the look and feel yet maintain the content, ccks and views involved. We thought how to expose the data within drupal to rich widgets or single page applications which either feed information in to drupal or use information fro within to provide a dynamic experience. The mean module (at http://drupal.org/project/mean) provides the means to export blocks,menus views and variables to one big json file which is accessed by an angular.js service which reads it and makes it available to the mean application. Integration Strategies There are two types of patterns that can be implemented using the mean module. Mean in front

mean.io is used in many places as an engine for SPA (single page applications) now we can create applications that are built from information which is held in drupal. Mean provides an interface to load various pieces of data from a Drupal sites and to render a single-page application which uses Drupal as an additional data source. We implemented this approach lately with Strauss an established enterprise customer which had an OpenIdeal - Drupal 6 site which they wanted to face lift. You can browse here to see the result and here to peek in to the drupal in the backend which powers it.

After enabling the mean module you can browse /mean/json/help/me and see the following possabilities... URL stucture: /mean/json/[TYPE]/[NAME]/[ARG1]/[ARG2]/[ARG3] currently supported TYPE values and their arguments: - view - returns results for requested Drupal view object, arguments: - NAME - view's name - ARG1 - (optional) display_name - ARG2 - (optional) items per page value (-1 for unlimited, 0 - skip arg) - ARG3 - (optional) arguments divided by '+' sign without whitespaces - menu - output from menu_tree_all_data() function - load - looks for load_[NAME_mandatory] function and returns its output (node_load([ARG1]), user_load([ARG1]), menu_load([ARG1]) ...), arguments: - ARG1 - ID or name to pass to load function - help - /mean/json/help/me will output current instruction - user - /mean/json/user/logout - Logging current user out - /mean/json/user/login (along with name and pass values passed as post will log user in and return its object) - /mean/json/user/session - returns $_SESSION - /mean/json/user/me - returns global user object - get-mean-packet - returns set of JSON objects, set at admin/build/mean-packets - NAME - packet's name ------------------------------------------------------------------------- To skip any optional ARG, use 0, (example: /mean/json/forum_search/0/5) Angular apps in blocks/panel panes

In many cases we have to continue hosting with Drupal - for instance if you have a governmental site that has been security cleared to run Drupal there is a very slim chance you could change that. With the next approach you can still get the "single page" behaviour or implement a complex widget that you'd rather implement on a client-side MVC rather then in a bunch of spaghetti code in jquery.

We have been working with a financial client from new-york for the past year which has a huge antiquated drupal-5 site and the ability to insert rich angular.js driven application that connect to the data within the drupal site - can create a modern feel even if you're stuck in the past, it also can provide a clear path to fix sites that can't be upgraded because their core has been altered. Drush support

One of the concepts and tools we've built to help with both types of integrations - has to do in how to swiftly enter the Drupal data in to a mongodb based db so it can be served effectively to mobile devices, widgets and single page applications. We have bundled the mean shadow module with the the mean module which provides a standard way to sending drupal information upon content update to the Mongo/Node based service. To make the initial import of the data in to the mean easy we provide the drupal shanties (shadow entities) command...

Here are some examples of the possible usage.. Examples: Standard example (all the user entities) drush shadow-entities Type example (all the node entities) drush shadow-entities node Id example (specific user) drush shadow-entities user 42 Id example 2 (specific node) drush shadow-entities node 42 Bundle example (all the entites of drush shadow-entities node article bundle article) To summarize - mean.io is an amazing way to develop cool and modern applications but the mean module integration lets us start building mean apps now and helps them co-exist and augment Drupal.
Categories: Drupal

Open Source Training: Drupal: You have not created any content types yet

Thu, 2014-03-06 01:59

Some times we write long blog posts with detailed, technical explanations.

Other times we write about very quick and simple fixes. This is one of those very quick posts.

We've had questions from OSTraining members about an error message on Drupal's Add content page. The message they get is: "You have not created any content types yet".

Categories: Drupal

Drupal core announcements: Drupal 8 alpha 10 on Mar. 19

Wed, 2014-03-05 11:20

The next alpha for Drupal 8 will be alpha 10! Here is the schedule for the alpha release.

Mar. 16-18, 2014 Only critical and major patches committed Mar. 19, 2014 Drupal 8.0-alpha9 released. Emergency commits only. Mar. 20-23, 2014 Disruptive patch window (just prior to Drupal Dev Days Szeged)
Categories: Drupal

Powered By