Import Hundreds of Thousands of Records in 15 Seconds with Custom Entities

Recently we needed to import a fairly large dataset into Drupal. There were 200,000 items to import, the data changed relatively frequently, and we needed them to be Drupal entities so that we could make them searchable with Apache Solr. We would normally import data using Feeds or Migrate. This time, however, we had higher speed requirements, so we tried something different: importing directly into the database.

Read more about Import Hundreds of Thousands of Records in 15 Seconds with Custom Entities

Understanding the Entity API Module

Entities in Drupal 7 simplify and centralize common logic that, in earlier versions of Drupal, was duplicated in several places, or only usable in specific modules. There are, however, many features (such as saving entities!) that did not make it into Drupal 7. The Entity API module fills in these missing gaps in the core and goes a step farther by simplifying definition of new entity types, and integration with contrib modules such as Views, Rules, and Features.

Read more about Understanding the Entity API Module

Content Translation in Drupal 7

Multilingual websites are complicated, due to the wide variety of ways to convey multilingual content to users. Each multilingual website seems to come with a different set of requirements for how content translation is handled. In this post, I'll take a look at approaches to translating content in Drupal 7 and the new possibilities that the Entity Translation module provides.

Read more about Content Translation in Drupal 7

Responsive Theming: How to Apply Responsive Design Techniques to a Drupal Theme

We've been hearing a lot about responsive design and the future of the web recently. At DrupalCamp Montreal this September, Jen Simmons and Jake Strawn talked about why responsive design is taking hold. I was inspired to try out some of the techniques they talked about, and decided to convert evolvingweb.com to be more responsive.

Read more about Responsive Theming: How to Apply Responsive Design Techniques to a Drupal Theme

Drupal 7 Entities: What are they, and what are they good for?

In Drupal 6, module developers often use Nodes as an all-purpose method for having objects that can be saved into the database. This hack avoids having to write a lot of boilerplate CRUD for all custom data used in your modules. Nodes in D6 are a powerful tool for this use case when combined with the flexibility of CCK's custom fields, and the simplified integration with contrib modules. However, using Nodes for every piece of specialized content means a lot of overhead; contributed modules often modify Nodes and added hooks that operated on them. This is a major performance concern, not to mention a bad architecture for unrelated data.

Read more about Drupal 7 Entities: What are they, and what are they good for?

Introducing the Redmine Google Docs Plugin

In our previous post, we wrote about how we use custom Redmine plugins to keep specifications up-to-date with our Redmine issues. Since we update the specifications with clients throughout a project, we need a way to keep developers in the loop. Automatically updating an issue page with the changes saves us unnecessary meetings and confusion. The most useful plugin we've been using was one that we wrote ourselves: redmine_google_docs. This plugin allows embedding of Google Spreadsheets and Google Documents in Redmine wiki pages and issues. This helps us spend more time focused on the project and less time on synchronizing documentation.

Read more about Introducing the Redmine Google Docs Plugin

Agile Project Management with Google Docs, Git and Redmine

At Evolving Web, Redmine is at the core of our project management methodology. Redmine’s extensibility makes it the open source tool of choice for scoping, tracking and maintaining projects. Today, we're highlighting some of the integration that's possible between Redmine, Google Docs and Git. This piece is complementary to our post on Customizing Redmine in Agile Project Management.

Read more about Agile Project Management with Google Docs, Git and Redmine

Customizing Redmine for Agile Project Management

At Evolving Web, we’ve been working with an agile project management methodology for some time now. Compared to the waterfall approach, we’ve found that the agile method best captures our team’s momentum and creativity during development. This translates into an involved client and a better product. By breaking our mandates into two and three week sprints, we work within a limited timeline to implement the project’s specifications. We demo our progress at the end of each sprint to affirm that we’re on the right track and that all of the client’s concerns have been addressed.

Read more about Customizing Redmine for Agile Project Management

Poutine Maker: An Introduction to the Field API in Drupal (Part 1)

The power of Drupal stems from our ability to customize it. One common requirement is the need to define complex fields with custom widgets and formatters that are unavailable in core or contributed modules. This allows us to collect more sophisticated data from users, and define exactly how that data is presented. Drupal's Field API provides the hooks needed to make just about any field we want.

Read more about Poutine Maker: An Introduction to the Field API in Drupal (Part 1)

Theming Views in Drupal with Templates and Preprocess Functions

If you're building a large website in Drupal, you're likely to have a long list of views that you're using. Often, views require some custom configuration to match a given design or to provide the user with additional information. Sometimes you want to add dynamic text above or below the view, such as the number of results, or want to create a dynamic title beyond what views lets you configure through the user interface.

Read more about Theming Views in Drupal with Templates and Preprocess Functions

Controlling Your Cloud with Puppet

If you haven't noticed already, we are getting pretty excited about cloud computing at Evolving Web. Our latest deployment included 5 Rackspace Cloud servers being controlled by Puppet and provided the client with the ability to scale up and down easily depending on traffic. Scaling up involves spinning up a new server instance and configuring it for its role. But what is the best way to configure it? By hand? By scripts? By images? Well technically any of those methods will work, but I want to tell you about one you may not have heard of.

Read more about Controlling Your Cloud with Puppet