Gearing up for ExpressionEngine 3

ExpressionEngine (EE) 3.0 is on the way. What does this mean? It’s hard to tell exactly. I know that a responsive control panel is in development. And I know that the codebase is being modernized, but I don’t know yet what other improvements are being made. EllisLab is posting developer…


Further thoughts on ExpressionEngine and WordPress

For the past year or so, the content of this website has bounced around between ExpressionEngine (EE) and WordPress—primarily because I am not completely satisfied with either platform. Both have their advantages and disadvantages. Because of this, I continue to look for better ways of doing…


Website launch for Wilcox Design and the Smithsonian National Museum of African Art

I recently completed the website for the Smithsonian National Museum of African Art online exhibition Sailors and Daughters: Early Photography and the Indian Ocean World. I was hired by Wilcox Design for the front-end development and custom WordPress theme development. The project was built with…


Moving this site to WordPress

ExpressionEngine (EE) is well suited to a custom site design. It's the fastest way that I know of to convert a static custom site design into a dynamic site powered by a CMS. I've been using the software since 2008 to build custom websites for my clients. I've always appreciated the approach that…


Removing index.php with ExpressionEngine and Media Temple

Two recent ExpressionEngine projects are hosted at Media Temple in the "DV" environment. Due to how the server is set up, the normal method of removing index.php from the URLs will not work. ExpressionEngine needs a "?" in the rewrite rules in this specific case. Otherwise, an error of "no input…


ExpressionEngine Secure Mode forms

While working on a couple of recent ExpressionEngine projects, we needed to process forms directly using PHP in the EE templates. We were seeing a mysterious error after submitting the form, "This form has expired. Please refresh and try again." It turns out ExpressionEngine needs an extra hidden…