March 05, 2003
- updated October 27, 2003
The
Edit Entry page in MovableType allows you to
Preview,
Save and
Delete and entry, but it does not allow you to
Rebuild an entry without saving it first. Similarly, when you modify some attribute related to an entry (such as comments, trackbacks or pings) there is not easy way to just rebuild the entry.
Why would you do you need to rebuild an entry? When you
delete or edit an entry’s comment, the entry must be rebuilt in order for your site to reflect the change (comments listed by the
mt-commenst.cgi are always up to date, even without rebuilding). However, rebuilding the entire site just because a comment was changed is a bit of an overkill.
The easiest way to rebuild just an entry and corresponding indices and archives is to simple
Save the entry - even though nothing in the entry has changed. When you save an entry, Movable type automatically rebuilds all the pages that might be affected by it. The problem with this approach is that saving an entry updates it’s
modifed_on date which is used in
MTEntries listings and in plugins, such as Kevin Shay’s
LastModified.
The following hack modified the Edit Template page by adding a “Rebuild” button. You can use this button to rebuild the entry without changing its modified_on date. The hack also changes the “Rebuild” link that you see after you modify comments, etc. to only rebuild the entry and associated indices and archives.
MovableType/tmpl/cms/edit_entry.tmpl
- Open the edit_entry.tmpl file in the tmpl/cms directory in your MovableType installation.
- Declare a JavaScript function that causes the current entry to be rebuilt
Find the section that says:
<script language="JavaScript">
<!--
and insert the following code after it:
function doRebuildEntry () {
window.location = '<TMPL_VAR NAME=SCRIPT_URL>?__mode=start_rebuild&blog_id=<TMPL_VAR NAME=BLOG_ID>&next=0&type=entry-<TMPL_VAR NAME=ID>&entry_id=<TMPL_VAR NAME=ID>&old_status=2';
}
- Change the “Rebuild” link to rebuild entry only
Find the line that says:
function doRebuild () {
and insert the following line after it:
return doRebuildEntry ();
- Add a “Rebuild” button for the top of the page
Find the line that says:
<input class="button-big" onClick="doRemoveEntry()" type="button" value="<MT_TRANS phrase="Delete Entry">">
and insert the following line after it:
<input class="button" onClick="doRebuildEntry()" type="button" value="<MT_TRANS phrase="Rebuild">">
- Add a “Rebuild” button for the bottom of the page
Repeat previous step (the code that displays the buttons is in two locations because you can choose display the buttons on top or bottom of the page).
- Save the file.