Upgrade Your Drupal Skills

We trained 1,000+ Drupal Developers over the last decade.

See Advanced Courses NAH, I know Enough
Jul 11 2019
Jul 11

On September 12–14, at Hilton Garden Inn Atlanta-Buckhead

Kaleem Clarkson Kyle Mathews, 2019 DrupalCamp Atlanta Keynote

This year, DrupalCamp Atlanta is honored to welcome Kyle Mathews as our keynote speaker, creator of the open source project Gatsby. Gatsby was a hot topic at DrupalCon this year, and we’re ready to dive into the software at DrupalCamp this September.

Follow Kyle on Twitter and Github.

Session submissions are now open for DrupalCamp Atlanta 2019! With Kyle as our keynote, we’re interested to see how others are combining Drupal and Gatsby. In addition, we’re also accepting sessions in the following tracks:

Each session is 40 minutes with 10 minutes for Q&A. Each room will be set classroom style and will have a projection screen and with in house audio.


In addition to 50-minute sessions, we’re also looking for volunteer trainers for our full day of trainings on Thursday (9/12) and a half day on Friday (9/13). Training sessions can range across all experience levels. You can submit your call for training here.

One of our goals for this year’s camp was to increase the number of case studies. We encourage web development companies and units to connect with their clients to co-present a session at this year’s DCATL.

We see this as an opportunity to re-engage with a client by highlighting the great work you have done together all while introducing them to the awesome Drupal community we have. So, reach out to some of our clients and propose a presentation today!


Dec 11 2018
Dec 11

It’s not easy to find a development partner you can trust. Particularly if you’ve never been immersed in the world of web development, it may take you some time to learn the language. That can make it even more difficult to know whether your partner is really staying on track with what you want to accomplish.

Luckily, knowing what to look for in a business partner can save you from all of the potential troubles later on. Ratings and reviews sites like Clutch can help you get there. This platform focuses on collecting and verifying detailed client feedback and then using a proprietary research algorithm to rank thousands of firms across their platform. Ultimately, Clutch is a resource for business buyers to find the top-ranked service providers that match their business needs.

Luckily for us, users on Clutch will also find Kanopi Studios at the top of the list to do just that. Kanopi has been working with Clutch for a few months to collect and utilize client feedback to find out what we should focus on in the coming year. Through the process, we’ve coincidentally been named among the firm’s top digital design agencies in San Francisco.

Here are some of the leading client reviews that led us to this recognition:

“They were fantastic overall. We had great success communicating to their team via video conferencing, and they were able to answer every question we had. They also worked quickly and were very efficient with their time, so we got a great value overall.”

“Kanopi Studios’ staff members are their most impressive assets — extremely intelligent, experienced, and personable. Building a website is never easy, but working with people you both respect and like makes a huge difference.”

“Kanopi Studios successfully migrated our Drupal platform while preserving all the content that we’ve built up over the years. They worked hard to achieve a responsive design that works well on both mobile and large desktop displays.”

Not only have these kind words earned us recognition on Clutch, but we’ve also gained the attention of the how-to focused platform, The Manifest (where we are listed among top Drupal developers in San Francisco), and the portfolio-focused site, Visual Objects (where we are gaining ground among top web design agencies site-wide).

Thank you, as always, to our amazing clients for the reviews and the support.

Dec 11 2018
Dec 11

Custom Post Types in WordPress

By Andrea Roenning

Custom post types are the key to taking a WordPress website from a simple blog to a robust system for managing many types of content and data. They help create a WordPress administrator experience which makes it easy for editors to add and edit repetitive content and gives the developer flexibility to create unique web pages to fit the site’s individual needs.

The Flexibility of Drupal 8

By Michael Miles

This article demonstrates six different methods of changing content and functionality in Drupal. Each method requires a different skill set and level of expertise, from non-technical inexperienced users to advanced Drupal developers. For each method, we describe the components, skills, knowledge, and limitations involved. The goal is to highlight Drupal’s flexibility as a Content Management framework.

How to Learn PHP Unit Testing With Katas

By David Hayes

Sometimes code is first tested when the unfortunate client or user feels like using the feature and tests the developer’s work. Hopefully, they’re not disappointed. That’s why you should be interested in unit testing and Test-Driven Development (TDD)—because it makes your life as a programmer better. It would have saved me hours of work in situations like those outlined in the last paragraph. TDD and automated testing let us focus on what we’re there for: solving complicated problems with code and leaving the computers to do more of the rest.

It’s About Time

By Colin DeCarlo

As applications scale and gain adoption, dates and time become much more of a concern than they once were. Bugs crop up, and developers start learning the woes of time zones and daylight saving time. Why did that reminder get sent a day early? How could that comment have been made at 5:30 a.m. if the post didn’t get published until 9:00 a.m.? Indiana has how man time zones?!

The Dev Lead Trenches: Creating a Culture

By Chris Tankersley

I have spent much time talking about creating and managing a working team, but there is one important piece I’ve left out of the puzzle until now—creating and crafting a culture that makes people want to work on your team and stay on your team. If you have a company culture which does not attract people, employees will be hard to find.

The Workshop: Producing Packages, Part Three

By Joe Ferguson

Over the past two months we’ve been building PHP Easy Math a purposely simple example library to demonstrate how to build a reusable package for the PHP ecosystem. Make sure to check the previous issues if you’re just now joining us! This article is the third and final installment in this series. We’re going to cover triaging and managing issues users may open as well as pull requests to your library.

Education Station: Interview Coding Challenges

By Edward Barnard

Meanwhile, the days where employees stay with the same company 20-30 years are long gone. We move around or move on from contract to contract. For many of us, this means formal job interviews. Many of those interviews include coding challenges; that can be a problem. Let’s talk about that!

Security Corner: Adventures in Hashing

By Eric Mann

Last month, the PHP community had the opportunity to come together for the excellent php[world] conference in Washington, D.C. As part of the event, we held a hackathon to work through some of the challenges posed by Cryptopals. Some of the cryptographic primitives we discussed were hashes, and it’s useful to take a more in-depth look at what they are and how to use them in PHP.

By James Titcumb

The final days of 2018 are looming on us, and I wanted to take a look back on some of the things, good and bad, that happened in and around the PHP community this year.

finally{}: The Seven Deadly Sins of Programming: Greed

By Eli White

As you are reading this magazine, we are in a time of winter holidays and typically associated with a spirit of goodwill towards others. That is embodied often as giving presents to people as a gesture of that goodwill. Unfortunately, this can have the opposite effect at times of causing greed to form as people want more and more given to them. Alternatively, they may misinterpret it as greed, as a specific green haired character learns in his holiday tale.

Nov 08 2018
Nov 08

Now that the excitement of BADCamp has worn off, I have a moment to reflect on my experience as a first-time attendee of this amazing, free event. Knowing full well how deeply involved Kanopi Studios is in both the organization and thought leadership at BADCamp, I crafted my schedule for an opportunity to hear my colleagues while also attending as many sessions on Accessibility and User Experience (UX) as possible.

Kanopi’s sessions included the following:

The rest of my schedule revolved around a series of sessions and trainings tailored toward contributing to the Drupal community, Accessibility and User Experience.

For the sake of this post, I want to cover a topic that everyone who builds websites can learn from. Without further ado, let’s dive a bit deeper into the accessibility portion of the camp.  

Who is affected by web accessibility?

According to the CDC, 53 million adults in the US live with some kind of disability; which adds up to 26% of adults in the US. Issues range from temporary difficulties (like a broken wrist) to permanent aspects of daily life that affect our vision, hearing, mental processing and mobility. Creating an accessible website allows you to communicate with 1 in 4 adults you might otherwise have excluded.

What is web accessibility?

Accessibility is a detailed set of requirements for content writers, web designers and web developers. By ensuring that a website is accessible, we are taking an inclusive attitude towards our products and businesses. The Web Content Accessibility Guidelines (WCAG) are a globally acknowledged set of standards that help us publish content that fits within the established success criteria. These guidelines are organized into the following four categories.

WCAG Categories:

  • Is your website perceivable? This applies to non-text content, time-based media (audio and video), color contrast, text size, etc.
  • Is your website operable? This ensures that content is easy to navigate using a keyboard, that animations and interactions meet real-user requirements, buttons are large enough to click, etc.
  • Is your website understandable? This means that text content is easy to read for someone at a ninth grade reading level, that interactions follow design patterns in a predictable manner, that form errors are easy to recover from, etc.
  • Is your website robust? This means that content should be easy to interpret for assistive technologies, such as screen readers.

The World Wide Web Consortium (W3C) is an international community whose mission is to lead the Web to its full potential. They have also published a checklist to aid our efforts in meeting WCAG success criteria.

Need help with making your site accessible? Contact us.

How can we be successful in making the web accessible?

Industries have varied requirements when it comes to web accessibility. WCAG has three levels of compliance, ranging from A to AA to AAA. A conformity has the lowest set of requirements and AAA has the strictest set of requirements; so strict, in fact, it may be impossible to achieve across an entire site.

Efforts to meet these standards fall on every individual involved in the process of creating a website. Although there are many tools that aid in our journey, we reach accessibility through a combination of programmatic and manual means.

The most important thing to keep in mind is the fact that achieving success in the world of accessibility is a journey. Any efforts along the way will get you one step closer towards a more inclusive website and a broader audience base.

Please Remember: Once Kanopi helps you launch an accessible site, it’s your job to maintain it. Any content you add moving forward must be properly tagged; images should have proper alt text and videos should have captions. Users come to your site because they love your content, after all! The more you can make your content accessible, the more you will delight your users.

Interested in making your site more accessible? Check out some of the resources I linked to above to join in learning from my peers at BADCamp. If you need more help getting there, let’s chat!

Aug 29 2018
Aug 29

Image of a task board with MVP tickets

Image of a task board with MVP tickets

Congratulations! Your Boss just gave you approval to build the website you’ve been pitching to them for the past year. A budget has been approved, and you have an enthusiastic team eager to get started. Nothing can stop you… until you receive the deadline for when the website has to go live. It’s much earlier than you planned and there just simply isn’t enough hours in the day, or resources available to make it happen. Whatever will you do?

Let me introduce you to the minimum lovable product, or MLP.

What is an MLP?

You may have heard of a minimum viable product (MVP). Where a minimum viable product is a bare-bones, meets your needs solution; the minimum loveable product can be described as the simplest solution that meets your needs and is a positive step toward achieving your goals. It’s easy to view every aspect, every deliverable, as being fundamental to a project’s success. But when you actually look at each nut and bolt with a more discerning eye, you begin to realize that each component is not fundamental to the overall product’s success.

So basically the MLP is the sufficient amount of features your site needs to be satisfactory to your business goals for launch.

It’s important to note that an MLP is not necessarily a reduction in scope. It’s more a prioritization in the order for which things are addressed. The project team can circle back on anything that wasn’t part of the MLP. The goal behind an MLP is to deliver a functional product that you’re excited about, within the confines of the project.

When should you consider an MLP?

An MLP isn’t for every project, but is usually best leveraged when there is a restraint of some sort. I used timeline as an example in my opening, but as you know restraints can take many forms:

  1. Timeline: Maybe the deadline you need to hit, simply won’t provide enough time to complete all the work you have queued.
  2. Resource Availability: Perhaps there are scheduling conflicts, or limited resource availability during your project.
  3. Budget Constraints: Another possibility is that the budget just isn’t sufficient to get to everything you have on your list.

Regardless of the restraint you’re facing, an MLP can help you realign priorities, and expectations to compensate. But how do you go about evaluating your project for an MLP?

Need help with defining your MPL? Contact us.

How do you create an MLP

When you’re able to parse the individual elements that are crucial to your website’s success into user stories and features, you’ll have effectively identified your project. But how do you actually go about separating the core building blocks that will comprise your MLP from the bells and whistles?  It all starts with goals.


Chances are that you already have a set of goals describing  what you’re hoping to achieve with the project. These ideally should be as specific as possible (ie. increase traffic) and ideally measurable (analytics). Without realistic, concrete goals you set the project up for failure. For example if your goal is to make people happy; chances are you’re going to have a hard time measuring whether you were successful. Establishing measurable goals will set the project up for success.

It’s not enough to know your goals, you have to be able to prioritize them. It’s simply not realistic that every goal be top priority. Try to narrow your priorities down to no more than three goals. Goals in hand where do we go from here in our quest to define an MLP?


Begin by thinking of all the factors that are needed for a User to accomplish a given goal. These could include anything from Layouts, to Features, to Content. Start a list of these factors:

  1. What are the things a User sees?
  2. What copy does a User read?
  3. What actions is a User taking while they navigate through the site?

Everything you write down while asking these questions should be in the interest of one of your priority goals. If an item isn’t directly contributing to accomplishing the goal, then it should not be on the list. If you’re not a subject matter expert that will be directly contributing to the work, you should connect with your team to determine the specific work that needs to be carried out for each of the items you’ve identified. Additional refinement, and further simplification may be needed to compensate for the restraint you’re up against.

By this point, you’ve probably realized that defining the MLP is a difficult task. The choices will be tough, and ultimately everyone is not going to get their way. What’s important is that the work you do strives to meet the goals you’ve set. This sometimes means detaching personal wants from the needs of the company. If you can tie the work back to this core philosophy, you’ll always have a strong direction for your product.

Time to get to work!

All done? Congratulations! You’ve now defined your MLP. Now you’re off to the races. Best of luck on the journey of building out your minimum loveable product.

Dec 22 2017
Dec 22

Designers mapping out a website.

Designers mapping out a website.

So your site isn’t working the way you want it to. Maybe it’s sluggish, or you’re not seeing the conversions you want, or customers are complaining. Before you drop a huge chunk of your budget on a complete rebuild, consider that there might be a simpler (and more affordable) solution to your website woes.

We see a lot of Drupal 7 and WordPress websites here at Kanopi Studios, and we often discover that it’s more cost-effective for our clients to simply update their sites rather than rebuilding them. Making targeted updates can allow you to focus on addressing a few key issues, while still leveraging the investment of time, energy and funds that went into your site’s foundation.

In this series, we’ll look at three key topics to consider:

1. How do you know when it’s time for a change?
2. Is your website optimally organized and designed to be user-friendly?
3. How strong is your technical foundation?

How do I know it’s time for a change?

Do any of these problems sound familiar?

  • Low conversion rates
  • Site pages take more than 3 seconds to load
  • Site doesn’t work well on mobile or other devices
  • Updating content is a difficult and frustrating process
  • Users struggle to find what they need on the site or have shared negative feedback
  • Site crashes when updating
  • Too many bugs
  • Building new features is difficult or may not even be possible
  • Site is not loading on https and triggers security warnings

If your answer to any of these is yes, it’s time to take action.

But first … is it really that important for me to address these issues?

Yes! A website that isn’t working optimally can dramatically affect your bottom line. An out-of-date or poorly designed website can:

  • Damage your credibility. If your website loads slowly, is crowded with clutter or is just plain not working, you are sending the message that your company is unprofessional.
  • Make you appear out of touch. A dated website tells your customers you are behind the technological times, or worse – you don’t care enough to stay up-to-date.
  • Cost you customers. Every customer who leaves your site in frustration due to broken links, complex forms, slow pages or confusing navigation is a customer you won’t get back. If your competitors offer similar services and have a stronger website experience, your loss will be their gain.

Decision time. If you want to avoid the damage that a dated website can cause, you’ll need to either rebuild your site or update it. If you’re ready to take action, we can help you find the best and most cost-effective approach.

There are two primary things to consider when maximizing your site’s ROI: your user’s needs and the technology that drives your site. If you can identify and fix problems in both of these categories, you can most likely avoid a costly rebuild.

Venn diagram showing optimum website health at the intersection of smart user experience and strong tech foundation.

Venn diagram showing optimum website health at the intersection of smart user experience and strong tech foundation.

