So now we have our ExpressionEngine install pretty much ready we need to export our data from Textpattern. At this point it may be wise to upgrade your Textpattern install to the latest release.
During a bit of a forum tennis match almost 3 years back(!) Jon Hicks and I managed to refine an export method which had been used for Textpattern previously to incorporate clean Textile and entry comments. I’ve summarised the steps you will need to take and the code you will need to use in your Textpattern templates below.
Before you start you will need to install a couple of Textpattern plug-ins to ensure that we can get our data out in just the right format.
First is a Textpattern plug-in called msv_show_article_field which is written by Martin Å vihla. This plug-in allows us to return the Textile formatted content for the articles instead of the HTML equivalent. This means that our articles will maintain their nice clean Textile formatting once imported into ExpressionEngine. Bonus!
Next is a plug-in called glx_thiscomment (old dead link) which is written by Johan Nilsson. This plug-in allows us to pull out the plain text name value for comments rather than the name wrapped in a ‘href’ linking to the comment authors website URL or email (the default behavior for the built in Textpattern comment tag). This is essential if we want to maintain article comments.
Now create 2 new Textpattern forms, one called ‘export’ and one called ‘exportcomments’. Add the following code to your ‘export’ form:
TITLE: <txp:title />
AUTHOR: <txp:author />
DATE: <txp:posted format="%m/%d/%G %I:%M:%S %p" />
PRIMARY CATEGORY: <txp:category1 />
CATEGORY: <txp:category2 />
<txp:php>echo "-----"."\n";</txp:php>
BODY:
<txp:msv_show_article_field name="Body" />
<txp:php>echo "-----"."\n";</txp:php>
<txp:if_excerpt>
EXCERPT:<txp:msv_show_article_field name="Excerpt" /></txp:if_excerpt>
<txp:php>echo "-----"."\n";</txp:php>
<txp:if_comments>
<txp:comments form="exportcomments" break="" />
</txp:if_comments>
<txp:php>echo "--------"."\n";</txp:php>
…and the following code to your ‘exportcomments’ form:
COMMENT:
AUTHOR: <txp:glx_thiscomment key="name" />
EMAIL: <txp:comment_email />
URL: <txp:comment_web />
DATE: <txp:posted format="%m/%d/%G %I:%M:%S %p" />
<txp:message />
-----
Finally we need to call our ‘export’ form from a page template. Create a new page template called export and add the following code:
<txp:article_custom section="name-of-your-txp-section-here" form="export" limit="500" offset="0" />
Obviously you will need to tweak the parameters in your page template to suit the number of blog entries you have and the section from which you wish to export entries.
With all of the above done we should now be able to visit the public URL for this page template in our web browser (http://yourdomainname.com/export/) and see the output. I had over 400 entries to export so the page took a while to load. Once fully loaded view source and save a copy to a plain text file on your local machine (txpexport.txt for example).
I know I promised to cover how we import this data into ExpressionEngine but I’ve been rambling on for a while now so I’ll leave that until my next post. :)
Next Step…
Ok so a lot of this will be obvious but hey, here we go… I’ve decided to tackle the migration by setting up an ExpressionEngine Core Install on a sub domain (http://ee.nathanpitman.com) where I will be able to get everything up and running before I switch from the old Textpattern install for good.
First step quite obviously is to install ExpressionEngine Core (The free version of the CMS). I won’t explain how to do this, it’s dead easy and there are a ton of useful resources out there for you to look at if you’ve never used EE before.
First thing to do after you’ve completed the install is to modify the default custom field group for the default weblog to match the fields which you have in Textpattern. Textpattern has a ‘Body’ and ‘Excerpt’ field so you could simply rename the default ‘extended’ field if you want to feel at home.
As we’re migrating from Textpattern all our posts that we will be importing will be formatted with Textile or XHTML so we’re going to need to mimic that environment in ExpressionEngine. To do so we’ll need to install a handy little 3rd party plug-in called ‘Textile’! You can download the Textile Plug-in from the ExpressionEngine website. Once installed you will need to log-in to your ExpressionEngine control panel again and change the default formatting for the custom fields (body and excerpt) to use ‘Textile’ rather than XHTML. Don’t worry if some of your Textpattern blog posts have XHTML in them, Textile will still render these just right.
Finally, before we move on to exporting our blog entries from Textpattern we need to install a module that will allow us to more easily upload and manage files as we are used to doing so with the Textpattern ‘Files’ tab. The nearest equivalent that I have found over the years is the Low File Manager Module. It doesn’t provide download counts but it does pretty much everything else you could want and ties in beautifully with the ExpressionEngine File Upload preference settings.
Next we’ll be looking at how to export all our blog entries from Textpattern and pull them into ExpressionEngine. :)
Next Step…
I have made a cast iron decision. I am migrating (this) my personal blog from Textpattern to ExpressionEngine. I thought others might find it useful if I blogged my progress along the way.
So, this is the first of a number of posts which will explain the how, why when and what in as much detail as I can muster. If you’re looking to do the same then perhaps you’d like to follow me…
:)
Update: Step 1, Step 2, Step 3, Step 4, Step 5, Conclusion.
While working on a project recently I noted that ExpressionEngine uses a ‘JavaScript:history.go(-1)’ within the ‘User Message’ templates to allow you to return to the page from whence you came if you submit a form without completing all the required fields, perform a search and return no results etc.
I wanted to ‘do the right thing’ and ‘hacked’ an alternative as documented in this thread on the ExpressionEngine Forums. This hack picked up the referring page URL and passed that to the User Message template instead.
I kept a note of my hack and when I had to upgrade this particular install to the latest point release I set about re-implementing it. At this point Derek Jones helpfully pointed out that I could create an ExpressionEngine Extension to do the same job, negating the need to ‘re-implement’ the hack again and again. Thanks for the prod in the right direction Derek! Here’s my first ExpressionEngine Extension – ‘NoScript Messages’.
Download: ext.noscript_messages.php.zip
Obviously let me know in the comments if you have any thoughts on how this can be improved. Enjoy!
This week I had a rather nice email from a lady called Alice at Packt Publishing here in the UK. Packt are a publishing company specialising in IT focused books and have just published a new book last month called Building websites with ExpressionEngine 1.6.
The book, written by Leonard Murphy is aimed at ExpressionEngine beginners. Alice has been kind enough to send me a copy for review so once I’ve had a chance to read it I’ll report back and let you know my thoughts.
In the mean time why not take a look at a sample chapter.