Expert Drupal and PHP Web Development

Steindom offers professional web development services for businesses of any size. To discuss your particular need, please contact us at 573-340-3276 or via email.

MAMP is a great tool for setting up websites for local development (and the new 3.0 release is much more flexible than previous versions). Forward is a simple command-line tool for routing DNS traffic to your local machine. Getting them to work with Drupal (the way I wanted) took me awhile to figure out, but it's actually very easy. More »

Sometimes you have to work with HTML which is not structured in semantically meaningful ways. Here's a quick code snippet for finding the HTML between two DIVs using PHP's DOMDocument and DOMXPath. More »

Want to save some time when creating new Craigslist posts? If you've got a pile of stuff to sell on Craigslist, here's a quick tip to save lots of tedious typing and clicking. More »

Drupal installation profiles are usually just starting points for a new site, but sometimes you want to leave an installation profile untouched, adding your own additions in a separate space and leaving a "clean" upgrade path for future versions of the profile. Here's a handy script I use for such situations. More »

I often use the excellent Migrate suite of modules to import data into Drupal. It's great for getting any type of content into a Drupal node, file, taxonomy term, user, and more. My latest task: importing content from raw HTML into a Drupal node. Not finding any pre-built classes in Migrate to handle this, I built a few simple classes myself. More »

Today I launched a new service called Random.pw (taking advantage of the new .pw domains). It's a random password generator, with lots of customization options to help you find a memorable but secure password, and it even has a password strength checker. More »

Sometimes I have repositories with folders that will only ever contain files considered to be "content"—that is, they are not files that I care about being versioned, and therefore should never be committed. With Git's .gitignore file, you can ignore entire directories. But there are times when having the folder in the repo would be beneficial. Here's a excellent solution for accomplishing this need. More »

When troubleshooting queries built with Drupal 7's Database API (affectionately known as "DBTNG"), there often comes a time when I need to see the actual query that's going to be executed in the database. Here's a quick and handy tip to assist query troubleshooting. More »

When dealing with large databases, it's helpful to see some statistics about your tables. This is found in the "information_schema" database, under the "TABLES" table. Here's a helpful query to find the size of all your tables in a particular database (the data size, index size, and total size), and sort by the total size. More »

In PHP 5.3, anonymous functions (or "closures") were introduced. To those who know Javascript well, these will be familiar. They allow you to create a sort of one-off function, and they're all sorts of useful. More »