Next, we’ll dive a bit deeper into tips to help you level up your user experience and update your website technology without starting over from scratch. Consider it the non-surgical, diagnostic approach to improving your website experience right where it needs it the most. 
Dec 22 2017
Dec 22

Now that you’ve decided that it’s time to take action to improve your website, It’s time to see if any user experience upgrades could help. Take a look through our list of issues below, and the tips to help resolve them.

Having a hard time converting leads or getting sales?

If you’re not sure why you’re not generating business from your website, it’s time to get serious about strategy. Here’s how:

  • Add a survey to your website to understand what users are looking for
  • Take a look at your analytics to understand where you are losing your users. If you don’t have analytics installed, get either Google Analytics or Tag Manager set up on your site.
  • Try an online user testing platform like Hotjar to help you go beyond standard analytics with heatmaps, visitor recordings, conversion funnels and more.
    Complete a User Experience & Conversion Optimization Audit with Kanopi Studios. We can make a whole range of insightful recommendations within your budget. Contact us to learn more.

Does your site take forever to load?

If it takes longer than three seconds, you have a problem.

  • Use Google PageSpeed or Pingdom to test your site’s speed, understand what might be slowing it down and take action to resolve any issues.
  • Make sure you have a reliable hosting company backing your site at the right level for the amount of traffic you receive.

Does your site work on mobile? Is it accessible?

It’s vital to make sure your site is accessible to everyone, no matter what device or screen size they are using. Here’s how to check:

  • Try using your site on a phone or a tablet. If you have to pinch or zoom to interact with the content, it’s time for a responsive design.
  • Make sure you can tab through all navigation and content on your site using only your keyboard, that all images have alt tags, and that you are able to use a voice browser to “read” your pages out loud. If not, you are missing key elements of accessibility.
  • Contact Kanopi Studios about an accessibility audit. We can help you identify the issues and build a plan for how to resolve them.

Is it frustrating – or impossible – to update content on your site?

If it’s a major undertaking to change even the simplest thing, something needs to happen.

  • Define your ideal workflow, then ask an expert to take a look and see how you can optimize the backend.
  • Consider the types of content that your site needs to support. Do you have templates in place that meet your needs? If not, it may be time to consider a bit of design and development time to build additional page types on your site.

Getting negative user feedback?

If the people visiting your site are taking the time to complain, chances are they might also take the time to help you make things better. Here’s how:

  • Collect feedback by sending out a survey, or document your customer service calls.
  • Always thank people for taking the time to help you improve.
  • Look for trends in the information you are receiving from users and build a plan to address any issues to help meet their needs

If none of the issues above apply, congratulations! Your user experience is likely more solid than many of the websites out there! But there are still more things to consider before committing to rebuilding your site. In our next post, we will walk you through a number of common technical issues and some helpful fixes for them.

Dec 22 2017
Dec 22

Website developers considering code.

Website developers considering code.

Now that you’ve considered your user experience, there are a number of possible technical fixes that might help resolve your website problems.

What version of Drupal or WordPress are you using?

  • WordPress 2, while old, may or may not require a rebuild. You might be able to get by with updating and refactoring.
  • If you’re using Drupal 7 or WordPress 3, a rebuild is likely not needed. 
  • However, if you are on Drupal 6, it is at the end of its life, which may make rebuilding more cost-effective and viable for the long term.

Does your site use a lot of custom code?

If so, what does that code do, and are you still using that functionality? Look for ways to streamline where possible.

Is your site’s code a nightmare?

Did you use a professional firm with a North American team? An offshore team? A freelance developer? Or an internal employee who no longer works at your company? It’s a good idea to get the code reviewed so that you can determine its quality and understand whether it will be easy to update or if you’d be better off starting from scratch. Contact Kanopi for a low-cost assessment.

Are you up to date with the latest security patches and updates?

Lapses can expose the site to hacks and backdoors. Often just updating your site and modules/plugins can solve many issues.

Want to learn more about how we can help you understand every aspect of your site and determine if you need to rebuild or update to help achieve your goals? Contact us to book a free 15-minute consultation. Click here to book a time.

May 24 2017
May 24

WordPress and Drupal

President of Mobomo, Ken Fang, recently sat down with Clutch for a Q and A about all things WordPress and Drupal.

What should people consider when choosing a CMS or a website platform?

They should probably consider ease of use. We like open-source because of the pricing, and pricing is another thing they should take into account. Finally, for us, a lot of it revolves around how popular that particular type of technology is. Being able to find developers or even content editors that are used to that technology or CMS is important.

Could you speak about what differentiates Drupal and WordPress from each other?

Both of them are open-source platforms, and they’re probably the most popular CMS’s out there. WordPress is probably the most popular, with Drupal running a close second. Drupal is more popular in our federal space. I think the main difference is that WordPress started off more as a blogging platform, so it was typically for smaller sites. Whereas Drupal was considered to be more enterprise-grade, and therefore a lot of the larger commercial clients and larger federal clients would go with Drupal implementation.

They’ve obviously both grown a lot over the years. We’re now finding that both of the platforms are pretty comparable. WordPress has built a lot of enterprise functionality, and Drupal has built in a lot more ease of use. They’re getting closer and closer together. We still see that main segregation, with WordPress being for smaller sites, easier to use, and then Drupal for more enterprise-grade.

Could you describe the ideal client for each platform? What type of client would you recommend each platform for?

Definitely on the federal side, Drupal is a much more popular platform. Federal and enterprise clients should move to the Drupal platform, especially if they have other systems they want to integrate with, or more complex workflow and capability. WordPress we see much more on the commercial side, smaller sites. The nice thing about WordPress is that it’s pretty quick to get up and running. It’s a lot easier for the end user because of its limited capability. If you want to get something up more cost-effectively, that’s pretty simple, WordPress is a good way to go.

Could you speak about the importance of technical coding knowledge when building a website on either platform, from a client’s perspective?

Most of these main CMS’s are actually built in PHP, and most of them have a technology stack that requires different skillsets. So, on the frontend side, both of them require theming. It’s not only knowing HTML, CSS, and JavaScript, but it’s also understanding how each of the content management systems incorporate that into a theme. You usually start off with a base theme, and then you customize it as each client wants. As such, you need either WordPress or Drupal themers to do that frontend work. For any backend development, you do need PHP developers. For Drupal, it’s called modules. There are open-source modules that people contribute that you can just use, you can customize them, or you can even build your own custom modules from scratch. For WordPress, they’re called plugins, but it’s a very similar process. You can incorporate a plugin, customize it, or write your own custom plugin.

In between all of this, because it is a content management framework and platform, there are site builders or site configurators. The nice part about that is that you can literally fire up a Drupal website and not have to know any PHP coding or whatever. If you’re just doing a plain vanilla website, you can get everything up and running through the administrative interface. A Drupal or WordPress site builder can basically do that, provided they are savvy with how the system actually works form an administration standpoint. So, those are the technical skills that we typically see, that clients would need to have. In many cases, we’ll build out a website and they’ll want to maintain it. They’ll need somebody in-house, at least a Drupal site builder or a themer, or something like that.

Do you have any terms or any codes that clients should be aware of or should know prior to trying to launch a project in Drupal or WordPress?

PHP is definitely the main language they should know, and then HTML, JavaScript, and CSS for the frontend stuff. Drupal 8 has some newer technologies. Twig is used for theming as an example, so there’s a set of technologies associated with Drupal 8 they need to know as well.

Is there a particular feature of WordPress or Drupal that impressed you and potential users should know about?

I’m going to lean a little more into the Drupal world because a lot of people are starting to move to Drupal 8, which was a big rewrite. There are now a lot of sites starting to use that in production. They did quite a bit of overhaul on it. It is more API-driven now. Everything you do in Drupal 8 can be published as a web service. You can even do a lot of what they call headless Drupal implementations. That means you can use some of the more sexy frameworks, like Angular or React, to build out more intricate frontends, and still use Drupal as a CMS, but really as a web service.

Are there any features of the two platforms that could be improved to make it a better CMS?

I think they’re pretty evolved CMS’s. On both of them, platforms are getting into place to build right on the CMS’s without having to install them. Platforms like Acquia, WordPress.com, Automaticc. These platforms are profitable because from an enterprise standpoint right now, it is hard doing multisite implementations at that scale, managing all of the architecture, and stuff like that. From a technical standpoint, if you get into an enterprise, clients who says they want to be able to run a thousand sites on a single platform, that becomes difficult to do from a technical perspective. They both have the ability to support multisite implementations, but advancements in there to make those types of implementations easier to use and deploy would be a significant advancement for both platforms.

What should companies and clients expect in terms of cost for setting up a website, maintaining it, and adding new features?

For a very basic site, where you’re just taking things off the shelf – implementing the site with a theme that’s already built, and using basic content – I would say a customer can get up and running anywhere from two to six weeks, $20,000-30,000. Typically, those implementations are for very small sites. We’ve seen implementations that have run into the millions, that are pretty complex. These are sites that receive millions of hits a day; they have award-winning user experience and design, custom theming, integration with a lot of backend systems, etc. Those can take anywhere from six to twelve months, and $500,000 to $1 million to get up and running.

Can you give some insight into SEO and security when building a website?

The nice thing about Drupal and WordPress is that there are a lot of modules and plugins that will manage that, from Google Analytics to HubSpot, all sort of SEO engines. You can pretty much plug and play those things. It doesn’t replace the need for your traditional content marketing, analyzing those results and then making sure your pages have the appropriate content and keywords driving traffic into them, or whatever funnel you want. All your analytic tools usually have some sort of module or plugin, whether it’s Google, Salesforce, Pardot, or whatever. A lot of those things are already pretty baked in. You can easily get it up and running. That’s the nice thing about the SEO portion of it.

The other nice thing about it being open-source is that there are constant updates on sort of security. Using these CMS systems, because they tie to all the open-source projects, if you download a module, anytime there’s a security update for it, you’ll get alerted within your administrative interface. It’s usually just a one-click installation to install that upgrade for security patches. That’s nice, as you’re literally talking hundreds of thousands of modules and millions of users. They’re usually found and patched pretty quickly. As long as you stay on that security patching cycle, you should be okay. You could still do stupid stuff as an administrator. You could leave the default password, and somebody could get in, so you still have to manage those things. From a software perspective, as long as you’re using highly-active, contributed modules and the core, security patches and findings come out pretty regularly on those things.

As a company, because we do stuff with some regulated industries like banking and federal agencies, we usually have to go a level above on security. Take a WordPress site or whatever, we would actually remove that form the public so it couldn’t be hit from outside of a VPN or internal network, and then have it publish out actual content and static pages so the outside just doesn’t even connect to the back-end system. That does take some custom programming and specialty to do. Most people just implement your regular website with the appropriate security controls, and it’s not a big issue.

Are there any additional aspects of building a website or dealing with a CMS that you’d like to mention? Or any other CMS platforms you’d like to give some insight on?

For us, because we are such a big mobile player, we typically would say that, whatever you build, your CMS, obviously focus on user experience. Most people are doing a good job of that these days. One of the areas that is still a little weak is this whole idea of a content syndication. There’s still a big push where the content editors build webpages, and they want to control the layout, pages, etc. They get measured by the number of visitors to the website and all that stuff. I’m not saying that’s not important; however, we’re trying to push an idea of a web service content syndication. So, how you use these CMS’s to do that, so your content gets syndicated worldwide. It doesn’t necessarily have to be measured by how many people hit your website. It should be measured by the number of impressions.

For instance, with the work we’ve done at NASA, they announced the TRAPPIST-1 discovery of potential Earth-like planets. That drove a huge amount of traffic to the website, probably close to nine million hits that day. If you look at the actual reach of that content and NASA’s message – through the CMS’s integration with social media, with API’s that other websites were taking, with Flickr, that sort of thing – it hit over 2.5 billion social media posts. That’s an important thing to measure. How are you using your content management system more as a content syndication platform, opposed to just building webpages? USGS has also done a really solid job of this ‘create once, publish everywhere’ philosophy. I think people should be looking at content management systems as content management systems, not as website management systems.

We ask that you rate Drupal and WordPress on a scale of 1 – 5, with 5 being the best score.

How would you rate them for their functionalities and available features?

Drupal – 5 – We have a bias towards Drupal because it’s more enterprise-grade. It fits what a lot of our clients need. I think they’ve come a long way with both the 7 and 8 versions and have really brought down the cost of implementation and improved the ease of use.

WordPress – 4 – I think it’s fantastic. It’s obviously extremely popular and very easy to set up and use. I give it a 4 and not a 5 because it’s not as easy to extend to enterprise-grade implementations. For some functionalities, you still have to dig into core, and nobody wants to be modifying core modules.

How would you rate them for ease of use and ease of implementation?

Drupal – 4.5 for ease of use, because it’s not as easy as WordPress, and 4.5 for ease of installation.WordPress – 5 for ease of use, and 4 for ease of implementation. If you want to go out of the box, it’s a little more difficult. Configuring multisite is a real difficulty in WordPress.

How would you rate them for support, as in the response of their team and the helpfulness of available online resources?

Drupal – 4

WordPress – 4

Being open-source projects, there are a ton of people contributing. They’re very active, so you usually can get your answers. In many cases, to get something embedded into core, it does have to get reviewed by the organization, which is a bunch of volunteers for the most part. Because of that, it does take a while for things to get embedded.

How likely are you to recommend each platform for a client?

Drupal – 5

WordPress – 5

I think they’re the strongest CMS’s out there for the price.

How likely are you to recommend each platform for a user to build their own DIY website?

Drupal – 3

WordPress – 4  

If you’re going to build your own website, and you have zero technical skills, you might want to look into a Weebly, Wix, or something like that. There is a need to know how to do site-building if you use Drupal or WordPress. Somebody has to configure it and understand it.

How would you rate your overall satisfaction collaborating with each platform?

Drupal – 5

WordPress – 5

We implement on both of them regularly, and they’re really great. They solve the need for a lot of our clients to migrate from much more expensive legacy systems.

Clutch.co interview: https://clutch.co/website-builders/expert-interview/interview-mobomo-dru...

Feb 09 2017
Feb 09

Not sure who's to blame, but we have a new HTML validation method from GoDaddy. It is an improvement from the "none HTML validation at all" phase they went through, but took me a while to make it work with apache. The problem was the dot/hidden directory they request to put your validation code in: /.well-known/pki-validation/godaddy.html

In my case there were a couple of reasons why this was difficult:

  • I didn't know about the hidden directory (.) block in Apache.
  • In my case some domains run the whole site over HTTPS, so I needed to make the new rules co-exist with the old HTTPS redirection rules.
  • I have a mixture of hostings. For some sites I control apache, so I could use Virtual Host configurations. But for others (like the ones running on Acquia) I need to create .htaccess rules.

The solution was much simpler than I anticipated, but quite difficult to debug. Finally I made it work for both environments.

I could have used the DNS ownership verification method, but in my case that means I would need to involve the people owning the domain. In my experience that takes longer and it can become really involved when owner doesn't know anything about DNS.

Using Virtual Host config (possible on self hosted sites)

RewriteEngine  on
RewriteRule    "^/\.well-known/pki-validation/godaddy\.html/" "/godaddycode.txt" [PT]
RewriteRule    "^/\.well-known/pki-validation/godaddy\.html$" "/godaddycode.txt" [PT]

If the site is only running on HTTPS and I have a redirection rule I'll work around these URLs. The rules below will work together with the one above:

RewriteCond %{REQUEST_URI} =!/.well-known/pki-validation/godaddy.html
RewriteCond %{REQUEST_URI} =!/.well-known/pki-validation/godaddy.html/
RewriteRule ^(.*)$ https://www.mydomain.com/ [R=permanent,L]

Using only .htaccess rules (and with no HTTPS redirection):

# GoDaddy verification rewrite rules
<IfModule mod_rewrite.c>
  RewriteRule    "^.well-known/pki-validation/godaddy.html/" "/godaddycode.txt" [PT,L]
  RewriteRule    "^.well-known/pki-validation/godaddy.html$" "/godaddycode.txt" [PT,L]

Using .htaccess rules when site is only running over HTTPS:

# GoDaddy with HTTPS redirection rules
<IfModule mod_rewrite.c>
  # GoDaddy PassThrough rules
  RewriteRule    "^.well-known/pki-validation/godaddy.html/" "/godaddycode.txt" [PT,L]
  RewriteRule    "^.well-known/pki-validation/godaddy.html$" "/godaddycode.txt" [PT,L]
  # Set "protossl" to "s" if we were accessed via https://.  This is used later
  # if you enable "www." stripping or enforcement, in order to ensure that
  # you don't bounce between http and https.
  RewriteRule ^ - [E=protossl]
  RewriteCond %{HTTPS} on
  RewriteRule ^ - [E=protossl:s]
  # Redirect HTTP to HTTPS
  RewriteCond %{HTTP:X-Forwarded-Proto} !=https
  RewriteCond %{REQUEST_URI} !=/godaddycode.txt
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

And to make this work on Acquia I had to borrow some rules from D8 .htaccess

So I replaced these sections/rules:

# Protect files and directories from prying eyes (D7)
<FilesMatch "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)(|~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig\.save)$">
  Order allow,deny

# Block access to "hidden" directories whose names begin with a period... (D7)
RewriteRule "(^|/)\." - [F]

With these D8 sections/rules:

# Protect files and directories from prying eyes (D8)
<FilesMatch "\.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock))$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$">
  <IfModule mod_authz_core.c>
    Require all denied
  <IfModule !mod_authz_core.c>
    Order allow,deny

# Block access to "hidden" directories whose names begin with a period... (D8)
RewriteRule "(^|/)\.(?!well-known)" - [F]

I hope this helps someone else. I know it took me some time to figure it out and couldn't find an specific blog post about it.

Note: Just to be super clear, you should put the code given by GoDaddy into a file called godaddycode.txt on your docroot directory.

Dec 13 2016
Dec 13
December 13th, 2016

WordPress is growing. It currently runs more than one quarter of all websites on the Internet, including Four Kitchens’ own website). I’ve been immersed in Drupal for the last five years or so, but I’m curious what is going on with WordPress and its community. And so I bought a ticket to WordCamp US, dusted off my WordPress skills (that I haven’t used in over a quinquennium), and drove to Philadelphia.

What is WordCamp US?

WordCamp US (WCUS) is a conference that focuses on everything WordPress. People from around the world attend—casual users to core developers— to participate, share ideas, and get to know each other.


The first thing that I noticed about WCUS is that WordPress has a huge umbrella—international travelers were plentiful, there were a lot of women, and there was a wide range of diversity. There was even a 10 year old boy in a hallway, face in his laptop, working on his WordPress blog for Minecraft.

The sessions were setup to be accessible to everyone. Each presenter’s slide deck had a space at the top for closed captioning that was done live at the event. And for those who couldn’t make it to the event, every session was recorded and live-streamed in real time.

Everyone was welcoming, questions were encouraged, and conversation flowed. I was upfront with everyone that I was a Drupal developer exploring a foreign land and I got a lot of good information about the WordPress ecosystem.

Comparing Modules and Plugins

Drupal and WordPress both share a love for being open source. Both communities strongly encourage contributing back to the project. But there is one place where Drupal and WordPress have very different opinions—paid modules and plugins.

Drupal modules generally provide building blocks for developers to use as they implement custom solutions for clients. In WordPress, this is sometimes the case, but usually WordPress plugins are complete solutions for a need. For example, to implement a custom intranet with user groups and a Facebook-style feed, a Drupal dev would install a few modules, build some views, and style the new theme elements—and that would all take time and expertise to put together. To accomplish the same thing on WordPress, a user (who doesn’t even have to be a developer) would simply install BuddyPress.org and fill out some administration choices.

I believe that because of this difference between modules and plugins, the WordPress community welcomes paid plugins. And just because they are paid doesn’t mean that they get to be proprietary. The expectation for paid plugins is that they still be open source and what you are paying for is a license for upgrades and support. A lot of the people who I talked to either have their own plugins that they sell as part of their own business or make generous use of paid plugins. Why not pay $100 for a full featured calendar plugin that saves you hours (or weeks) of work?

Looking Forward to WordPress

I enjoyed my trip to WCUS and exploring WordPress. It is a great community and I’m looking forward to continuing to explore it more. Right now I’m looking into development workflows, so if you have any advice, I’d love to hear it in the comments.

Recommended Posts

  • In this issue: Launching the new EW.com, MeteorJS; plus Sane Stack, Herp Derpsum, and switching to Sublime Text 3.
  • The Drupal community is self-reflective enough to see the flaws in the project and brave enough to reinvent itself.
  • Halloween is over, but have one last batch of _spoopy_ links to kill off your Friday. Here's what we've been talking about this week…
Randy Oest
Randy Oest

Randy Oest is an avid Star Trek fan, plays too many board games, and bought his mother an iPad so that he wouldn't have to fix her computer anymore.

May 12 2016
May 12


A content management system, or CMS, is a web application designed to make it easy for non-technical users to add, edit and manage a website. We use WordPress and Drupal the most for CMS development, but it is all dependent on our clients’ needs. Not only do content management systems help website users with content editing, they also take care of a lot of behind the scenes work.

Whenever it comes to developing a website from scratch, and for a client who wants to be able to manage the site after the launch it is important as a developer to find a tool that the client will be able to use. When we think about web development it’s always better for the client and for the company to find a good content management system or CMS, because it solves problems that you will never have to worry about from the UI of the backend to the front-end wanted features it solves a lot of issues upfront that you will not have to worry about later.  As a website evolves, it will never stay in the final version you delivered to your client, when we develop we need to always think to the site’s future.

WordPress is one of the most popular tools because it is very adaptable. The amount of plugins (solutions to your problems) are endless. Not only does it have great features but it has a friendly UI backend. All of the advantages mentioned lower the development time, which helps the client to lower their costs. In short, WordPress saves time and money! The most recent example is our very own website Mobomo.

Another resource for a CMS is Drupal. Drupal may be a little more difficult to develop with because it can handle bigger sites with much more data and a ton of users but this system is better for newspapers or government sites such as NASA. 

Each CMS will have their own advantages but our first priority is making it adaptable to the client’s needs.

Apr 18 2016
Apr 18

email symbol on row of colourful envelopesWhat would a website be if it couldn’t send emails, even if just for password resets? Running your own mail server is a huge hassle, so many developers instead use a third party service to send transactional emails like password resets, new user welcome messages, and order summaries. One of the most popular services, in part because of their generous free tier, is Mandrill, owned by MailChimp.

In case you might have missed the announcement, MailChimp is changing Mandrill to be an add-on to paid MailChimp accounts, thus eliminating the generous free tier. We’re big fans of MailChimp and use its mailing list service for our own announcements, (hey, why not join that list if you’re not already on subscribed?) but a full MailChimp account isn’t going to be for everybody. They’ve already shut out the ability for new subscriptions, but if you’re a PHP developer who does things like put off your taxes until the last minute (American customers have three extra days this year, but that’s today), you’re probably sweating the April 27th deadline.

Many people also know Mandrill by reputation and will need options in the future. For you, we’ve put together this list of viable transactional email alternatives with PHP and major PHP application support. Joomla! and MODX support SMTP integration natively, so you’ll just need the SMTP configuration options from your chosen provider. If you want to use a provider’s web API, see the PHP options below.

Cal Evans did an unscientific Twitter survey to see what options people were migrating to:

If you are moving off of @mandrillapp, what are you moving to?

— Cal Evans (@CalEvans) March 29, 2016


MailChimp’s announcement notes that SparkPost has agreed to take on existing Mandrill users and honor Mandrill’s pricing for them. Fortunately, SparkPost has PHP users covered: there is an official PHP API library. There is also a Drupal module, but unfortunately it seems to be 7.x only at this writing and is only a sandbox project—you’ll have to install it via git. Drupal 8 users should be able to use the official API library with Composer. WordPress developers are in more luck: there is an official WordPress plugin. SparkPost provides a guide for Magento devs using the SMTP Pro extension. SparkPost also has one of the most generous plans we’ve seend, with 100,000 free emails per month, though you can not exceed that limit without upgrading ahead of time.


A long time option for PHP users has been SendGrid. (Full disclosure: SendGrid has sponsored our php[tek] conference in the past, but is not a current sponsor.) They have an official PHP API, installable via Composer. While there is a 7.x-only Drupal module, SendGrid recommends Drupal users use the SMTP Authentication Support or Swift Mailer modules in its documentation. Both the officially-recommended modules support Drupal 8 at least in the development releases of each module. Magento is also supported through the SMTP Pro extension. WordPress devs can install the official plugin. SendGrid doesn’t list a free tier on their pricing page, their “Essentials” plan start at $9.95 for 40,000 emails per month.


Many devs I know have spoken highly of SendinBlue. They offer a WordPress plugin, (7.x only) Drupal module, and Magento extension. They also have an official PHP library. Their free tier is limited to 9,000 emails per month with no daily limits, however the messages will include SendinBlue branding.

Amazon SES

Amazon’s transactional email service is affordable but not as easy to install and configure for newbies. They have an official PHP library through the AWS PHP SDK. There is a third-party Drupal module for 7.x users. Similarly there’s an independent WordPress plugin. There is a USD 99 paid extension for Magento.


Mailjet offers a PHP API wrapper, a WordPress plugin, a 7.x-only Drupal plugin, a Joomla! extension, and a Magento plugin. The free tier is capped at 6,000 emails per month and 200 email per day. The first 30 days include a premium trial which allows users to explore segmentation, testing, and compare campaign performance.


Mailgun has a PHP SDK installable via Composer. There is also a WordPress plugin, a 7.x-only Drupal module,  and a Magento extension. The first 10,000 emails each month are free, after which you pay a tiered price based on monthly volume.


Postmark offers a PHP API library, installable via Composer and available on Packagist. There is also an official WordPress plugin. There is a community-supported Drupal module (you guessed it, 7.x only) and Magento extension. There are also many other community modules for PHP frameworks. If you sign up to try it, the first 25,000 emails are free. After that, you can buy credits to send emails starting at $1.50 per thousand emails.


Which of these services you use depends on your needs, price sensitivity, and how much specific support you want for your platform. If I’ve missed any services with good PHP support, please let us know in the comments!

Image Credit: RaHuL Rodriguez on Flickr

Oct 23 2015
Oct 23

One reason WordPress has been gaining exponentially on Drupal over the past few years has partly been because of the massive amount of premium themes and plugins available. Slick themes with easy admin UIs and plenty of options, they are mobile responsive and have slick JQuery/Ajax integration using some of the best plugins. Drupal simply does not have this industry that has grown up around WordPress theming. Though Drupal is catching up and there are plenty of themes available for now at least WordPress has won the hearts and minds of the majority, particularly those without much technical expertise and it has proved the clear winner for small businesses and those who really do not want to get their hands dirty.   Drupal 8 has done a lot to cater more to the end user but we will have to see how that plays out.

The dark of all these theming and plugin options  is separating the wheat from the chaff so to speak. This is also the case with the myriad of plugins available. While drupal.org, has a peer reviewal system similar to those of scientific journals which vets every piece of code before it makes it onto Drupal.org, WordPress does not have this, and finding trusted code is about as easy as navigating the wild west. There are plenty of good resources out there but it is easy to get lost in sea of for profit plugins and themes available out there, recently I have been helping out at Themeshift.com a different way to think about the theming marketplace. Rather than display every single theme that has ever been made and make the user sort through endless options, Themeshift has a few carefully selected and curated premium themes chosen by expert WordPress developers. I have been in the position where I was waiting on clients to choose a theme, and they spend hours wading through Google, when they eventually do settle on one they like they end up purchasing one or too more until they find something they actually want to use. Themeshift takes a different view with a “curated” approach. Here the developers behind the site have taken the time to develop and choose themes that are AAA and that fit a wide variety of needs. A developer curated theming website which provides exceptional support and it is easy to reach actual humans if you have questions. It is in effect a premium segment of the “premium WordPress theme” demographic. For those that want the best and don’t want to be dealing with agents who often experience communication or cultural issues. With teams based out of both NYC and Germany Themeshift caters to a high end cleintele of developers and end users who want to buy themes from individuals they know are available and are up to date with the latest technology and design trends. Check it out and let me know what you think of my new venture, all feedback is taken into consideration!

Oct 08 2015
Oct 08

Too many websites claim to be able to turn your website into a mobile app but not one of them deliver results as expected, the simple truth is you can’t automate the process, it will always leave something to be desired. Our software couple with custom implementation can turn your Drupal or WordPress website into a mobile feeling app. With native login functionality the user does not need to repeatedly login to the app giving the illusion of a 100% native mobile app from a website that lies behind a login.   After logging in once the user simply clicks the homescreen icon and will be taken to the authenticated/logged in website area. All viewed from within a native iOS or Android wrapper. Custom offline messages and native navigation can all be implemented out of the box with our software. The overall time to implement the basic service for your app is $3000, the source code is yours forever with no annual fees, and you publish directly from your developer account. This services service will get you better results than an automated do-it-yourself platform,and also authentication and login which platforms like Appresser can’t do. To convert a a website/webapp the one click homescreen icon app experience.  The API currently exists for Drupal 6 or Drupal 7 sites. App software is written in both native iOS (Objective C) and Android (Java) code.


Sign up using your email or Facebook SDK, the app communicates via REST to your website.

Choose to sign in with Facebook once and then sign in automatically by clicking your homescreen icon.


App gets added to homescreen and login via one click.

Preloader provides instant touch feedback for a native feel.


Custom offline message instead of web browser “page not found”.


Turn any responsive website into an app.

Jul 15 2015
Jul 15

Regardless of industry, staff size, and budget, many of today’s organizations have one thing in common: they’re demanding the best content management systems (CMS) to build their websites on. With requirement lists that can range from 10 to 100 features, an already short list of “best CMS options” shrinks even further once “user-friendly”, “rapidly-deployable”, and “cost-effective” are added to the list.

There is one CMS, though, that not only meets the core criteria of ease-of-use, reasonable pricing, and flexibility, but a long list of other valuable features, too: Drupal.

With Drupal, both developers and non-developer admins can deploy a long list of robust functionalities right out-of-the-box. This powerful, open source CMS allows for easy content creation and editing, as well as seamless integration with numerous 3rd party platforms (including social media and e-commerce). Drupal is highly scalable, cloud-friendly, and highly intuitive. Did we mention it’s effectively-priced, too?

In our “Why Drupal?” 3-part series, we’ll highlight some features (many which you know you need, and others which you may not have even considered) that make Drupal a clear front-runner in the CMS market.

For a personalized synopsis of how your organization’s site can be built on or migrated to Drupal with amazing results, grab a free ticket to Drupal GovCon 2015 where you can speak with one of our site migration experts for free, or contact us through our website.


SEO + Social Networking:

Unlike other content software, Drupal does not get in the way of SEO or social networking. By using a properly built theme–as well as add-on modules–a highly optimized site can be created. There are even modules that will provide an SEO checklist and monitor the site’s SEO performance. The Metatags module ensures continued support for the latest metatags used by various social networking sites when content is shared from Drupal.

SEO Search Engine Optimization, Ranking algorithm


Drupal Commerce is an excellent e-commerce platform that uses Drupal’s native information architecture features. One can easily add desired fields to products and orders without having to write any code. There are numerous add-on modules for reports, order workflows, shipping calculators, payment processors, and other commerce-based tools.



Drupal’s native search functionality is strong. There is also a Search API module that allows site managers to build custom search widgets with layered search capabilities. Additionally, there are modules that enable integration of third-party search engines, such as Google Search Appliance and Apache Solr.

Third-Party Integration:

Drupal not only allows for the integration of search engines, but a long list of other tools, too. The Feeds module allows Drupal to consume structured data (for example, .xml and .json) from various sources. The consumed content can be manipulated and presented just like content that is created natively in Drupal. Content can also be exposed through a RESTful API using the Services module. The format and structure of the exposed content is also highly configurable, and requires no programming.

Taxonomy + Tagging:

Taxonomy and tagging are core Drupal features. The ability to create categories (dubbed “vocabularies” by Drupal) and then create unlimited terms within that vocabulary is connected to the platform’s robust information architecture. To make taxonomy even easier, Drupal even provides a drag-n-drop interface to organize the terms into a hierarchy, if needed. Content managers are able to use vocabularies for various functions, eliminating the need to replicate efforts. For example, a vocabulary could be used for both content tagging and making complex drop-down lists and user groups, or even building a menu structure.



There are a few contributor modules that provide workflow functionality in Drupal. They all provide common functionality along with unique features for various use cases. The most popular options are Maestro and Workbench.


Drupal has a dedicated security team that is very quick to react to vulnerabilities that are found in Drupal core as well as contributed modules. If a security issue is found within a contrib module, the security team will notify the module maintainer and give them a deadline to fix it. If the module does not get fixed by the deadline, the security team will issue an advisory recommending that the module be disabled, and will also classify the module as unsupported.

Cloud, Scalability, and Performance:

Drupal’s architecture makes it incredibly “cloud friendly”. It is easy to create a Drupal site that can be setup to auto-scale (i.e., add more servers during peak traffic times and shut them down when not needed). Some modules integrate with cloud storage such as S3. Further, Drupal is built for caching. By default, Drupal caches content in the database for quick delivery; support for other caching mechanisms (such as Memcache) can be added to make the caching lightning fast.


Multi-Site Deployments:

Drupal is architected to allow for multiple sites to share a single codebase. This feature is built-in and, unlike WordPress, it does not require any cumbersome add-ons. This can be a tremendous benefit for customers who want to have multiple sites that share similar functionality. There are few–if any–limitations to a multi-site configuration. Each site can have its own modules and themes that are completely separate from the customer’s other sites.

Want to know other amazing functionalities that Drupal has to offer? Stay tuned for the final installment of our 3-part “Why Drupal?” series!

Apr 13 2015
Apr 13
The future of the web is inarguably mobile. Mobile use is clearly increasing as people spend more time on their phones, and the rate that people are using dedicated mobile apps rather than their mobile browser is also increasing. But with web services, mobile apps can integrate popular web-based content management systems and in the
Dec 17 2014
Dec 17

Taming Content coverThe final issues of 2014 is out!  Our theme this month in “Taming Content” with features on WordPress, Drupal, and ProcessWire. Also read about PHP tricks, Queues with Laravel, the SoundCloud API, and Community News!

Check out the full magazine details page for more details, Download the Advanced Custom Fields article for free to sample an article.

Oscar still remembers downloading an early version of the Apache HTTP server at the end of 1995, and promptly asking "Ok, what's this good for?" He started learning PHP in 2000 and hasn't stopped since. He's worked with Drupal, WordPress, Zend Framework, and bespoke PHP, to name a few. Follow him on Google+. Tags: , , , , , ,
Oct 12 2014
Oct 12

drupal-wordpress-ios-android copy

Too many websites claim to be able to turn your website into a mobile app but not one of them deliver results as expected, the simple truth is you can’t automate the process, it will always leave something to be desired. Our software couple with custom implementation can turn your Drupal or WordPress website into a mobile feeling app. With native login functionality the user does not need to repeatedly login to the app giving the illusion of a 100% native mobile app from a website that lies behind a login.   After logging in once the user simply clicks the homescreen icon and will be taken to the authenticated/logged in website area. All viewed from within a native iOS or Android wrapper. Custom offline messages and native navigation can all be implemented out of the box with our software. The overall time to implement the basic service for your app is $3000, the source code is yours forever with no annual fees, and you publish directly from your developer account. This services service will get you better results than an automated do-it-yourself platform,and also authentication and login which platforms like Appresser can’t do. To convert a a website/webapp the one click homescreen icon app experience.  The API currently exists for Drupal 6 or Drupal 7 sites. App software is written in both native iOS (Objective C) and Android (Java) code.

View sample apps Android, iOS

If you are a developer and want to try to do this for yourself or a client we can share some of our experience and code with you

Read about other more extensive options we offer for converting to a mobile app using REST


Sign up using your email or Facebook SDK, the app communicates via a REST API. Screenshot_2015-10-08-05-51-32

Choose to sign in with Facebook once and then sign in automatically by clicking your homescreen icon.


App gets added to homescreen and login via one click.

Preloader provides instant touch feedback for a native feel.


Custom offline message instead of web browser “page not found”.


Turn any responsive website into an app.

Aug 20 2014
Aug 20

We are excited to announce today the amazing keynote speakers that we have lined up for our php[world] conference this November. We’ve worked hard to find the best speakers and talks that cover the breadth of the PHP experience. We want php[world] to be a conference that pulls together all the different fragmented communities of PHP into one place to share ideas, and our keynotes reflect that mission.

We will have Luke Stokes, Co-Founder and CTO of FoxyCart, speaking on his experience of forming his own company. Angela Byron, a core committer to the Drupal Project and Director of Community Development at Acquia, is going to talk to us about the efforts Drupal has been making to break out of its own community and embrace libraries from other projects. Andrew Nacin, a WordPress Lead Developer, is going to share how WordPress built their automatic security updates and convinced their community of its benefits. Also, Jeffrey “Jam” McQuire, Open Source Evangelist at Acquia, will present how the Open Source Software revolution, with PHP leading the way, is making for better business, better government, and, he hopes, a better world!

Finally we are going to wrap up the conference with “The Greatest Panel on Earth.” We will have key people representing seven of the biggest PHP frameworks and applications: WordPress, Drupal, Magento, Joomla!, Symfony, Laravel, and Zend Framework all together in one place to answer all your most difficult questions!

Read on for full descriptions of all the keynotes, or you can visit our php[world] schedule or speaker list online. Register soon and book your hotel before our block sells out! We look forward to seeing you in D.C. this fall!

Turning Your Code Into a Company: The Parts They Don’t Tell You.

Somewhere around 2005 and 2006 my friend and I started tinkering around with building a better shopping cart experience because all the others sucked. Since 2007, we’ve processed over half a billion dollars worth of transactions and enabled thousands of online stores. It was really, really hard. This talk will tell the story of taking some code and persevering it into a company called FoxyCart. If you’ve ever wanted the liberty of being your own boss, hopefully you’ll find yourself in this story and determine if you have what it takes to succeed.

BIO: Luke Stokes is the Co-founder and CTO of FoxyCart.com. Enjoying Nashville, TN with his beautiful wife and three children, he’s passionate about living life on purpose. He’s pragmatic enough to get things done but idealistic enough to still believe we can change the world and make it better. He built his first websites in 1996 (yes, AOL and Geocities) and has been hacking at computers ever since. Always opinionated, he loves a good debate on liberty, Bitcoin, programming or anything interesting. He’s also a generally outgoing guy (for a programmer) and loves connecting with people.

Drupal 8: A Story of Growing Up and Getting Off the Island

The Drupal project has traditionally held a strong internal value for doing things “The Drupal Way.” As a result, Drupal developers have historically needed to build up reams and reams of tricks and workarounds that were specific to Drupal itself, and Drupal was inaccessible to people with a more traditional programming background.

Starting in Drupal 8, however, we’ve effectively done a ground-up rewrite of the underlying code and in the process made major inroads to getting more inline with the rest of the PHP world. Procedural code is out, OO code is in. “Creative” hacks have been replaced with FIG standards. “Not invented here” is now “Proudly found elsewhere.”

This story will talk about the journey that Drupal 8 and the Drupal core development team has taken during this transition over the past 3+ years, including some of the pros and cons of this approach and how we dealt (and are dealing) with some of the community management challenges that resulted.

BIO: Angela Byron is Drupal core committer and Director of Community Development at Acquia. She got her start as a Google Summer of Code student in 2005 and since then has completely immersed herself in the Drupal community. Her work includes reviewing and committing Drupal core patches, supporting community contributors, coordinating with the Drupal.org infrastructure team, and evangelizing Drupal. Angela is the lead author of O’Reilly’s first Drupal book, entitled Using Drupal. She is on the Board of Directors for the Drupal Association. Angie is known as “webchick” on drupal.org.

Idealism as code: From philosophy to empowerment

As part of the LAMP stack, PHP is a dominant web technology and it is getting more powerful all the time: Convergence through things like Composer and the PSR standards is bringing once disparate communities together. Multiple “meta projects” like Drupal are adopting code from around the PHP and FOSS spheres. Contribution to one has become contribution to whole ecosystems.

Many of us are idealists. Powering 80% of the web, we have the chance – and perhaps the responsibility – to make a difference through PHP. Paraphrasing Angie “Webchick” Byron, Drupal core committer, “We make really abstract complicated programming concepts accessible to non-developers, available to them by clicking a few buttons, without having to understand all the code that comes underneath it. What I get really excited about is the idea that we create really easily accessible things to help those people who are on the front lines trying to make the world a better place. We can build technology to enable that.”

I will talk about how the thinking of RSM and other pioneers became code and how that code is empowering people and organisations. I want to draw a few lines from the very definition of free and open source software, through its practical application and native advantages, to how it helps people do better business, better government … and I’m hoping … make a better world.

BIO: Jeffrey A. “jam” McGuire, Open Source Evangelist at Acquia, is involved at the intersection of open source software, business, and culture. A memorable and charismatic communicator, he receives enthusiastic responses from audiences at events around the world, where he talks about open source technology and community, digital disruption, Drupal and more. This helps satisfy his inner diva, which he also feeds with performances as a storyteller and musician.

Trust, Community, and Automatic Updates

In October 2013, WordPress shipped what is perhaps its most polarizing feature ever — automatic updates in the background of self-hosted web software, on by default and no easy way to turn it off. In most open source communities, this would be cause for open revolt. Learn how through trust, communication, and a steadfast commitment to its philosophies, the WordPress core team convinced a skeptical community to go along, even if it meant users giving up some control.

BIO: Andrew Nacin is a lead developer of WordPress, wrangling contributions, spearheading initiatives, advising new development, and squashing bugs. He feels strongly about the core philosophies of WordPress, among them “decisions, not options” — software should be opinionated in lieu of burdening the user with too many options. He works for WordPress founder Matt Mullenweg at Audrey Capital, where he is primarily tasked with working on WordPress core and keeping the lights on at WordPress.org. He resides in downtown Washington, D.C., with his wife.

The Greatest Panel on Earth

Join us for our closing keynote! Have you ever wanted to ask the various framework and application developers questions? Want to see each of their different points of view (and maybe get them to debate a few hot topics)? This is your chance. We are gathering a panel of core developers from WordPress, Drupal, Magento, Joomla!, Symfony, Laravel, and Zend Framework. They’ll be ready to have a discussion and answer your questions.

About the author—Eli has been a PHP coder since the day PHP 4 was released. He's worked for numerous companies in the past, such as Digg.com, Zend Technologies, TripAdvisor, mojoLive, and Goodsie. Though found himself in love with the PHP community so deeply that he ended up here at php[architect], and loves what he does. Conferences, magazine, books, training - Teaching people the love for the language that he himself has.

Jul 15 2014
Jul 15

Migrate Drupal 7 to WordPress 3.9  - To recap, in a previous post on this series, I’ve set the background for my action to migrate  from Drupal 7 to WordPress 3.9. In this post, we will explore the process of making this migration happen.

If you’ve been on this search before to migrate from Drupal to WordPress, then you’ve realized that there aren’t a lot of resources, and that you may have some preferences in regards to the migration process. Some solutions that popped required to have both instances of Drupal and WordPress up and running for some reason, but that didn’t fit my requirements as I wanted to use the same domain and not needing to setup another one just for the migration process. Other solutions are of course professional support services which will perform the migration for you, but you’d have to say goodbye to a few hundred dollars to begin with (prices range from $750 to $3500 for a website migration)

Finding Drupal2Worpdress provided me a good start to get things rolling. As with most things on Github for me, I usually begin by forking a repository and Drupal2Wordpress was no exception. Quickly after I reviewed the code in the original repository I found out that the script is very small and focused, without requiring any special dependencies or extra configuration which was my primary goal – finding the most simple solution as possible. Now I’m ready to take a stub at it.

My Video Course - Step by Step Drupal 7 to WordPress 3.9 Migration

I created a Video course on Udemy.com to teach you the skills of migrating Drupal 7 to WordPress 3.9.

I’d appreciate if you leave a review after taking the quick course

Step-by-Step Drupal 7 to WordPress 3.9 Migration Learn how to migrate your content, users, and more from a Drupal 7 website to WordPress 3.9. By the end of this course, you will be able to migrate any Drupal 7 website to a WordPress 3.9 installation. Moreover, you will have an overall understanding of the differences between Drupal and WordPress table schema to estimate the migrated content scope. Includes a step-by-step video tutorial of how to migrate a Drupal website to WordPress. Includes a review of Drupal and WordPress database schema to understand migration effort and complexity. Enrich your skill-set with this knowledge and extend your WordPress consultancy reach

Step-by-Step Drupal 7 to WordPress 3.9 Migration Learn how to migrate your content, users, and more from a Drupal 7 website to WordPress 3.9.


Getting to Business with Drupal2Wordpress

Drupal2Wordpress is essentially very simple. It only requires to edit the PHP code at the beginning, and set the connection information correctly for both WordPress and Drupal database. That already implies on the characteristics of this migration tool – it expects that both instances of Drupal and WordPress are available through a database connection and since this tool has to be accessible and run on the hosting account service  and be triggered from the web or from a cron job (because hosting accounts do not open their database servers to the public).

Some of my fixes to this tool began with importing any content type from Drupal, yet making sure they are imported into WordPress as eligble posts content type (as opposed to pages for example, which aren’t blog related). URL aliasing has also been fixed so that imported posts in the new WordPress install are just working good, as well as another fix to migrate only approved comments. New additions to the tool included the support for migrating users, and adding a default ‘Blog’ category on WordPress and relating all posts to it (as otherwise they are not displayed).

The tool has been tested and it only requires to get a fresh installation of WordPress 3.9 to migrate any Drupal 7 site to it. You’re welcome to fork out the repository or test it and comment so we can further improve upon it.

Drupal2Wordpress – the Github repository.

Series Navigation<< Migrate Drupal 7 to WordPress 3.9 – The Kickoff
Jul 09 2014
Jul 09

The setting

With no specific reason, or maybe with regards to the strong editing capabilities of WordPress out of the box, I wanted to opt out of Drupal as my blogging platform for enginx.com. Even though I’m a seasoned Drupal developer, even authored a book on Drupal 7 Media, and presented the topic on a local Drupal conference, I decided to migrate Drupal 7 to WordPress. Drupal is suitable for many web applications, although it does require quite an effort to maintain and setup in order to fit it to your needs, while with WordPress most of the blogging capabilities are available out of the box with almost no hassle, and for a good reason – WordPress was primarily developed as a blogging platform.

My Video Course – Step by Step Drupal 7 to WordPress 3.9 Migration

I created a Video course on Udemy.com to teach you the skills of migrating Drupal 7 to WordPress 3.9.

I’d appreciate if you leave a review after taking the quick course

Step-by-Step Drupal 7 to WordPress 3.9 Migration Learn how to migrate your content, users, and more from a Drupal 7 website to WordPress 3.9. By the end of this course, you will be able to migrate any Drupal 7 website to a WordPress 3.9 installation. Moreover, you will have an overall understanding of the differences between Drupal and WordPress table schema to estimate the migrated content scope. Includes a step-by-step video tutorial of how to migrate a Drupal website to WordPress. Includes a review of Drupal and WordPress database schema to understand migration effort and complexity. Enrich your skill-set with this knowledge and extend your WordPress consultancy reach

Step-by-Step Drupal 7 to WordPress 3.9 Migration Learn how to migrate your content, users, and more from a Drupal 7 website to WordPress 3.9.

The Journey

So, off I go on my journey to locate an easy process for migrating my content from Drupal 7 to WordPress 3.9 (versions are critical) and the conclusion is quickly made apparent that while there are handful of procedures, modules and guides on converting from WordPress to Drupal, the opposite flow is quite an uncharted area. This is understandable, given that Drupal is a lot more complex in terms of content structure variety as well as having more of a framework nature than a simple blogging platform, but still, I was pretty sure I’m not the only one.

Researching the migration process it yielded a Drupal2Wordpress Github repository which featured a minimal, yet effective, PHP script which claims to do the job. Unlike other solutions that I found, the migration script doesn’t require an actual live instance of both sites up (the old Drupal site, and the new WordPress site), but simply requires to be configured with the database connection details for both platforms and be uploaded to the hosting account which hosts both. Without further adieu, I jumped on to the task, and as with most things open source (and unpopular or unmaintained) – things aren’t quite working out of the box and require further development effort to fine-tune and create a solid migration.

In a follow-up post I will share more details on the process of performing the actual migration to WordPress3.9, stay tuned!

Series NavigationMigrate Drupal 7 to WordPress 3.9 – The Conclusion >>
Dec 12 2013
Dec 12

I cringe every time I hear someone mention ShareThis. When optimizing a site, it becomes a nightmare to speed up; a paranoids worst fear with all the third-party calls it makes — and a blackhole for sercuity experts tracking down the seemingly ever-changing external scripts it loads.

ShareThis Third-Party Resources

In the process of implementing a CSP, I was shocked to find the total number of resources ShareThis calls. At the time of writing this, I counted a total of 39 domains and subdomains it the ShareThis plugin was calling:

  1. http://w.sharethis.com (JavaScript, Image)
  2. http://wd-edge.sharethis.com (JavaScript)
  3. http://wd.sharethis.com (JavaScript)
  4. http://w.sharethis.com (CSS)
  5. http://l.sharethis.com (Image)
  6. http://adadvisor.net (Image)
  7. http://bcp.crwdcntrl.net (Image)
  8. http://rc.rlcdn.com (JavaScript)
  9. http://d.agkn.com (JavaScript)
  10. http://secure-us.imrworldwide.com (JavaScript)
  11. http://log.dmtry.com (JavaScript)
  12. http://match.adsrvr.org (JavaScript)
  13. http://www.wtp101.com (JavaScript)
  14. http://www.adadvisor.net (Image)
  15. http://p.brilig.com (Image)
  16. http://e.nexac.com (Image)
  17. http://su.addthis.com (Image)
  18. http://rtd.tubemogul.com (Image)
  19. http://d.p-td.com (Image)
  20. http://ds.reson8.com (Image)
  21. http://loadus.exelator.com (Image)
  22. http://dp2.33across.com (Image)
  23. http://p.nexac.com (Image)
  24. http://p.raasnet.com (Image)
  25. http://p.rfihub.com (Image)
  26. http://i.w55c.net (Image)
  27. http://loadm.exelator.com (Image)
  28. http://a.triggit.com (Image)
  29. http://sync.mathtag.com (Image)
  30. http://r.casalemedia.com (Image)
  31. http://dpm.demdex.net (Image)
  32. http://idsync.rlcdn.com (Image)
  33. http://load.s3.amazonaws.com (Image)
  34. http://d.xp1.ru4.com (Image)
  35. http://segments.adap.tv (Image)
  36. http://dm.de.mookie1.com (Image)
  37. http://ib.adnxs.com (Image)
  38. http://tags.bluekai.com (Image)
  39. http://sync.tidaltv.com (Image)

Nuts, huh?! Not a big surprise anymore why ShareThis was causing my slow page load times. From what I found, the majority of the calls are for ad and user habit tracking pixels. No wonder their a free service, their probably getting paid big bucks from companies to track what you’re doing. Though, I understand they need to connect to the various social network APIs to grab numbers, I don’t think they need to add tracking pixels for advertisements and user habits.

An example is adadvisor.net and crwdcntrl.net. Their domains used by Targus Info and Lotame which is an advertising company that is part of a network of sites, cookies, and other technologies used to track you, what you do and what you click on, as you go from site to site, surfing the Web. Over time, sites like adadvisor.net and crwdcntrl.net can help make an online profile of you usually including the sites you visit, your searches, purchases, and other behavior. Your profile can then be exchanged and sold between various companies as well as being sold to other advertisers and marketers.

Alternatives to ShareThis

After finding out everything ShareThis is doing, it was time to find some alternatives. Here’s some I’ve found that seem to be less resource intensive—though may still load ad and user habit tracking pixels, not nearly as many as ShareThis:

WordPress Plugins

If you prefer a more plug-and-play options, here’s some pretty good WordPress plugins and Drupal modules for social sharing.

1. Flare

Flare is a simple yet eye-catching social sharing bar that gets you followed and lets your content get shared via posts, pages, and media types.


2. Social Count Plus

Display the counting data of Twitter, Facebook, YouTube, Instagram, Steam Community, SoundCloud posts and comments.

Social Count Plus

3. Dig Dig

Your all in one share buttons plugin. Add a floating bar with share buttons to your blog. Just like Mashable!

Dig Dig

4. AddThis

AddThis Share Buttons help drive traffic to your site by helping visitors share, bookmark and email your content to over 330 services.


5. Shareaholic

Adds an attractive social bookmarking menu and related content widget to your posts, pages, index, or any combination of the three.


Drupal Modules

1. Social media

The social media module helps integrate your website with social media sites such as Twitter, Facebook and Google+. It provides an centralized way of managing social media profile information and plug-in widgets such as follow and share buttons.

Social Media

2. Easy Social

Centered in a single place, you don’t need to worry in including external javascript libraries, and enabling several social modules.

Easy Social

3. AddToAny

This module helpers your readers and subscribers share, email and bookmark your articles and pages using the popular services such as Facebook, Twitter, Pinterest and over 100 more.


4. AddThis

This is the #1 bookmarking and sharing button on the net. Simple and easy to use button that’s used by 14 million websites worldwide and reaching 1.3 billion people worldwide per month.


5. Service links

Service Links facilitates the adding of social networks links or javascript buttons within the content with a special focus on developers and themers interested to extend their number or customize their displaying. Built on Drupal for Drupal doesn’t include commercial advertising or spying hidden code and doesn’t require third part libraries.

Service links

Like this:

Like Loading...

Author: Ben Marshall

Red Bull Addict, Self-Proclaimed Grill Master, Entrepreneur, Workaholic, Front End Engineer, SEO/SM Strategist, Web Developer, Blogger

Sep 22 2013
Sep 22

Drupal LogoSorry Drupal, but it’s time we broke up. I’d like to say it’s not you, it’s me, but that would be lying. I’ve left you for the warm, comfortable, welcoming embrace of WordPress.

This blog has been running on Drupal since January 2007. I started it out on Drupal 5, and systematically upgraded through versions 6 and 7. As a content management system, I was intrigued by the possibility of having different content types on one site and theming them as I saw fit with a combination of Views and CSS.

At the time, I genuinely felt that Drupal was an up-and-coming content management system. Its modularity seemed to have infinite possibilities and appealed to the site builder in me. However, over time the flaws in the system started to become apparent. Here are a few things that left me cold:

  • Third party modules: With each major new version of Drupal, it would take an age for many of the popular third party modules to be updated. The lag in this department made it difficult to keep the core CMS up-to-date, which was massively frustrating. And don’t get me started on some of the modules whose developers simply abandoned, leaving many users high and dry.
  • No default WYSIWYG editor: Coming from WordPress, this always struck me as a strange decision. Drupal didn’t come bundled with a default WYSIWYG editor, the logic being that it would remain interoperable with as many as possible to give users a wider range of choices. Fair enough, but WordPress manages to use a standard editor that supports keyboard shortcuts and customisation and means that a WordPress interface is familiar and comfortable no matter what site you’re working on.
  • No built-in media management: This may have changed with Drupal 8, I can’t say for sure. But Drupal – when I first installed it – had no support for image uploads or any media management whatsoever. In WordPress, you can hit the media library and reuse images you’ve already uploaded. You can easily edit meta data and insert content according to your needs. And they make it incredibly easy to embed YouTube videos – just paste in the URL and it’ll handle the conversion process.
  • Writing became a chore: If you look at the content I’ve posted on this blog, you’ll see that I’ve posted very little in the last couple of years. One of the main reasons for this is that publishing with Drupal is an awful experience. For a start, you spend more time tinkering with the build than actually creating content. The issues like media management, difficulty of inserting media into posts and formatting your content are just too time consuming. Whereas, with WordPress, I can fire up the editor and be drafting away, dropping in images and videos, having my content autosaved and using the pre-existing taxonomies, etc. It’s just seamless and the CMS doesn’t get in the way of writing in the same way that Drupal does.

Oh, and I can even see a word count as I type.

Look, this isn’t meant to bash Drupal. It’s a fine system, and there are some remarkable, dedicated people behind it. But it’s just too clunky for me. And I have different objectives now and much less time to spend fiddling with a CMS. But I’m still boggled by some of the decisions that have gone into that system – they’ve tried too hard to keep it open and like the LEGO kit of content management systems. Fine if you like tinkering, but not conducive to writing good content.

WordPress logoIn order to migrate to WordPress, I grabbed my Drupal 7 database and dumped it onto my MacBook’s local MAMP server. After a couple of attempts, I was able to migrate the data across to WordPress. There was a little bit of data ‘massaging’ required to get everything just right, but the process actually went rather well. I’d hate to have to migrate a larger site though!

Once I’d tidied up the data using WordPress locally, I exported the data as WXR and imported it into a multisite WordPress install I keep for my older/abandoned websites. I’ve re-uploaded all my image data, and also redirected the links to my most popular posts. Everything’s working beautifully, and the site immediately benefitted from the caching the multisite install of W3 Total Cache offers.

I feel like I can finally start writing on this blog again. I’ve had ideas for articles I’ve wanted to share here for a long time, so you may be seeing more things appear here in the next few weeks. For the moment, I’m running with the stock Twenty Thirteen theme, which is nicely mobile optimised, but maybe I’ll do some theme development of my own soon.

It’s also highly possible that I’ll migrate a few other sites across to WordPress from Drupal.


Drupal LogoAfter a seriously long wait, Drupal 6 has been released to the web. By coincidence, I checked for it yesterday, as I’ve been watching the Drupal site for a while. I’ve done a quick upgrade (made a major screw-up along the way), and upgraded some modules.

All in all, this site isn’t too heavy on contributed modules. I don’t even use pathauto here, so upgrading was relatively straightforward.

My big screw-up was that I put the site into maintenance mode to prepare for the upgrade. Then I logged out to verify that maintenance mode had worked. Big mistake. When the site’s in maintenance mode, there’s no obvious way to log back in as the admin.

Thankfully, a quick search reveals that by accessing yoursite.com/user, you can log in again. Phew!

Anyway, my big test at the moment is to confirm if Windows Live Writer and Drupal 6 will work together. This post has been drafted in Live Writer, so I’m intrigued to see what happens when I hit that post button…

Update: Someone has sponsored a port of the Drupal 5 blog API across to Drupal 6. It’s now available as a module to download. I’ve just tested it against this blog and it works perfectly.


Drupal 7 image

Oh, hello! If you’re reading this, it’s the first entry I’ve posted to my blog since upgrading the site to Drupal 7!

A major version upgrade like this isn’t something to be taken lightly. I’ve had to drop certain modules along the way and make a full backup of my site’s database and files. There’s a certain kind of anxiety one experiences when doing a major version Drupal upgrade, so I thought I would share my upgrade process with others. Other Drupal users are invited to share their experience and tips on upgrading at the end of the post!

So you want to upgrade to Drupal 7? Well, here’s how I went about it:

1. Inventory your third party modules

Take stock of third party modules in use on your site. In its Drupal 6 incarnation, I was using CCK, Administration Menu, Boost, Date/Time (Date popup), Geshi Filter, ImageFieldl Assist, ImageAPI/ImageCache, Backup/Migrate, Feedburner, Global Redirect, IMCE, Integrated Metatags, Mollom, Pathauto, Read More Link, Scheduler, Site Verification, Token, Anti Spam, Google Analytics, Views, jQuery UI, WYSIWYG, XML Sitemaps.

A bit of preparation work will save you time in the long run: CCK is largely integrated into Drupal core now, so there’s no need to install it for Drupal 7. The Feedburner module seems to be dead in the water. Integrated Metatags has been replaced with the Drupal Metatag module. The list goes on. You need to check this sort of thing out in advance, because if there’s a critical module on your site that hasn’t been ported to Drupal 7 yet, it’s a bit of a deal breaker. Lesson? Do your prep work!

2. Backup your database

I used the Backup/Migrate Module to backup my site’s database and downloaded it to my hard drive. Worth mentioning that at this point you should consider the site frozen and not be adding any new content or files to it.

3. Backup your CMS files

I also take a full backup of the entire Drupal installation at this point. You can either FTP your files locally, sync them over SSH with the rsync command or just zip up the entire Drupal installation and download the tar.gz file.

I literally tarred up my entire Drupal root and downloaded the tarball, which left me with a reliable database and directory structure in case the upgrade was a disaster and I had to roll back.

4. Maintenance mode

Right, it’s time to start making changes, so pop your site into maintenance mode so that visitors know the site is temporarily unavailable.

5. Disable third party modules and themes

At this point, you want to disable all third party themes and set your theme to one of the Drupal defaults like Garland. This reduces the risk of upgrade problems associated with third party code and brings your site back to a basic Drupal install.

6. Remove the old Drupal installation

Next, I create a subfolder under my ‘sites’ directory and move all the Drupal 6 themes and third party modules from sites/*/modules in there. The D6 versions will be incompatible with Drupal 7 anyway, but these serve as a reminder of which modules need to be reinstalled at the end of the upgrade process.

Once I’ve done this, I create a folder in the site root and move the old Drupal installation in there. This is pretty much everything except the ‘site’ and ‘files’ folders, which contain the bulk of the user-generated content. Again, this is mostly a convenient failsafe in case we need to roll back, and it also ensures a clean Drupal 7 installation. It would be incredibly messy to just overwrite the old Drupal 6 with the new files.

7. Download and unpack Drupal 7 files

Download and unpackage the Drupal 7 files. Whatever your preferred method – FTP the files up to your host, which. An be slow, or my favourite technique: using SSH and downloading and extracting the tarball.

wget http://ftp.drupal.org/files/projects/drupal-7.10.tar.gz
tar xfz drupal-7.10.tar.gz
cd drupal-7.10/
cp –rpf * ../
rm -rf ./drupal-7.10/
rm -f drupal-7.10.tar.gz

The above procedure downloads the latest version of Drupal (7.10 at the time of writing this), extracts it to a subfolder in my web root. I then jump into the Drupal-7.10 directory and copy all the files to the web root. The last two commands are simply cleanup to remove the archive and extracted files.

8. Begin the upgrade process

With all your Drupal 7 files in place, it’s time to visit your site and begin the upgrade process. I found by hitting the homepage, it automatically threw an alert about the ‘existing Drupal site’ and gave a link to run the upgrade script.

However, if there are any lingering issues that need addressed before you can upgrade, you’ll see a diagnostic page detailing what needs fixed before you can continue. Once the upgrade is finished you should be able to see your site content. Breathe a sigh of relief that you’ve got this far and haven’t lost your content!

9. Reinstall and update modules

Now begins the laborious process of downloading, enabling and upgrading the third party modules. I found drush to be essential here. I’d download one or two modules at a time, enable them and then run any attendant database updates. It’s as easy as this (probably easier if you’re a Drush ninja!):

drush dl token pathauto
drush en token pathauto
drush updatedb

I worked through my list of D6 modules and installed the Drupal 7 equivalents. I found that installing the Drupal 7 version of a module meant running database updates, which is why the updatedb command is included here.

It’s probably a good idea to check the functionality of each module as you go along to ensure it’s working as expected and that there aren’t any new settings that require your attention. Also worth checking your Drupal error log and status reports in case you need to address any compatibility issues.

10. Install a Drupal 7 compatible theme

Before I began the upgrade process, I gave my Gerrybot theme a complete overhaul to work with Drupal 7. It’s not quite ready for public use yet – there are a few things I need to tidy up – but I’m hoping to release a version of the theme for other Drupal users shortly.

Hint: If there are any Drupal theming folks who would like to help tidy up the code for public use, please get in touch with me!

Over to you…

So, that’s my Drupal 7 upgrade process. Hopefully others will find it helpful, and hopefully other Drupal experts will take advantage of the comments area to talk about their own process for upgrading from Drupal 6 to 7. If there’s a more streamlined method, I’d certainly love to hear it!

Feb 22 2013
Feb 22

Simplifying Wordpress and Drupal configurationAt last year's Drupalcon in Denver there was an excellent session called Delivering Drupal.  It had to do with the oftentimes painful process of deploying a website to web servers.  This was a huge deep dive session that went into the vast underbelly of devops and production server deployment.  There were a ton of great nuggets and I recommend watching the session recording for serious web developers.

The most effective takeway for me was the manipulation of the settings files for your Drupal site, which was only briefly covered but not demonstrated.  The seed of this idea that Sam Boyer presented got me wondering about how to streamline my site deployment with Git.  I was using Git for my Drupal sites, but not effectively for easy site deployment.  Here are the details of what I changed with new sites that I build.  This can be applied to Wordpress as well, which I'll demonstrate after Drupal.

Why would I want to do this?

When you push your site to production you won't have to update a database connection string after the first time.  When you develop locally you won't have to update database connections, either.

Streamlining settings files in Drupal

Drupal has the following settings file for your site:


This becomes a read only file when your site is set up and is difficult to edit.  It's a pain editing it to run a local site for development.  Not to mention if you include it in your git repository, it's flagged as modified when you change it locally.

Instead, let's go ahead and create two new files:


Add the following to your .gitignore file in the site root:


This will put settings.php and settings.production.php under version control, while your local settings.local.php file is not.  With this in place, remove the $databases array from settings.php.  At the bottom of settings.php, insert the following:

$settingsDirectory = dirname(__FILE__) . '/';
if(file_exists($settingsDirectory . 'settings.local.php')){
    require_once($settingsDirectory . 'settings.local.php');
    require_once($settingsDirectory . 'settings.production.php');

This code tells Drupal to include the local settings file if it exists, and if it doesn't it will include the production settings file.  Since settings.local.php is not in Git, when you push your code to production you won't have to mess with the settings file at all.  Your next step is to populate the settings.local.php and settings.production.php files with your database configuration.  Here's my settings.local.php with database credentials obscured.  The production file looks identical but with the production database server defined:

    $databases['default']['default'] = array(
      'driver' => 'mysql',
      'database' => 'drupal_site_db',
      'username' => 'db_user',
      'password' => 'db_user_password',
      'host' => 'localhost',
      'prefix' => '',

Streamlining settings files in Wordpress

Wordpress has a similar process to Drupal, but the settings files are a bit different.  The config file for Wordpress is the following in site root:


Go ahead and create two new files:


Add the following to your .gitinore file in the site root:


This will make it so wp-config.php and wp-config.production.php are under version control when you create your Git repository, but wp-config.local.php is not.  The local config will not be present when you push your site to production.  Next, open the Wordpress wp-config.php and remove the defined DB_NAME, DB_USER, DB_PASSWORD, DB_HOST, DB_CHARSET, and DB_COLLATE variables.  Insert the following in their place:

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') ) {
    define('ABSPATH', dirname(__FILE__) . '/');
if(file_exists(ABSPATH  . 'wp-config.local.php')){
    require_once(ABSPATH  . 'wp-config.local.php');
    require_once(ABSPATH . 'wp-config.production.php');

This code tells Wordpress to include the local settings file if it exists, and if it doesn't it will include the production settings file. Your next step is to populate the wp-config.local.php and wp-config.production.php files with your database configuration.  Here's my wp-config.local.php with database credentials obscured.  The production file looks identical but with the production database server defined:

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'db_name');
/** MySQL database username */
define('DB_USER', 'db_user');
/** MySQL database password */
define('DB_PASSWORD', 'db_user_password');
/** MySQL hostname */
define('DB_HOST', 'localhost');
/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

What's next?

Now that you're all set up to deploy easily to production with Git and Wordpress or Drupal, the next step is to actually get your database updated from local to production.  This is a topic for another post, but I've created my own set of Unix shell scripts to simplify this task greatly.  If you're ambitious, go grab my MySQL Loaders scripts that I've put on Github.

Nov 29 2012
Nov 29

Last Monday 200 plus of the brightest minds in search marketing from Texas and across the country got together for the annual State of Search Conference. A lot of topics were covered. But one was missing that should concern every Drupaler. Drupal was missing, totally and completely.

The day kicked off with the always entertaining and insightful Chris Brogan. The best-selling author and top 5 AdAge blogger was hitting the highlights of his latest book, The Impact Equation; currently the #1 book on Amazon for web marketing. He was espousing how you need to build your home base, e.g. your own website. His recommendation: "WordPress is the best tool for this." Note he was not talking about just a blog, but a CMS for your whole website.

The second session I attended was titled Link Building, but really turned into a discussion about content strategies - then using that content to build links. Several tools were mentioned to facilitate the process - all WordPress plug-ins.

This theme continued all day long. In five of the six session I attended, WordPress got promoted as the weapon of choice for content strategy and online marketing. (The sixth session was about YouTube) Even in the closing keynote from Bing Webmaster Tools evangelist Duane Forester, WordPress got shout outs. From a Microsoft guy? Really?

How many times was Drupal mentioned? Not once all day.

Pish Posh; Marketers

Now it might be easy to blow off this demographic. After all, us Drupaler's; we are developers. We are engineers doing real work and heavy lifting. We are building big, complex sites for some very important people.

But the marketers at the State of Search are not your usual collection of campers. Many are seasoned PR, marketing and tech vets. Their clients are not a bunch of local small businesses and mommy bloggers. They are a list of the who's who of big brands. And while they might not always be building the websites, they have the ears of the decision makers who are – and they are demanding the tools they are familiar with.

After all the marketers are the people making money for these brands. Us developers are just seen as cost centers. I think is wrong, but it's true.

Tough love

I love the Drupal project and the community. I am a developer first and a marketer second - with a little bit of a competitive streak. Hands down Drupal is a superior technical platform. But, it was very concerning to hear such an influential group of marketers in lock step about their weapon of choice, WordPress.

I have seen too many times where enterprise class leaders have been crept up on and beaten by seemingly lesser, lighter solutions. It happened with voice response and databases in the early 2000. Drupal has done it by capturing much of the commercial eCMS market. Will WordPress creep up and take the enterprise space from Drupal?

As a community, we are not focused on Drupal solutions for marketers. For example, at DrupalCon Denver, there were zero sessions about marketing or for marketers. Just like we have evolved our theming and design in the last few years, we need to work on making Drupal a better marketing platform.

Josh Koenig in his keynote, Drupal's Destiny, at Dallas DrupalCamp shared his vision for Drupal to run 20%+ of the web. I love that vision.

We have the technology. We have the developers. We have worked hard to get the designers. Now we need to work on getting the marketers. I think it's critical for Drupal to reach its destiny.

Doing the Drupal thing? What do you think? How do we get to running 20% of the web?

Apr 23 2012
Apr 23

Posted Apr 23, 2012 // 7 comments

Let’s face it – data is invaluable, integrations are key, and generating that information into something that will show up on a person’s browser (often) thousands of miles away in a matter of seconds is a modern miracle. However, if your site isn’t aesthetically appealing, nobody will stick around to see all the good stuff. This is where Cascading Style Sheets (CSS) come into play, and why tools such as LESS that make CSS easier to develop and revise have seen widespread adoption in web development.

CSS is an incredibly powerful tool, allowing web developers and designers to alter the entire look and feel of a website with a few simple style rules. Something as simple as: 

a, a:link, a:visited {
  text-decoration: none;
  color: red;
  font-style: italic;

can change the appearance of every link (the “A” tag) on every page of your site. Although very powerful and flexible, some aspects of writing CSS become redundant and hard to re-use such as colors, backgrounds, and dimensions. This is where CSS preprocessors such as LESS come to your rescue.  

LESS is More

LESS was born out of perceived shortcomings of the SASS project, and provides more options for developers to implement. LESS can be set up using a Node.js server to generate new CSS files from LESS files as they are changed. You can also include a LESS JavaScript library that will effect just-in-time compilation of LESS code on the browser. Another option available in CMS environments such as Drupal and WordPress are plugins that compile LESS code on the fly on the server so there is neither a slowdown on a user’s browser nor a need to configure a Node.js installation (which is not for the faint of heart). On to some contrived examples to demonstrate what LESS brings to the table.


For example, you want to modify the style used on several elements, but the design calls for the same color to be used in several places that don’t lend themselves to leveraging pure CSS to use the same color, as in this example where a color is used for text in one rule and the background in the other:

h1.title {
  font-size: 1.5em;
  color: #339966;
h2.title {
  font-weight: bold;
  padding: 10px;
  background: #339966;
  color: white;

Now if you decide that the shade of green shown above needs to be changed everywhere in the site, you have to search and replace all properties in all stylesheets with pure CSS, making sure you don’t accidentally change the color where it might still need to be used. With LESS, you can declare a variable to use like this:

@title-color: #339966;

h1.title {
  font-size: 1.5em;
  color: @title-color;
h2.title {
  font-weight: bold;
  padding: 10px;
  background: @title-color;
  color: white;


The LESS syntax also allows for more logical grouping of CSS rules. Say for instance you had markup for a listing that had CSS like the following:

#list {
  margin: 20px 0;
#list .list-item {
  color: black;
#list .list-item.odd {
  background: #eee;
#list .list-item .list-item-title {
  font-size : 1.25em;
  font-weight: bold;
#list .list-item .list-item-content {
  font-size: 0.75em;
  margin: 0 0 0 20px;

This same CSS rules could be written using LESS as:

#list {
  margin: 20px 0;
  .list-item {
    color: black;
    &.odd {
      background: #eee;
    .list-item-title {
      font-size : 1.25em;
      font-weight: bold;
    .list-item-title {
      font-size: 0.75em;
      margin: 0 0 0 20px;

Notice how child items can logically be nested, and the selectors don’t require the parents to be specified once nested. Multiple classes and pseudo-classes can even be treated as child selector elements that modify a main class using the “&” notation. 


Yet another powerful feature available in LESS is the concept of “mixins” which allow you to re-use CSS “fragments” in multiple rules, including parameterized values (example borrowed from the LESS site):

.rounded-corners (@radius: 5px) {
  border-radius: @radius;
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;

#header {
#footer {

Where the CSS fragment declared for class “.rounded-corners” is re-usable in the header and footer declarations with different corner radii. 

Functions & Operators

LESS also allows for functions and operations to be applied to various CSS attributes such as dimensions and colors, which are entirely too detailed to get into in this intro. Suffice to say there are numerous examples and a full function reference available on the LESS site.

In summary, if you are looking for a more logical and flexible way to build CSS, look into LESS. It extends CSS in a logical way that allows legacy CSS to still work as always, but allow developers and designers a way to organize CSS in a way that makes more sense and gives more options for modifying rules and values en masse with either the server or browser.


As a Senior Developer at Phase2, Robert Bates is able to pursue his interests in solving complex multi-tier integration challenges with elegant solutions. He has experience not only in traditional web programming languages such as PHP and ...

Feb 15 2012
Feb 15

The team is excited to announce the first stable release of version 4.1  - with support for Drupal 7, Drupal 6, Joomla 1.7/2.5, and Wordpress 3.3. You can download the release now from Sourceforge.

We strongly recommend that you upgrade a test copy of your site and review your critical workflows before upgrading your production site. You can also test-drive the release on each platform using the public demos:


What's new (highlights)

Here's a quick list of some of the many cool and useful new features and improvements in this release:

  • Extended support for Drupal 6
  • WordPress 3.3 integration
  • Personal Campaign Pages for events - CRM-8534
  • Scheduled Reminders for events - CRM-8669
  • Social Networking plugins (Facebook "like", Tweet ...) for event and contribution pages - CRM-8737
  • Support for case custom fields - CRM-8508
  • Simplified Administrator menus - CRM-9059
  • Assign multiple contact subtypes and change subtypes  - CRM-8357
  • Find duplicate contacts has been optimized when using the  reserved dedupe rule
  • Limit contact reference custom fields by group - CRM-8536
  • Unlimited Profiles for event registration forms
  • CiviReport - save report instance as a new report and permissioning by role - CRM-8562
  • Event info pages include links to configure the event, and to view registered participants - CRM-8707
  • Register, and Confirm buttons now appear on TOP and bottom of public event info and register forms

Step up and help out with documentation updates


You can download the release from SourceForge. The filenames include the 4.1.0 labels, e.g. civicrm-4.1.0-drupal.tar.gz or civicrm-4.1.0-joomla.tar.gz or civicrm-4.1.0-wordpress.tar.gz. Make sure you're downloading the correct version: for Drupal or Joomla or WordPress.

New Installations

If you are installing CiviCRM 4.1.0 from scratch, please use the corresponding automated installer instructions:

Upgrading to 4.1.0

The procedure for upgrading is described in following documents:

We will continue to include automated upgrades for subsequent stable releases of 4.1 - so you should be able to upgrade your site easily over the course of the release cycle.


Community support and engagement is the force that sustains and drives CiviCRM forward. This release would not have been possible without the incredible contributions of these people and organizations:

Adam Wight, Andrew Harris, Andrew Perry, Alice Aguilar, Andre Gurgel, Brian Shaugnessy, Coleman Watts, Dave D, Dave Moreton, Eileen McNaughton, Erik Brower, Erik Hommel, Henry Bennett, Jamie McClelland, Jim Taylor, Jonathan Mark, Joe Murray, Marianela Zucotti Bozzano, Michael McAndrew, Steve Colson, Stuart Gaston, Tim Otten, Tom Kirkpatrick, Xavier Dutoit.

AGH Strategies, Amigos Library Services, Association for Learning Technology, Attendee Management, Benton Consulting, Circle Interactive, CivicActions, Community Builders, EE-atWork, Fuzion (NZ), Giant Rabbit, Kindling Trust, Korlon, International Mountain Biking Association, International Society for Bayesian Analysis, Josiesque Designs, Michigan Parents for Schools, New York State Senate, Nonprofit Association of Oregon, Nonprofit Solutions, Powered by Action, Progressive Technology Project, Resolutions Northwest, River Pool at Beacon, Rooty Hollow, San Francisco Baykeeper, Scotland's Colleges, Switchback, System Seed, Tech to the People, The San Francisco Orff-Schulwerk, Third Sector Design, Voluntary Action Westminster, Vpod Schweiz, Woven.

Jan 11 2012
Jan 11

UK South West - CiviCRM Meetup
March 20th, 2012
Come meet others from the Area who are interested in, using or developing for (more...)

[Bristol, UK] user and administrator training
March 21st, 2012
A comprehensive hands on training course covering the configuration, (more...)

Chicago CiviCRM Meetup
March 23rd, 2012
Please join other CiviCRM users, administrators, and developers in the Chicago (more...)

CiviCRM Seminar - London
March 27th, 2012
NfP Services free seminar

San Francisco user and administrator training
March 29th, 2012
A comprehensive two day hands on training course covering the configuration, (more...)

CiviCon 2012 San Francisco Bay Area - April 2nd 2012
April 2nd, 2012
CiviCon is THE annual event bringing together the people who use, develop, (more...)

Translation and documentation sprint
April 16th, 2012
A sprint to work on the documentation and also to focus on translation. This (more...)

UK North West - CiviCRM Meet Up
April 17th, 2012
Come meet others from the area who are interested in, using or developing (more...)

Manchester UK User and Administrator Training
May 30th, 2012
A comprehensive two day hands on training course covering the configuration, (more...)

Dec 23 2011
Dec 23

The CiviCRM team invites you to CiviCon 2012
CiviCon – the annual conference for CiviCRM developers, implementers, administrators and users – is happening in the San Francisco Bay Area on April 2nd. Early bird registration is just $75 and ends less than a month away on January 30th, so reserve your spot now.

CiviCon is the annual CiviCRM event bringing together the people who develop, design, implement, administer, and use CiviCRM. We'll have great speakers, breakout sessions and panels highlighting real-world examples of nonprofits growing and sustaining relationships using CiviCRM. Find out about the future of the platform through discussions with the core team. You'll have ample opportunity to ask questions, meet other users and developers, make valuable connections, and get involved in the community.


Are you staff or a program manager at an organization who wants to to discuss your experiences and best practices with other CiviCRM users? Would you like to share your experience of implementing CiviCRM at your organization and how it has impacted your organization's workflows? Are you an integrator with an exciting case study? A developer who has built new tools for deployment, data migration, integration with other applications? We want to see your session at CiviCon 2012. Submit your session proposal by February 15th.

Sponsor CiviCon 2012 – it’s a great way to build your profile in the community and contribute to the project at the same time.
It’s a big week for Bay Area tech conferences – you might as well make a week of it. Save April 6th for Penguin Day San Francisco. NTEN’s National Technology Conference 2012 is also happening in the Bay Area April 3rd–5th.

Dec 19 2010
Dec 19
Printer-friendly versionPDF version

If you spend enough time working with Drupal you'll eventually end up needing to migrate data or posts from other platforms into a Drupal site. I have had three separate situations where I needed to accomplish this.

  1. Importing raw data into a site from comma separated value (CSV) files in order to display the data in tables that could be viewed on the site.
  2. Importing a WordPress blog.
  3. Importing several blogs from Squarespace.

I have previously covered the first situation in a post titled Moving Beyond Nodes. Please see that post if you're interesting in finding out more about how I accomplished those data imports. The second situation I addressed by utilizing the WP2Drupal module. The third situation I handled by utilizing the Import Typepad module.


As fate would have it the WP2Drupal module is currently listed as abandoned. That doesn't mean it can't/won't work for you if you are still on Drupal 6 and WordPress 2.3. For the record the maintainer of WP2Drupal recommends the WordPress Import module which will have a Drupal 7 release. WP2Drupal works by connecting to the database of the WordPress site so you will need to have access to the database settings (host, username and password) of the site you are migrating from. The module will import blog posts, categories, pages, comments and trackbacks from your WordPress site. 

Some things to consider prior to importing.

  • Mapping of WP users to Drupal users
  • Taxonomy vocabulary that will hold the WP categories and tags
  • Node types for blog entries and pages
  • Input format for posts and comments
  • Whether or not the old URLs must be redirected to new ones

Think about all these things before you start the migration. Users, content types and taxonomies are especially important considerations. If things aren't setup correctly and you go ahead with the import many headaches can result. For that reason it's a best practice to make a database backup prior to actually migrating. You can always restore the original database and redo the import if things go wrong.

Import Typepad

Although this module is meant for Typepad/Movable Type blogs I used it to import "journals" (which are basically individual blogs) from Squarespace. To get started you need an export file for each journal that is generated on your Squarespace account. To generate the export file you need to put the journal into structure editing mode, then select Configure This Page, and scroll down to the Data Export section. There is a button there that says "Export Blog Data". Pushing that button generates the file that you will download and then upload using the Import Typepad module. The data that will be imported will be the posts (title and description), and the categories. The date and time of the posting will be preserved as well.

With your various export files in hand you then need to navigate to /admin/content/import_typepad on your Drupal site. There are three things that you need to have set up prior to importing.

  1. Content types
  2. Taxonomy vocabulary
  3. Users

Unlike the WP module there is no automatic user mapping. You will simply select an existing user to assign import posts to. The actual import itself is a 2 step process. In step 1 you select the export file to upload, select the content type to import to, and also select the taxonomy to import categories to. In the next step you see a preview of what the imported content will look like on your site, along with the categories that will be imported. You also map the content to a Drupal user at that time. When you're ready you click an Import button and then wait for a message indicating that the import is complete.

Post Import Tasks

In both cases you'll want to spend time reviewing the content that you imported to make sure things look like you want them to. You may want to adjust input formats or issues related to how the content is displayed on your site. You will also want to use the Views module to create blocks and pages to display groups of posts that you have imported. I have found Views Bulk Operations to be a very helpful tool to correct and update large groups of nodes.

If you have migration tips, and war stories or direct experience with the modules mentioned here, and you would like to share your experiences feel free to do so in the comment section below.

Video Links

YouTube Version

Flash Version

Quicktime Version

Aug 05 2010
Aug 05
Printer-friendly version

Why Drupal? is a great article by designer Nathan Smith on why he's moving to Drupal. He's written a book about Textpattern, and used Expression Engine extensively, and also mentions TYPO3.

I've snipped only this very small section on (essentially) why not WordPress, which is similar to what I was trying to get at with my Evolving Drupal UX by Building Products post:

In fact, WP is so tailored to blogging that I liken it to a yacht. It is streamlined for that particular task. It allows people with varying levels of technical savvy to get a site installed and online posthaste. Or, via  you can skip the install process altogether and opt for a hosted blog. While a sharp focus on blogging ensures that the famed “5 minute install” will continue to be a selling point, it also means that WP at its core isn’t meant for big sites.

Note: I mean “big” from an information architecture standpoint. I realize that with proper caching plugins and a good hosting setup WP can power sites with tons of traffic and an abuncance of blog posts. While that’s all well and good, I’m interested in building sites and/or web applications that have both breadth and depth.

Continuing with the WP as yacht analogy, I’d say Drupal is an aircraft carrier. A ship that big can carry fighters, bombers, supplies, or even refugees in a humanitarian relief effort. What I see far too often is people trying to strap things onto their yachts and then wondering why they run into difficulties. Custom fields do not make for an ideal CMS workflow. I learned this with Textpattern.

Nathan has done a great job by unpacking what "scales well" means from a design perspective. His side trip(s) into discussing major Drupal shops and focusing on a base language like PHP instead of template lingots are excellent as well.

Nathan doesn't mention Features, but it is a path forward for small or large Drupal shops to avoid having to "just" skin another Drupal site, without moving in the direction of templates.

Jul 15 2010
Jul 15
Printer-friendly version

I've spoken out in support of Matt Mullenweg, WordPress, the GPL, and general open source community principles before. It seems like we keep having this discussion, and that it often degenerates into a battle of personalities.

Bottom line: Themes and modules are derivatives and should be licensed under the GPL. You can use trademark and other non-code protections that will let you sell them and limit distribution if that is your chosen business model.

The way that PHP is executed means that everything runs together in the same space, with no separation (this is a simplification, but essentially correct). So, not the same as the red herring about software apps and operating systems (this comes up all the time).

The Drupal community generally agrees with WordPress in that all themes and modules are derivatives and thus must be licensed as GPL *if* you distribute.

Luckily, themes have CSS, images, and other pieces which can by copyrighted/trademarked and licensed in whatever way you see fit. The legal page on the Drupal-focused TopNotchThemes site makes this nice and clear:

  • Drupal is open source software covered by the GPL. Portions of our themes (typically the .php files) that interact with Drupal are thus covered by the GPL and may be freely distributed
  • The “look and feel” of our themes which includes files not dependent on Drupal (typically graphics and CSS) are not subject to the GPL and are the intellectual property of TopNotchThemes and licensed to you upon purchase via our website.
  • You may not redistribute these files or use them for more than one production website
  • We have no liability for and make no warranty for our themes

Great, plain, simple language. Go ahead and sell custom / premium / whatever themes day in and day out. The code bits of the PHP are a derivative work, and must be licensed under the GPL.

I've been looking for an excuse to dig into premium plugins as well (as a signpost towards thinking about such things in Drupal, especially as one digs into the many trademarked products / distributions that abound).

I think my friends at WordPress development shop BraveNewCode are doing excellent, pioneering work with WPTouch Pro. Read their Terms and Conditions for an example of how well done "premium" WordPress plugins / Drupal modules might be successful, all in accordance with the GPL.

Jun 17 2010
Jun 17
Printer-friendly version

With the release of WordPress 3, there's a whole new set of discussions about Drupal vs. WordPress.

I'm going to try and explain my views on UX in Drupal, once again using the lego analogy.

First, I propose that you need a defined purpose to build great UX. WordPress focuses on blogging, and thus has an excellent blogging product.

With WP3, they've even integrated their version of multisite / Aegir out of the box. BuddyPress is an example of a product that sits on top of this base infrastructure. So now WP does blogs as well as multi-user social groups / communities.

In Drupal, we've optimized for a big box of lego. And there are a LOT of pieces in there. Pirate bits, space ship bits, viking bits. And lots of blocks that fit together pretty well if you're creative and pick through looking for ones that match in colour and so on.

I could talk about the WYSIWYG editor that ships with WP as an example. They took the base piece, customized it, and now have a rich text editor piece that fits exactly into the blogging product. It's not even a block! It can't get re-used easily with all these pirate bits! Sometimes, it's OK to plug in that perfectly shaped lego piece that isn't really a block at all.

But that's really hard to do if you don't have a defined purpose. Because something that is perfect for a large community site isn't going to be great for running an intranet. And an open everything access & permissions model is great for the former, and dangerous for the latter.

So, if we want to improve Drupal UX, we can't just take out a big UX brush and improve everything. There are certainly base building blocks and flows that we can improve, but on top of that, it will be need to be optimized for different use cases.

Just over a year ago, I proposed that Drupal could be a great social community out of the box (as in, core install profile). I'm not so sure anymore, but I think we should continue to have the discussion "What should Drupal do out of the box?" so that a) new users have a reason to use core to accomplish a task beyond "it can build anything" and b) we can experiment with optimizing UX for that purpose. This will teach us lessons that can be re-used and rolled into all Drupal-based products.

And, in general, I would like to see more people trying to build nicely polished products that have a defined purpose: this is what will move us forward in the UX department. Dries has a discussion on the business model of products / distributions that is important - because we'll need to fund development over time.

Thanks to @mattfarina for kicking this loose from my brain on Twitter.

May 16 2010
May 16
Printer-friendly version

the core problem that faces companies trying to build growing businesses around software — dealing with the fact that different users take advantage of different features, and that applications tend to grow more complex as their user bases grow. It seems to me that the fashionable answer to this problem is to claim to be an auteur of application development, and to only build the features that are appealing to you. But that’s not the way big software companies work, and it’s really not the way they should work. If you’re in the software business, this presentation is a must-read.

I agree - this presentation is a must read (emphasis mine). Go grab the PDF of the presentation from DANC at Lost Garden.

I have been saying for a while that Drupal needs to actually cater to the bottom of the pyramid - so that more people can make it up the pyramid. The infamous "learning cliff" of Drupal means we need to make the "first level" of Drupal that much easier.

This post of moving from Ning to Buddypress would be pretty much impossible in Drupal - and that's a problem.

DANC says: "Two lessons: If you do a crappy job and people still think the result is amazing, you are onto something. If this can work with Word, it can work with almost anything."

I have long said "Drupal sucks, it just sucks less". There are painful pieces to it, especially for people that aren't educated about the whole rest of the stack. That includes two parts - the technical stack of databases, web servers, DNS, (and even operating systems / command line). Secondly, there is what I'll call the "community stack". Not hacking core, figuring out where (and how) to ask questions, how to contribute back feedback / documentation / code, and so on.

Anyone that attends a DrupalCamp or Drupalcon very often levels up immediately in the community stack - lots of learning, lots of positive reinforcement, and a good chance that someone else there is attempting to complete the same mission.

Writing this up also gives me a chance to talk about a tweet I made during Northern Voice:

Sitting in @davecormier's #Drupal for communities - just told everyone that it "burns like fire" vs the ease of use of #wordpress #nv10

An analogy that I ended up developing as part of the discussion (and from the painful groans of some of the edtech crew in attendance) was this:

WordPress is like an oil lantern. It's got this nice brass case, a little pool of oil, and a burning wick on the inside. You can pick it up, walk around with it, and generally do a very good job of shining light into corners.

Drupal, on the other hand, is like a raging fire. It's fantastic at throwing light into a really large space, where a brass lantern just won't do. But, you're carrying that big fire around in a wooden box. If you don't figure out how to build a metal case around that box, Drupal's fire is going to eat through the box and BURN YOUR HANDS.

As Dave Cormier explained to people, "With Drupal, you need to plan ahead". Drupal is a more complex tool. But we're not going to lose complexity. We're going to keep adding cutting edge features ("there's a module for that!"), we just have to find ways to make the early levels easier, and to build more game-like features into our Drupal training and learning tools.

And the end game? I have a pretty good feeling that distributions are a part of it.

Mar 11 2010
Mar 11

Yesterday I saw this post with a video on the new P2 theme for Wordpress and how Automattic* is using that as a real time microblog like tool for status updates in their company. And it got me thinking...

For some time now we've been using Open Atrium in Pronovix for project management. But until today all of our real time communication takes place through Skype. At some point we tried to replace Skype with XMPP (because Skype didn't properly work on Linux) but once Skype worked again for all the colleagues Jabber got abandoned.

One of the reasons why we were interested in Jabber was to integrate activity updates into our communication tool (e.g. posting comment, case, commit messages). So that we would be able to have a discussion and have a bot post newly created cases into our chat channel.

Right now our workflow is as follows:

  • while in a Skype chat realize there is a new issue
  • go to Open Atrium
  • open a case submission form
  • fill it out and submit it
  • copy the created url
  • post it in Skype

Wouldn't it be cool if you could have 1 interface with the activity/chat river of your team where you could create new cases without having to go into another context and then have that case submitted into the activity stream where your colleagues can react on it, either through inline comments (if you want it to be stored in the ticket history) or just chat messages?

Today we did a short brainstorm on that in the office. We examined the following issues:

  • scalability: using nodes for each submitted message is not going to work for big groups (unless you throw hardware at it of course). Doing a pull system with a full Drupal bootstrap for every user's request, every second or so will eat even a decent server if you have enough users.
  • immediacy: Drupal bootstrap time and network latency will slow down the interaction.
  • security: you want to be able to make sure only people with the right permissions can see your content.

The schema below explains how we are now thinking of solving these questions:

  • For scalability we want to make a hybrid Drupal/XMPP system: this way it doesn't matter how many users are subscribed to a certain group.
  • The XMPP server has channels for all groups in the Open Atrium install.
  • Users with the permission to view content of certain groups get subscribed to the respective channels.
  • The client for the XMPP messages is a webpage in Drupal.
  • The page has a submit box for posting chat messages that get sent to the appropriate channel on the XMPP server.
  • Javascript shortcuts let you perform some of the most common operations like selection of next/previous messages; creation of the different content types available in Open Atrium.
  • Node submission forms are loaded in an overlay with the node form (this could be implemented using the modal frame API as it's done in Drupal 7).
  • A prominent context box (that's always visible) displays the last group context you viewed a message from (possibly other context too). Using prepopulate this context gets transfered to new forms you open.
  • Upon submission Drupal sends a message with the new information to a Jabber channel (this would probably be JSON)
  • XMPP messages get parsed and displayed on the webpage (comments on nodes could be displayed in a threaded way).
  • A set of filters lets you filter for streams from only certain groups.
  • A message that hasn't been selected yet, is coloured differently to indicate that it hasn't been read yet.

This is a first draft of the specification, there are still a couple of things that need to be worked out and tested. For example:

  • We still need to figure out how we will archive the stream so that users can go back in time and see messages/activities that got posted before they opened the stream page.
  • We also need to do a thorough security review of the whole system.
  • We'll also be able to add add private messaging to the interface...

PS: one thing that is getting me even more excited about this feature is the possibility to display activity streams from groups on other Open Atrium sites: with this system we could make it possible to have federated activity streams from all the Open Atrium sites you are registered on...
PPS: This model will of course also work for non-Open Atrium Drupal sites

Bookmark/Search this post with:

May 20 2009
May 20

Drupal 6 To WordPress 2.7

Recently we had to convert a Drupal 6 based website Themestand over to WordPress v2.7 due to the amount of Database resources Drupal 6 was consuming on each page load, even for a pretty simple site we found Drupal very heavy on resources especially when users were logged in as the page cache is then inactive. This left us with a simple choice of do we try to further optimize a Drupal system thats already been heavily optimized or do we switch to a less MYSQL hungry system that we can modify to perform the same functions? Our chosen solution was to convert the entire site’s content from Drupal 6 to WordPress 2.7.

Their are various reasons as to why you may wish to convert a Drupal 6 based website to WordPress, maybe you want to convert a blog originally built upon Drupal to WordPress, it could be that you want a system thats a little easier to code themes for, or maybe you just prefer WordPress over Drupal, for us the reason was simply server load due to the amount of MYSQL queries drupal was consuming for what is not really a complicated website.

After looking around the web reading various articles on the subject of Drupal to WordPress conversion most of which are unfortunatley now outdated and with some trial and error we eventually figured out the MYSQL code and process needed to acheive a basic Drupal 6 to WordPress 2.7 site migration. In this article we will describe the steps needed to import your Drupal 6 website into a WordPress v2.7 install.

The actual database conversion from Drupal 6 to WordPress should take around 40 – 60 minutes, then you will have theme wordpress etc and check all the posts, categories and tags so all in all it may take you a few hours to complete this process in full.


  1. Make sure you have 40 – 60 minutes that will be free from distractions, wife, kids, phone, dog, twitter etc.
  2. Do not under any circumstances perform this task on a live website, install WAMP or similar on your PC to use as a development server.
  3. Completely backup your Drupal 6 website files and database included.
  4. Have a fresh install of WordPress v2.7 installed and running, backup this also as it easier to just upload the DB file if you mess up during conversion instead of starting again from the beginning.
  5. Grab a coffee, tea, beer or personal weapon of choice and begin.

Step One

Install a fresh copy of WordPress v2.7 and it’s database to your development server our created database name was titled “tempdb” title yours the same if you do not want to edit any of our supplied SQL queries, this is the install we will be importing Drupal 6 into so check that wordpress is fully functional before continuing. Goto phpMyadmin and backup this database, also take note of which table have been installed by WordPress these tables always begin with wp_ as you will need to recognize these for later. Below is a list of the basic WordPress install tables within a fresh install.

  • wp_comments
  • wp_links
  • wp_options
  • wp_postmeta
  • wp_posts
  • wp_ratings
  • wp_terms
  • wp_term_relationships
  • wp_term_taxonomy
  • wp_usermeta
  • wp_users

Now grab the SQL file backup of you Drupal 6 based website, goto phpMyadmin or similar and upload that database into the same database where you installed WordPress. This is very important as for conversion/import we need both the Druapl6 and WordPress 2.7 databases to be combined to begin with.

Once that step is complete we can begin to run the SQL queries with phpMyadmin that will import the data from your Drupal 6 database into the WordPress 2.7 database.

Drupal 6 To WordPress SQL Queries

This part of the process is carried out using phpMyadmin as we will be running SQL queries to import data from the Drupal 6 database into the WordPress v2.7 database.


Goto the page above in your database as this is where we will be pasting the SQL queries to that are listed below.

First off we need to clean out any data that may reside within certain WordPress tables, copy, past and run the query below in phpMyadmin to do this.

IMPORTANT: the “tempdb.” that is within the code if your database is not named “tempdb” you will need to change all instances of  “tempdb” to the name of your actual database. So for example if your database is called “wordpress” it would look like this “wordpress.wp_comments;” etc.

Clean WordPress Before Import

TRUNCATE TABLE tempdb.wp_comments;
TRUNCATE TABLE tempdb.wp_links;
TRUNCATE TABLE tempdb.wp_postmeta;
TRUNCATE TABLE tempdb.wp_posts;
TRUNCATE TABLE tempdb.wp_term_relationships;
TRUNCATE TABLE tempdb.wp_term_taxonomy;
TRUNCATE TABLE tempdb.wp_terms;

Import Taxonomy Terms

This next query will import taxonomy terms.

INSERT INTO tempdb.wp_terms (term_id, `name`, slug, term_group)
 d.tid, d.name, REPLACE(LOWER(d.name), ' ', '-'), 0
FROM tempdb.term_data d
INNER JOIN tempdb.term_hierarchy h
INSERT INTO tempdb.wp_term_taxonomy (term_id, taxonomy, description, parent)
 d.tid `term_id`,
 'category' `taxonomy`,
 d.description `description`,
 h.parent `parent`
FROM tempdb.term_data d
INNER JOIN tempdb.term_hierarchy h

Import Post Content

This query will import Drupal post content to WordPress.

    tempdb.wp_posts (id, post_date, post_content, post_title,
    post_excerpt, post_name, post_modified)
    n.nid, FROM_UNIXTIME(created), body, n.title,
    REPLACE(REPLACE(REPLACE(REPLACE(LOWER(n.title),' ', '-'),'.', '-'),',', '-'),'+', '-'),
FROM tempdb.node n, tempdb.node_revisions r
WHERE n.vid = r.vid

Post and Category Relations Query

This query relates imported posts to their categories.

INSERT INTO tempdb.wp_term_relationships (object_id, term_taxonomy_id)
SELECT nid, tid FROM tempdb.term_node;

Category Count Updating

UPDATE wp_term_taxonomy tt
SET `count` = (
 SELECT COUNT(tr.object_id)
 FROM wp_term_relationships tr
 WHERE tr.term_taxonomy_id = tt.term_taxonomy_id

Comments Query keeping unapproved comments hidden

INSERT INTO tempdb.wp_comments (comment_post_ID, comment_date, comment_content, comment_parent, comment_author, comment_author_email, comment_author_url, comment_approved)
SELECT nid, FROM_UNIXTIME(timestamp), comment, thread, name, mail, homepage, status FROM tempdb.comments;

Update comments count on wp_posts table query

UPDATE `wp_posts` SET `comment_count` = (SELECT COUNT(`comment_post_id`) FROM `wp_comments` WHERE `wp_posts`.`id` = `wp_comments`.`comment_post_id`);

Fix breaks in post content

UPDATE tempdb.wp_posts SET post_content = REPLACE(post_content, '', '');

Fix images in post content

UPDATE tempdb.wp_posts SET post_content = REPLACE(post_content, '"/sites/default/files/', '"/wp-content/uploads/');

If all went smoothly all your Drupal 6 content should have been imported over to WordPress, you can now delete the Drupal database tables from your database leaving the wp_ tables intact.

Now instead of having a possible 100+ sql tables with Drupal and it’s Modules you have a small and compact eleven or so with WordPress that includes exactly the same content as was contained within your Drupal site.

Final Steps

Upload the content/images from your /sites/default/files folder that you backed up with Drupal to your WordPress /wp-content/uploads folder otherwise images for imported posts will not work.

The final steps of the procedure is to browse through your content checking, categories, tags etc looking for any errors misplaced posts. Fix any you come across then you can theme your new site up and release it to the world.

I hope this may help some by cutting out the many hours of research into this procedure that we needed to do before our conversion and any questions, feedback, suggestions, improvements you have after testing this method please leave a comment.

If you enjoyed this post, make sure you subscribe to my RSS feed!

May 04 2009
May 04

Automattic releases BuddyPress – Official “Sister Project” to WordPress

Posted by Jeffrey Scott -TypeHost Web Development | Monday, May 4th, 2009
, , , , ,

Matt Mullenweg, the founder of WordPress and Automattic, announced the release of BuddyPress last week on the official WordPress site. The BuddyPress site is live, with free downloads and installation instructions for BuddyPress 1.0 – which expands a typical WordPress blog installation into a full social network with most of the features of mySpace, Facebook, Ning, and other popular sites. My first reaction on this is… amazing, massive, incredible, exactly what was needed, soon to be huge, and really nice design over all. Congratulations to all involved in the development and publication of this release, it looks like a very important move in the future evolution of the WordPress platform and something that will encourage many social network developers to build with the CMS.

“What if there was software with the elegance and extensibility of WordPress but all the features you’ve come to expect from social networks like Facebook? Now there is: check out BuddyPress. BuddyPress is an official sister project of WordPress. The idea behind it was to see what would happen to the web if it was as easy for anyone to create a social network as it is to create a blog today. There’s been an explosion of social activity on the web, it’s probably the most important trend of the past few years, but there’s been a dearth of Open Source tools that enable the social web. In WordPress we have a robust and extensible base that can scale to many millions of users, and BuddyPress is essentially a set of plugins on top of WordPress that add private messaging, profiles, friends, groups, activity streams, and everything else you’ve come to expect from your favorite social network, like a Facebook-in-a-box.”1

To take a look at the BuddyPress demo site, visit: http://testbp.org/

BuddyPress includes user profiles, private messaging, friends / buddylists, groups, activity streams, a wall / stream like section called “the wire” for status updates and tweet-like on-site micro-blogging, in addition to multi-user blogs and forums. I use this same profile quite a lot in building social networks with Drupal using Panels, Advanced Profile Kit, Buddylist, Private Message, Flag, Activity Stream, Views, CCK, Content Profile / Bio, Organic Groups, and other modules. Because of the multiple development teams managing the combination of modules needed to build the working equivalent of this in Drupal, and the 5.x / 6.x / 7.x development cycle variations + all the time assembling, theming, and debugging a social network install in Drupal… the out of the box offering from BuddyPress will be a strong challenge.

For examples of sites that have been built with BuddyPress, see:

Sample demo profile page: http://testbp.org/members/galen/

WannaNetwork – Online Real Estate Community: http://wannanetwork.com/

Flokka – Women in Business: http://flokka.com/

GrungePress – Online Music Community: http://grungepress.com/

Working daily with both WordPress and Drupal both for web publishing and building social networks for clients, I have long felt WordPress had many advantages for single user blogs (really nice themes, for example) vs. Drupal, but lacked the module expandability to allow the construction of social networks. BuddyPress completely changes that and offers out of the box what is very challenging to build in Drupal. It could save 2 to 3 weeks development time on a complex social network site, and allowing the designer to focus work on the theme and content rather than building the module architecture.

My hope is that Acquia (or another company or developer) will release a “social network” installation profile for Drupal that is similar to this. Despite the large number of social networks built with Drupal, I don’t think there has been anything close to an “official” social networking profile like BuddyPress. One reason for this – and it may be related to the release of BuddyPress as a “sister project” rather than just a collection of modules that plugin to WordPress, is to create a complex social network site that deploys on an installation profile you need to install in a way that the database is pre-populated with all the correct settings, permissions, and everything is automatically positioned in the site by block, section, menu, etc. To do this in Drupal, you basically have to include a mySQL database map with the installation profile – something that I also haven’t seen often, but we are working on at TypeHost. Then you have to have a GUI layer that makes it easy for the user to transform the archetypal site structure into a personal site. From the way it looks, Automattic has done this perfectly with BuddyPress.

In terms of branding, the name is not the absolute best choice here in my opinion, but there must have been a clear reasoning behind not just releasing it as another version of WordPress, like “WordPress – SN (Social Network)” vs. “WordPress (Blog or Standard version).” Also it is interesting that the projects seem to be on independent / co-dependent / inter-related development paths, but that BuddyPress is not being considered “the next” version of WordPress. Again, similar to Drupal, there is some decision making that sees these not as “core” modules – despite the fact that many people see them as core to the functionality of the CMS. WordPress functioning as a full social network may not be needed by the majority of single user blog publishers who use the CMS as a platform, but this release is going to make a big difference on the web. It will be interesting to chart the usership statistics of BuddyPress vs. WordPress over the next year to see how many sites adopt the new changes.

Summary: combined with WordPress themes and publishing ease, the addition of full social network functionality to the platform with the release of BuddyPress 1.0 is a slam dunk / home run for Automattic, bloggers, traditional WordPress users, and social network developers. Look to see this on even more websites than WordPress in the future, and to pull a lot of development away from Drupal, which still lacks a unified offering that builds a social network as simply and easily as BuddyPress.

  1. http://wordpress.org/development/2009/04/make-friends-with-buddypress/ [?]
Apr 09 2009
Apr 09

Open Source Micro-Blogging CMS Software & Twitter Integrations

Posted by Jeffrey Scott -TypeHost Web Development | Thursday, April 9th, 2009
, ,

With all of the news about a possible Twitter sale to Google, I am wondering if we will see an increased trend in clients looking for micro-blogging sites and “Twitter Clones” for local and niche communication. Already, I am offering Twitter and Social Network integration (Facebook, mySpace) to clients on blog and ecommerce sites, to easily connect with friends, community, marketing, communication, etc. that takes place on those sites from the main domain. More and more people are including their Facebook status messages and Twitter stream on their homepages, using the API & RSS feeds those sites offer to pull social content across network channels.

WordPress Plugins:

Xavisys, the web development company behind WebDevNews.net, has created a Twitter feed module for WordPress called WordPress Twitter Widget Pro.

Drupal Modules:
For Drupal, I find the best module to be Activity Stream.

This module will republish all of your “tweets” into your Drupal site, as well as building a stream from your Facebook, Digg, Delicious, and other social networking and bookmarking sites. Highly recommended.

Also very promising for Drupal, but still in development, is the Facebook Status module (Facebook-style Statuses).

As expected, this module replicates the Facebook “Wall” and allows users to post status messages on their user profile pages. When I tried the module previously, there were still some bugs that would have prevented its use on a live site, but huge potential here with this module and a 2.0 version is now released.

The Twitter module allows users to:

  1. Associate one of more Twitter accounts with their Drupal user account
  2. Have their tweets displayed in a sidebar block or on their user profile
  3. Post to their own Twitter account or a site-wide Twitter account whenever they create new content


The Tapatio Projects seeks to build an installation profile for Drupal that “enable(s) users to leverage a drupal system as a front end to twitter.com (and other sources in the future) allowing them to use drupal as a hub for message aggregation, moderation, and dispatching.”



Stan alone CMS Software:

If you are interested in breaking out from a CMS like Drupal or WordPress and building a site that is a stand alone micro-blogging platform like Twitter, the Laconica open source software may be of interest.

For an example of a Laconica site, see: http://identi.ca/

The alternative to Laconica (but operating on the same open source micro-blogging standard) is Open Microblogger

By design, the open-source micro-blogging sites share an API to allow easy cross posting and searching of messages between sites. They also have more advanced built in SMS capabilities, something you will have to add extra modules for in Drupal & WordPress.

Whether your client is requesting Twitter integration into their home page or business site, or you have a request to build a full micro-blogging platform, one of these solutions should make a good base to build upon.



About Drupal Sun

Drupal Sun is an Evolving Web project. It allows you to:

  • Do full-text search on all the articles in Drupal Planet (thanks to Apache Solr)
  • Facet based on tags, author, or feed
  • Flip through articles quickly (with j/k or arrow keys) to find what you're interested in
  • View the entire article text inline, or in the context of the site where it was created

See the blog post at Evolving Web

Evolving Web