translate.pngThe Translate app for Slack makes it super easy to instantly translate text from within Slack.

With the Translate App for Slack version 2, you can now translate text easily in one of three ways:

  • Using the /translate command
  • Using a simple form, choosing the desired language from a dropdown field
  • Automatically translate all of your messages in a specific channel or direct message - a huge time saver for multi-language teams.

Version 2 now supports over 100 languages and includes interactive buttons and settings that enhance the /translate method, making it easier to get the translations you need.

Installation:
To install (or update) Translate, use the Add To Slack button below:

Add to Slack

Or install directly from the Translate page in the Slack App Directory.

Usage: /translate command

Use the following command format to translate text:

/translate [lang] [text to translate]

Where [lang] is equal to a language code such as fr, es, de, etc. (For a full list of language codes, click here.)

The source text doesn't have to be English, the app will attempt to auto-detect the source language. This means, for example, that you can use it to translate things into English, if desired.

The /translate command and the translation will only be visible to you -- it will not be seen by other team members in the channel .... BUT, with version 2, you will also see a [Post This] button that you can use to optionally post the translation to the current channel or direct message.

There is a 1000 character limit per command.

Usage: Translate Form

Instead of using the /translate command, a new option in Version 2 is to use the Translate Form. You can bring up the form in one of two ways:

  • Use /translate by itself, without specifying language or text.
  • Mention @translate to see a menu of buttons, then click the [Translate] button. (You can also send a Direct Message to @translate to get the same menu of buttons.)

Once the form appears, choose the language you want to translate to, enter your text (in any language) and submit. (If the language you are looking for is not in the dropdown list, please let me know)

Usage: Automatic Translation

Automatic translation is a powerful feature that can save you tons of time if you frequently interact with team members who speak a different language. You can setup any channel (or DM) to automatically translate every message you send to that channel. You don't need to enter a command, fill in a form, click a button, or copy-and-paste. Just send your message in your own language, and within a few seconds, it will be translated automatically for all channel members to see.

The @translate bot performs the automatic translation for you.

To setup automatic translation on a channel, you first need to invite @translate to the channel. The easiest way to do this is to simply mention @translate in a message -- then Slack will inform you the bot is not a member of the channel, and give you a link to invite. Once a member of the channel, mentioning @translate will bring up a menu of buttons. Choose the [Settings] button to setup or edit the automatic translation settings for that channel.

Choose the language you want to translate into, and the Display Format. The latter affects how the translation appears in the channel for all members to see. Replace will completely replace the message in your language with the translated version. Source First will show the message in your language first, with the translation appearing below. Translation First will show the translated message first, with the original source text below. While the Replace option is the cleanest, the other options may help provide context for you as you review past conversations (since they include the original text in your language). You can change these settings at any time. Repeat for each channel as desired.

You can also setup automatic translation on a Direct Message (DM), but the @translate bot needs to be part of the DM. To do this, create a new DM that includes both @translate and the person you want to DM with. Now this new DM includes @translate, so the bot can perform auto-translations. Within the new DM, mention @translate to get the menu buttons, choose [Settings], etc., as described above.

Free and Paid Plans

Starting with version 2, there are both free and paid plans available for Slack teams. If you have been using version 1.0, you will continue to get all of the same features and functionality on the Free plan for version 2 (plus some additional features too). The Pro plan enables you to share translations directly to the channel and to setup automatic translation on an unlimited number of channels ... for only $19 per month per team. The Plus plan costs $49 per month per team and is designed for teams that do high volumes of translations. Free Trial: All of the features are available for free for 30 days, enabling you to try them and assess their value to your team.

Here are the plan details:

Free Plan

  • translate using the /translate command
  • translate using a form
  • 100+ languages supported
  • up to 50,000 characters translated per month

Pro Plan: 19 USD per month

  • everything in the Free plan, plus:
  • Post translations directly to the channel
  • Automatic translations (unlimited number of channels or DMs)
  • up to 250,000 characters translated per month

Plus Plan: 49 USD per month

  • everything in the Pro plan, plus:
  • up to 1,000,000 characters translated per month
  • top priority for new feature requests

Try it Now
To install (or update) Translate, use the Add To Slack button below:

Add to Slack

Or install directly from the Translate page in the Slack App Directory.

Contact Me:
For help, questions, or feedback, you can use the [Contact] button from the app. Or, you can reply here, tweet at me: @mthacks on Twitter, or by email: mark@mt-hacks.com

Privacy Policy:
The Translate app does not store any messages translated, in any language. The app receives the contents for the translation and it sends back the translation. During installation and with each translation, the app receives basic information about your team and channel, and that information is stored in order to save your settings, remember your current plan, and monthly character count.

translate.pngThe Translate app for Slack makes it super easy to instantly translate text from within Slack.

Note: this post describes an older version of Translate. Click here for the new version

Example:

/translate es Hello World!

Installation:
To install Translate, use the Add To Slack button below:

Add to Slack

Usage:
After installing the app, use the following command format to translate text:

/translate [lang] [text to translate]

Where [lang] is equal to one of the following language codes:

  • es (Spanish)
  • de (German)
  • en (English)
  • fr (French)
  • ja (Japanese)
  • zh-CN (Chinese - simplified)
  • ar (Arabic)
  • fa (Persian)
  • ko (Korean)
  • hi (Hindi)
  • th (Thai)
  • da (Danish)
  • nl (Dutch)
  • ru (Russian)
  • tr (Turkish)
  • it (Italian)
  • sv (Swedish)
  • mn (Mongolian)
  • no (Norwegian)
  • ro (Romanian)
  • iw (Hebrew)
  • uk (Ukrainian)
  • pl (Polish)
  • sk (Slovak)
  • pt (Portuguese)
  • hr (Croatian)
  • fi (Finnish)
  • zh-TW (Chinese - traditional)
  • vi (Vietnamese)
  • hu (Hungarian)
  • id (Indonesian)
  • lt (Lithuanian)
  • cs (Czech)
  • la (Latin)
  • ms (Malay)
  • ne (Nepali)
  • tl (Filipino/Tagalog)
  • eu (Basque/Euskera)
  • ta (Tamil)
  • hy (Armenian)
  • bg (Bulgarian)
  • cy (Welsh)
  • el (Greek)
  • ca (Catalan)
  • is (Icelandic)
  • sr (Serbian)
  • eo (Esperanto)
  • et (Estonian)
  • lv (Latvian)

If you are looking for a language not listed above, let me know -- it might just be easy enough to add.

The source text doesn't have to be English, the app will attempt to auto-detect the source language. This means, for example, that you can use it to translate things into English, if desired.

The /translate command and the translation will only be visible to you -- it will not be seen by other team members in the channel.

There is a 1000 character limit per command.

Contact Me:
For help, questions, or feedback, you can reply here, tweet at me: @mthacks on Twitter, or by email: mark@mt-hacks.com

Privacy Policy:
The Translate app does not store any information about your Slack team or channel. The app receives the contents for the /translate command and it sends back the translation. During installation and with each /translate command, the app does receive the name or your team and channel, but that information is not stored in any way, as it isn't needed to provide the translation.

bootstrap-preview.pngBootstrap Theme for MT is a Theme powered by Twitter Bootstrap and the ThemeManager plugin. It is a fully responsive theme, which means that that the layout automatically adjusts to suit the screen, so it looks great and readable on smartphone, tablets, as well as laptop/desktop browsers. Bootstrap Theme is based largely on The Bootstrap theme for Wordpress, so much of the credit goes to Konstantin Obenland.

Bootstrap Theme Demo

MT Hacks was recently updated to use Bootstrap Theme, browse the site to check out features. Be sure to try it on a tablet or smartphone too. Also, a demo/dev site can be seen here.

Features

Version 1.0 of Bootstrap Theme is designed to be simple and easy to setup. More features may be added in future. The theme supports Facebook Comments (optional) - support for MT commenting may come in a future version. Bootstrap Theme has customizable menus and sidebar widgets, as well a host of other Theme Options:

bootstarptheme-logo.png

bootstraptheme-menu.png

bootstraptheme-social.png

Boostrap Theme includes pagination powered by my Pagination plugin.

Open Source

Bootstrap Theme is open source and available at:
https://github.com/markcarey/mt-theme-bootstrap

Suggestions and contributions are welcome. Documentation is one area that is lacking...

This plugin fixes an issue introduced with Google Chrome v17 that causes admin entry previews to display a blank screen.

This seems to happen only when the entry contains img tags with fully qualified src URLs from the same domain as the MT install. For some reason, Chrome now suspects this to be an XSS attack and will not render the iframe with he entry preview.

This plugin adds a response header that tells Chrome to skip its XSS checking for this request. It only adds this for admin Entry Previews.

https://github.com/markcarey/mt-plugin-preview-xss-fix

The Twitter Tools plugin for Movable Type enables you to easily and automatically share your MT entries on Twitter. The plugin pushes tweets directly to Twitter immediately when entries are published, avoiding the delays of other services. Future versions of the plugin will add additional Twitter integration features.

Post New Entries to Twitter Within Seconds of Publishing

There are a number of free services out there that will automatically share your entries to your Twitter stream. In most cases, these services work by periodically checking your blog's RSS feed for new entries to post. While this works, it means a time lag or delay before new items get posted to Twitter. The delays get worse and more frequent when these services become popular. TwitterFeed has over 1,000,000 users -- because they have so many RSS feeds to check, it can often be a long time before they get around to yours. The Twitter Tools plugin solves this delay problem by pushing the tweets directly from MT, immediately, when the entry is published.

How it Works

The plugin is pretty simple. After installing the plugin, you authorize MT to auto-tweet when new entries are published. After that, every new entry gets tweeted quickly and directly and automatically.

Other optional features include:

  • Add a prefix to tweet (such as "New Post:")
  • Automatically add hashtags to a tweets for a blog
  • Automatically use Entry tags as hashtags
  • URL Shortening using the URL shortener of your choice (including Bit.ly, Awe.sm, Supr, YOURLS, TinyURL, and more). (yes, you can enter your own shortener API key and yes, Bit.ly Pro domains 'just work')

Twitter Tools Pro

With Twitter Tools Pro, you get the following extra features:

  • Post to both blog and author Twitter feeds at the same time. This is great for multi-author blogs, or if you want to post to both your person Twitter account and to your blog's Twitter account.
  • Optional Filters can be used to only tweet entries with specific Categories or Tags
  • Optional customized Tweet text for each entry (the default is the Entry title).
  • Option to use your own Twitter App, enabling you to customize the "via" text and link shown in Tweet metadata
  • More features are work-in-progress, including importing tweets and more.

Template Tags

Twitter Tools includes one new template tag:

  • <mt:EntryTwitterShortURL> - Outputs the short URL created when the entry was tweeted (using the URL shortener of your choice). You can use this template tag to display the short URL to your readers and/or integrate it into Twitter share links or Tweet Buttons -- great for analytics, as your readers use the the same short URL as you do. Note: if the entry was not tweeted by Twitter Tools, this tag will output an empty string. This tag also works on PHP-dynamic templates.

Requirements

All required modules are included in the download file for Twitter Tools. See installation steps below.

Installation

  1. Download and extract the zip file, then upload the contents of the 'plugins' directory into the 'plugins' directory of your Movable Type installation (often /cgi-bin/mt/plugins/).
  2. Upload the contents of the 'extlib' directory into the 'extlib' directory of your Movable Type installation (often /cgi-bin/mt/extlib/).
  3. Upload the contents of the 'mt-static' directory into the 'mt-static' directory used by your Movable Type installation.
  4. Go to the blog-level plugin settings for Twitter Tools and click the Signin with Twitter button to authorize your blog to post to Twitter.
  5. Return to the settings once again and click the "Auto-tweet" setting to enable auto-posting to Twitter, and adjust other settings as desired.
  6. (Optional for Pro) Authors can also connect their MT author profile with a Twitter account by choosing the "Twitter Account" item from the left menu of their user profile. Note that entries will be posted to Twitter only if "auto-tweet" is enabled in blog settings for the plugin.

Get Twitter Tools Pro

Commercial License for 1 to 10 blogs - $97

">

Blog Network License for 10+ blogs - $249

">

Get Twitter Tools

Twitter Tools is free for non-commercial use:

Download Now

,<$MTAjaxRatingVoteCount type="twittertoolsdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="twittertoolsdownloads"$>

As always, comments, questions, and suggestions are welcome.

Future versions of Twitter Tools may include other integration features such as importing Tweets into a blog and more. Suggestions are welcome.

Follow @mthacks on Twitter for updates and other MT and Twitter hacks.

The Facebook Tools plugin for Movable Type enables you to easily and automatically share your MT entries on Facebook. The plugin pushes updates directly to Facebook immediately when entries are published, avoiding the delays of other services. Future versions of the plugin will add additional Facebook integration features.

Post New Entries to Facebook Within Seconds of Publishing

There are a number of free services out there that will automatically share your entries to Facebook. In most cases, these services work by periodically checking your blog's RSS feed for new entries to post. While this works, it means a time lag or delay before new items get posted to Facebook. The delays get worse and more frequent when these services become popular. TwitterFeed has over 1,000,000 users and NetworkedBlogs has over 300,000 -- because they have so many RSS feeds to check, it can often be a long time before they get around to yours. The Facebook Tools plugin solves this delay problem by pushing the Facebook updates directly from MT, immediately, when the entry is published.

How it Works

The plugin is pretty simple. First you register your Facebook Application (easy to do, takes less than a minute) and then authorize MT to post updates when new entries are published. After that, every new entry gets pushed to Facebook quickly and directly and automatically. The updates include an image from your entries (if present).

Facebook Tools Pro

With Facebook Tools Pro, you get the following extra features:

  • Post updates to Facebook Pages instead of user profiles
  • Post to both blog and author profiles at the same time. This is great for multi-author blogs, or if you want to post to both your person profile and to your blog's Facebook Page.
  • Optional Filters can be used to only share entries with specific Categories or Tags
  • Optional customized status message for each entry (the default is the Entry title).
  • Option to use a different Facebook App for each blog in your system.

Requirements

Most required modules are included in the download file for Facebook Tools. Because the Facebook API uses "Oauth 2.0", it must use SSL. As such, one of following are required (plus any dependancies), but may already be installed by default on your server:

If your system doesn't not already have one of these, note that the latter is known to be easier to install.

Installation

  1. Download and extract the zip file, then upload the contents of the 'plugins' directory into the 'plugins' directory of your Movable Type installation (often /cgi-bin/mt/plugins/).
  2. Upload the contents of the 'mt-static' directory into the 'mt-static' directory used by your Movable Type installation.
  3. Create a Facebook Application. This is easier than it sounds, and it only few settings are needed here. Choose a name for your App, which can be the same name as your blog. The upload a Logo and an icon image -- of these the icon is more important. (if you want you can use my Logo image and my icon image.) Then click on the "Website" tab on the left, and fill the "Site URL" field with the domain of your admin MT login eg. http://www.mydomain.com. Then save the settings, you can leave the rest of the settings the way they are.
  4. Copy the "Application ID" and "Application Secret" in the settings for the plugin, then save the settings.
  5. Return to the blog-level plugin settings and click the Facebook Connect button to authorize your blog to post to Facebook. The Facebook authorization dialog will ask for the necessary permissions, click "Allow". After authorization, if using the Pro version of the plugin, you will be given an option to choose one of your administered Facebook Pages to post updates to.
  6. Return to the settings once again and click the "Auto-Share" setting to enable auto-posting to Facebook, and adjust other settings as desired.
  7. (Optional for Pro) Authors can also connect their MT author profile with a Facebook account by choosing the "Facebook Account" item from the left menu of their user profile. Note that entries will be posted to Facebook only if "auto-share" is enabled in blog settings for the plugin.

Get Facebook Tools Pro

Commercial License for 1 to 10 blogs - $97

">

Blog Network License for 10+ blogs - $249

">

Get Facebook Tools

Facebook Tools is free for non-commercial use:

Download Now

,<$MTAjaxRatingVoteCount type="facebookdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="facebookdownloads"$>

As always, comments, questions, and suggestions are welcome.

Future versions of Facebook Tools may include other integration features such as integration with Facebook Likes, Comments, and more. Suggestions are welcome.

For legacy reasons, Movable Type and Melody publish future or "scheduled posts" by way of a periodic task. In short, these means that periodically MT will checked to see if there are any entries with a Scheduled status that have come due, and then publish them. A side-effect of this is that in most cases an entry scheduled for 10:30 won't actually publish until 10:46 or 11:15, or even later (depending on your MT configuration and other periodic tasks).

But what if the post is time-sensitive, and you really want that post to live at 10:30?

This plugin aims to address this by creating a "TheSchwartz" job to publish the post. When the entry is saved, a job gets created for the entry, configured to run at desired publishing date and time. Combine this with running the run-periodic-tasks in daemon mode and scheduled posts should publish very close to the scheduled time.

FuturePost Job on GitHub

I have created a version of Twitter's new official Tweet Button that works as a Chrome Extension. With this extension you can view the Tweet Count and Share the page for all web pages, even pages that don't have embedded tweet buttons.

The Tweet Count shows in red over the T icon to the right of the address bar, so you immediately know how how many tweets the page has received. If you want to Tweet it, just click on the icon and Twitter's official share box will appear, the same way it would if you had clicked a Tweet Button embedded on the page itself.

Simple as that.

Click here to get the Tweet Button Chrome Extension.

A year ago, I created a Greasemonkey user script that displays the most recent 5 tweets for the query that you are searching for at the top of Google search results.

Today I have created one that does the same thing for Google Buzz results:

This works in both FireFox and Chrome.

Currently, the Buzz results are restricted to actual Buzz updates -- it excludes updates that are imported from other services sich as Twitter, Google Reader, RSS feeds, etc. This seemed to provide the best experience, but a future version may have options/settings for adjusting this. Buzz results are presented in plain text, limited to the first 140 characters, so they don't take up too much screen space on the Google results page. A "more »" link appears when the Buzz has additional text or media (links, images, etc.).

The Buzz results are powered by the Buzzzy API. A big thanks to the creators of Buzzzy for there work in creating a search engine and API for Buzz updates!

Get Buzz results on your Google searches:

FireFox

  1. If you don't already have it, install the Greasemonkey add-on for Firefox.
  2. Click the "Install" button on the "Buzz Search Results on Google" page on userscripts.org.

Chrome

  1. Install the Google Chrome Extension from the Extensions Gallery: Buzz Results on Google Chrome Extension.
  2. Click the "Install" button on the above page.

If you like this, please tweet it by clicking here! (short url for this page is https://mt-hacks.com/72Uw)

Feedback and suggestions are welcome, via comments on this entry, or via Twitter reply, Google Buzz, etc.

A year ago, I created a Greasemonkey user script that displays the most recent 5 tweets for the query that you are searching for at the top of Google search results.

Today I have created an Extension for Google Chrome that does the same:

Get realtime Twitter results on your Google searches using Google Chrome:

  1. Install the Google Chrome Extension from the Extensions Gallery: Twitter Search Results on Google Chrome Extension.
  2. Click the "Install" button on the above page.

If you like this, please tweet it by clicking here! (short url for this page is https://mt-hacks.com/bkAB)

Feedback and suggestions are welcome, via comments on this entry, or via Twitter reply, Google Buzz, etc.

What about a Google Wave plugin for Movable Type, as a way to engage in real-time conversations about blog entries. What do think? Below is just a test, you should see an embedded Wave. If you have a Google Wave account, please join the wave and share your thoughts. (I don't have any Google Wave invites, sorry). One of the interesting things about using a Wave for blog comments is that after you join a wave on a blog site, that Wave will show up in your Google Wave inbox going forward. This enables you rejoin the conversation later directly from within Wave. Some bloggers may worry that this may mean less return traffic to their sites, which could be true, but it certainly could boost the amount of discussion around blog entries.

Twitter Commenters is a plugin for Movable Type that enables commenters to sign-in and comment on your blog using their Twitter account. Versions 2+ includes support for Twitter's OAuth authorization system and enables commenters to automatically share their comments to their Twitter stream.

Note: Version 2.1 fixes a serious bug when using OAuth, users would get a Comment Submission Error, saying that Name and Email are required. All sites running v2.0 should upgrade to v2.1 using the download link below. Simply upload the new files, no need to adjust settings or templates

Basic Auth (default):

OAuth:

Twitter comment authentication works like other auth methods in MT -- once you have installed the plugin you can enable Twitter as one of the auth options, as shown in the image above.

How It Works - Basic Auth

When the user enters their Twitter username and password in the form (shown above), the plugin submits those to the Twitter API to verfiy the credentials. If verified, the user can then post comments using their Twitter account. Their Twitter 'display name' will be shown beside their comments, and their Twitter avatar (profile photo) will be imported and shown beside their comments (if userpics are enabled in your templates).

Note that users' Twitter passwords are not stored in the MT database. An upcoming version of this plugin will enable Twitter's new OAuth support, in which case passwords would never be sent to MT at all. That version will like have an option for commenters to cc. their comments to their Twitter account. Stay tuned.

How It Works - OAuth

New in Version 2.0, you can optionally enable Twitter's new OAuth authorization system. With OAuth, user never have to submit their password info to your server. Instead, they click a "sign in with Twitter" button and they are taken to a page on Twitter.com asking them to authorize the application (see image above). One they click "Allow" they are returned to your site and they then post comments using their Twitter account. As with basic auth, their Twitter 'display name ' will be used as well as their Twitter avatar (profile photo).

Share Comments on Twitter

A new feature in version 2.0, only supported via OAuth, enables commenters to optionally share their comment to their Twitter stream. All they have to do is click a checkbox, no need to re-authorize or enter Twitter account info.

Try it Now

MT Hacks has the new OAuth method enabled. Try it now:

Click here to login with your Twitter account. After logging in, you will be returned to this entry, and you can leave a comment below.

Requirements

  • Net::Twitter 2.07 perl module (included with plugin) (note: do not upgrade to version 2.9+ of this module)
  • Net::Twitter::OAuth perl module (included with plugin)
  • Net::OAuth perl module (included with plugin)
  • Net::OAuth::Simple perl module (included with plugin)
  • JSON::Any perl (included with plugin)

Note: Net::Twitter requires newer versions of the libwww-perl collection of Perl modules. I am not sure what the minimum version required is, but on my server, I had to upgrade in order to get Net::Twitter to work. So if you get strange errors, try installing the latest version in your 'extlib' directory of your MT. Update: A common error message is: "Can't locate object method "default_header" via package "LWP::UserAgent" -- if you see this error, this the problem.

Download Twitter Commenters

,<$MTAjaxRatingVoteCount type="twittercommentersdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="twittercommentersdownloads"$>

Installation

  1. Upload the contents of the 'plugins' folder to the 'plugins' directory for your MT install.
  2. Upload the contents of the 'mt-static' folder to your 'mt-static' directory.
  3. For each blog you want to enable, go to Preferences > Registration and check the box for 'Twitter'.

Enabling Twitter OAuth

Unfortunately, this is not as easy as it could be, maybe Twitter will make it easier in future. To set this up you need to create an Application on Twitter:

  1. While logged in to your Twitter account, go to http://twitter.com/oauth_clients/new.
  2. Fill out the form on that page:
    • Give it a unique name and description.
    • For 'Application Website', enter https://mt-hacks.com/twittercommenters.html. For 'Organization', enter MT Hacks.
    • For 'Website' enter https://mt-hacks.com.
    • For 'Application Type' choose 'Browser'.
    • For 'Callback URL' enter the full URL to your comments script followed by '?__mode=login_external&key=Twitter'. Example: http://www.domain.com/cgi-bin/mt/mt-comments.cgi?__mode=login_external&key=Twitter
    • For 'Default Access type' choose 'Read & Write'.
    • Check the box for 'Yes, use Twitter for login'
    • Hit the 'Save' button.
  3. After saving the application, you should now see a screen with a 'Consumer key' and 'Consumer secret'. Copy those to the system plugin Settings (System Overview > Plugins > Twitter Commenters > Settings). and save the plugin settings.
  4. To enable the share comment on Twitter option, add the <mt:TwitterShareCommentOption> tag below the comment text part of your comment form. This will display a checkbox option to people logged in via Twitter OAuth.
  5. Rebuild your entry pages and test it out

As always, feedback is appreciated.

Follow @mthacks on Twitter for updates and other MT and Twitter hacks.

A new Open Source project has been launched today called Open Melody, which is a fork of Movable Type Open Source. Open Melody has been created by the MT developer community in order to take the product to the next level.

Why fork Movable Type? The Open Melody FAQs explain, "The community created Melody out a shared passion for Movable Type and a shared desire to see it flourish as a platform. We felt that the best and quickest way to achieve that goal was to create a product in which the community was inherently entrusted with a greater degree of control over its direction, communication channels and roadmap, and rewarded with more transparency and a greater sense of belonging."

In the spirit of being driven by the community, the current state of Open Melody is very similar to the latest version of MT. Going forward, features will be added and changes will be made in accordance with the community collaboration. So its too early to say what Melody will look like, and how it will be different from MT. Time will tell.

Why This is a Good Thing

Over two years ago, Six Apart, the creator of Movable Type open sourced the code for the core Movable Type application. While its was an exciting and bold move, the announcement and product naming choices were confusing to many -- the differences between Movable Type Open Source and the Movable Type Commercial product and closed source add-ons sold by Six Apart weren't easy to grasp, and some even disputed the newly open source nature of core application.

Bottom line is that the core of MT has been open source for 2 years, so what are the reasons and potential benefits of a separate branch of the application, why do we need Melody? In my opinion, the key benefit is that Melody will be developed completely by the community, with no direct ties to a commercial for-profit enterprise. While core MT has been open source licensed, the product planning process and much (but not all) of the discussion, prioritization, and release planning and scheduling were closed to those outside of Six Apart. Six Apart also acted as a gatekeeper to code contributions, with final say over what made into the final product. Both of these may be common for open source projects lead by commercial entities, and are fair enough -- Six Apart is a business and like any business they can and should make decisions based on the commercial interests of the company. But for the community of developers, consultants, and users, this didn't feel very open, at least in my opinion. The feature roadmap was being driven internally at Six Apart, not in a collaborative way with the community at large. [This is not to say that Six Apart did not listen to feature suggestions of the community -- many of the features added to the product were in response to community requests] The reality, I think, is that the internal business objectives that informed the development and product planning process are not fully aligned with the objectives of the broader community. This is an unavoidable reality, there is no right or wrong here, only different contexts and thus different perspectives and goals. For these reasons, I think many developers and end-users shied away from Movable Type -- despite the open source license, the product was controlled by a single for-profit company, and the ability of the external community to contribute and collaborate was limited.

Open Melody changes that dynamic. The core code becomes freed from the business concerns and objectives, thus enabling it to evolve in a way that is fully aligned with objectives and desires of the community. This means that roadmap planning, feature discussions, and development will all be completely open and collaborative. I hope that this will help attract more developers to the project and lead to faster release cycles and richer features that users want to see. With Open Melody, everyone wins: users, developers, community, the product, and even Movable Type and Six Apart. Its going to exciting to see how Melody evolves.

Current User of Movable Type?

If you are a current user of MT, you may be wondering what this means for you, should you switch when the time comes, or stay with MT? Today, there is a single, easy answer: wait and see. Melody is just getting started and it will probably be at least 6 months before a stable release is ready. So sit back and wtach how it evolves -- or better yet, contribute! Even if you are not a programmer, you can contribute by offering feature suggestions, etc. Another important thing to keep in mind is that a goal of Melody is to maintain compatibility with MT, so you should be able to switch back and forth, and use the same plugins and themes with either.

Melody and MT Hacks

I believe in the goals behind Melody and I hope it will be successful. I plan to contribute however I can, while at the same continuing to support the Movable Type platform. My goal is that plugins from MT Hacks will be supported on both platforms, which is aligned with Melody's objective of compatibility with MT. So if you use plugins by MT Hacks and you decide to move to Melody in future, you can continue to use the same plugins, and if you continue with MT, you can also keep using the same plugins. Of course, like any core MT upgrade, sometimes plugin updates are required, but those should work on both platforms.

Twitter Commenters is a plugin for Movable Type that enables commenters to sign-in and comment on your blog using their Twitter account. Versions 2 includes support for Twitter's OAuth authorization system and enables commenters to automatically share their comments to their Twitter stream.

Basic Auth (default):

OAuth:

Twitter comment authentication works like other auth methods in MT -- once you have installed the plugin you can enable Twitter as one of the auth options, as shown in the image above.

How It Works - Basic Auth

When the user enters their Twitter username and password in the form (shown above), the plugin submits those to the Twitter API to verfiy the credentials. If verified, the user can then post comments using their Twitter account. Their Twitter 'display name' will be shown beside their comments, and their Twitter avatar (profile photo) will be imported and shown beside their comments (if userpics are enabled in your templates).

Note that users' Twitter passwords are not stored in the MT database. An upcoming version of this plugin will enable Twitter's new OAuth support, in which case passwords would never be sent to MT at all. That version will like have an option for commenters to cc. their comments to their Twitter account. Stay tuned.

How It Works - OAuth

New in Version 2.0, you can optionally enable Twitter's new OAuth authorization system. With OAuth, user never have to submit their password info to your server. Instead, they click a "sign in with Twitter" button and they are taken to a page on Twitter.com asking them to authorize the application (see image above). One they click "Allow" they are returned to your site and they then post comments using their Twitter account. As with basic auth, their Twitter 'display name ' will be used as well as their Twitter avatar (profile photo).

Share Comments on Twitter

A new feature in version 2.0, only supported via OAuth, enables commenters to optionally share their comment to their Twitter stream. All they have to do is click a checkbox, no need to re-authorize or enter Twitter account info.

Try it Now

MT Hacks has the new OAuth method enabled. Try it now:

Click here to login with your Twitter account. After logging in, you will be returned to this entry, and you can leave a comment below.

Requirements

  • Net::Twitter 2.07 perl module (included with plugin) (note: do not upgrade to version 2.9+ of this module)
  • Net::Twitter::OAuth perl module (included with plugin)
  • Net::OAuth perl module (included with plugin)
  • Net::OAuth::Simple perl module (included with plugin)
  • JSON::Any perl (included with plugin)

Note: Net::Twitter requires newer versions of the libwww-perl collection of Perl modules. I am not sure what the minimum version required is, but on my server, I had to upgrade in order to get Net::Twitter to work. So if you get strange errors, try installing the latest version in your 'extlib' directory of your MT. Update: A common error message is: "Can't locate object method "default_header" via package "LWP::UserAgent" -- if you see this error, this the problem.

Download Twitter Commenters

,<$MTAjaxRatingVoteCount type="twittercommentersdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="twittercommentersdownloads"$>

Installation

  1. Upload the contents of the 'plugins' folder to the 'plugins' directory for your MT install.
  2. Upload the contents of the 'mt-static' folder to your 'mt-static' directory.
  3. For each blog you want to enable, go to Preferences > Registration and check the box for 'Twitter'.

Enabling Twitter OAuth

Unfortunately, this is not as easy as it could be, maybe Twitter will make it easier in future. To set this up you need to create an Application on Twitter:

  1. While logged in to your Twitter account, go to http://twitter.com/oauth_clients/new.
  2. Fill out the form on that page:
    • Give it a unique name and description.
    • For 'Application Website', enter https://mt-hacks.com/twittercommenters.html. For 'Organization', enter MT Hacks.
    • For 'Website' enter https://mt-hacks.com.
    • For 'Application Type' choose 'Browser'.
    • For 'Callback URL' enter the full URL to your comments script followed by '?__mode=login_external&key=Twitter'. Example: http://www.domain.com/cgi-bin/mt/mt-comments.cgi?__mode=login_external&key=Twitter
    • For 'Default Access type' choose 'Read & Write'.
    • Check the box for 'Yes, use Twitter for login'
    • Hit the 'Save' button.
  3. After saving the application, you should now see a screen with a 'Consumer key' and 'Consumer secret'. Copy those to the system plugin Settings (System Overview > Plugins > Twitter Commenters > Settings). and save the plugin settings.
  4. To enable the share comment on Twitter option, add the <mt:TwitterShareCommentOption> tag below the comment text part of your comment form. This will display a checkbox option to people logged in via Twitter OAuth.
  5. Rebuild your entry pages and test it out

As always, feedback is appreciated.

Follow @mthacks on Twitter for updates and other MT and Twitter hacks.

Twitter Commenters is a plugin for Movable Type that enables commenters to sign-in and comment on your blog using their Twitter account.

Twitter comment authentication works like other auth methods in MT -- once you have installed the plugin you can enable Twitter as one of the auth options, as shown in the image above.

How It Works

When the user enters their Twitter username and password in the form (shown above), the plugin submits those to the Twitter API to verfiy the credentials. If verified, the user can then post comments using their Twitter account. Their Twitter 'display name' will be shown beside their comments, and their Twitter avatar (profile photo) will be imported and shown beside their comments (if userpics are enabled in your templates).

Note that users' Twitter passwords are not stored in the MT database. An upcoming version of this plugin will enable Twitter's new OAuth support, in which case passwords would never be sent to MT at all. That version will like have an option for commenters to cc. their comments to their Twitter account. Stay tuned.

Try it Now

Click here to login with your Twitter account. After logging in, you will be returned to this entry, and you can leave a comment below.

Requirements

  • Net::Twitter perl module (included with plugin)
  • JSON::Any perl (included with plugin)

Note: Net::Twitter requires newer versions of the libwww-perl collection of Perl modules. I am not sure what the minimum version required is, but on my server, I had to upgrade in order to get Net::Twitter to work. So if you get strange errors, try installing the latest version in your 'extlib' directory of your MT.

Download Twitter Commenters

,<$MTAjaxRatingVoteCount type="twittercommentersdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="twittercommentersdownloads"$>

Installation

  1. Upload the contents of the 'plugins' folder to the 'plugins' directory for your MT install.
  2. Upload the contents of the 'mt-static' folder to your 'mt-static' directory.
  3. For each blog you want to enable, go to Preferences > Registration and check the box for 'Twitter'.

As always, feedback is appreciated.

Follow @mthacks on Twitter for updates and other MT and Twitter hacks.

Over at my Moopz site, I have just released a new Twitter Bookmarklet that make it easy to submit the link of the page you are reading. A pop up appears with a Twitter-like interface, enabling you to quickly tweet the page you are reading. It is designed to be clean and easy to use, a few seconds and you are done. The Twitter Bookmarklet looks like this:

Click here to head over to Moopz to get the Bookmarklet or to try it now.

During the past few weeks, there has been a lot of discussion about whether Twitter's "real time search" could pose a threat to Google.

While I am not sure if Twitter poses a threat to Google, I think it is clear that real-time search is increasingly important. And you can be sure that Google knows it. Will Google try to acquire Twitter, or take some other approach? Time will tell, but rather that wait, I decided to get realtime twitter search results on Google today. I created a Greasemonkey user script that does exactly this. It displays the most recent 5 tweets for the query that you are search for, giving both real-time Twitter search results and Google results on the same page:

I have been using it for a few days now and I think it really adds some freshness to Google search results pages. Not only do you get the web pages that have been indexed by Google, but also relevant twitter conversations that are happening right now. One day I think we may see Google release something like this, but until then there is the Twitter Search Results on Google Greasemonkey script.

Get realtime Twitter results on your Google searches:

  1. If you don't already have it, install the Greasemonkey add-on for Firefox.
  2. Click the "Install" button on the "Twitter Search Results on Google" page on userscripts.org.

If you like this, please tweet it by clicking here! (short url for this page is http://moopz.com/9ZDS)

Update: Also see my new Twitter Bookmarklet and Tweet This Page Link tool.

Feedback and suggestions are welcome, via comments on this entry, or via Twitter reply, FriendFeed, etc.

Selective Cloner is plugin for Movable Type that enables administrators to clone (copy) existing blogs. Unlike the blog cloning tool that comes with MT, Selective Cloner only clones Blog Settings, Permissions, and Templates. This plugin enables you to quickly create new blog with all of the same settings and templates as an existing blog -- in seconds you can have a new blog up and running, with the same look and feel. This is handy for blog networks or organizations who have more than one blog with the same templates.

Installation

Upload the contents of the 'plugins' directory to the 'plugins' directory of your MT install.
Go to "Manage Blogs" at the system level, click the checkbox beside the blog you want to clone, and choose "Clone Blog (Perms,Settings,Templates)".

License: GPL

Download Selective Cloner

,<$MTAjaxRatingVoteCount type="selectiveclonerdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="selectiveclonerdownloads"$>

Pagination is plugin for Movable Type that enables you to paginate lists of entries. For example, at the bottom of your home page, you could add a "Next" link so your readers can go to "Page 2" and read previous entries. You can display a list of linked page numbers to enable visitors to jump to any page number they want.

With Pagination Pro, you can also paginate your Category, Author, and date-based archives, and even paginate your Entry archives, displaying only a small number of comments on each page. New in version 1.5: You can also paginate long entries by splitting them up into multiple pages.

New Features in Pagination 1.5

  • Support for MT 4.2 (minor bug fixes that may affect some sites running MT 4.2+)
  • New template tags for next / previous page numbers
  • Split long entries into multiple pages by easily inserting page breaks (Pro only)

Try it Now - Live Demo

The MT4 Test Blog has the Pagination Pro plugin enabled. Scroll to the bottom of the home page to see the list of pages and follow the links. Also take a look at an example of a paginated Category archive here. Finally, take a look at a paginated version of a 300+ comment entry here.

New: Paginated Entry Example - ReadWriteWeb

The latest version of the Pagination plugin is used by the popular technology blog ReadWriteWeb. (Disclosure: I provide consulting services to RWW) In additional, using Pagination to paginate the home page, category, and monthly archives, you can click here for an example of a long entry that has been split into 2 pages.

How it Works

My goal here was to create a pagination plugin with high performance. I didn't want it to slow down rebuilds, and I wanted pages to display for readers without delay. With these goals in mind, I decided to dynamically render pages 2, 3, 4, and so on. This means that unlike the default for most pages in Movable Type, pages 2+ are not static files that get published to your blog directories. They dynamically rendered by the plugin's page viewer script. Note that this viewer script is Perl-based and does not use MT's built-in PHP-based dynamic publishing system. The benefit of this is that you can virtually any plugin template tags in your paginated templates, and you don't need to use PHP. So when someone views page 2, the script goes into action and builds the page and displays it.

Paginated URLs are clean, ending in index.html?page=2 (or similar). Pagination makes use of mod_rewrite for Apache to keep these URLs clean (most MT sites run on Apache, but there may be some alternative approaches for other web servers).

Page-Level Caching

To speed up dynamic page views and reduce CPU/memory/database usage, Pagination supports (optional) page-level caching, powered by the Cache Block plugin. This means that once the plugins generates the HTML for "page 2", it will store that in the cache for next time. And next time someone wants to see "page 2", it can be quickly fetched from the cache. In my tests, dynamic page views from the cache took about 0.04 seconds, so this is very fast. In the plugin settings you can specify how long to cache pages before refreshing the cache.

Template Tags

Pagination comes with a template module that makes it easy to implement -- in most cases you can simply include the module in your existing templates and it will 'just work'. So you may not need to learn or use the template tags below. But if you want to customize the appearance of your Pagniation links, you can use/edit the following tags:

  • <mt:PaginationPages> - This is a container tag for displaying linked page numbers, previous / next page links, etc. This tag should only be placed inside the following containers: <mt:EntriesFooter>, <mt:EntriesHeader>, <mt:CommentsFooter>, and <mt:CommentsHeader>. There are several arguments:
    • max_pages - (Required) The maximum number of page numbers to display at one time. Note that page numbers will roll forward as readers view higher page numbers, just like Google paginated search results.
    • glue - (Optional) This should contain some text or symbols that you to display bewteen each page number. For example, if you want 1 - 2 - 3, then use glue=" - ".
    • lastn - (Required) The number of items shown on each page. This must match the lastn argument of the parent <mt:Entries> or <mt:PaginatedComments> tag.
    • archive_type - (Optional) For advanced use, you can use this tag to override the archive_type used to calculate the page numbers and links. If omitted, the plugin will use the archive_type of the page being built.
    • class_type - (Optional) For advanced use, this tag will override the type of MT object being counted to determine the number of pages.
  • <mt:PaginationPageNumber> - Used inside a <mt:PaginationPages> container, this tag will display the page number being processed in the loop (not the current page number that is being published/viewed).
  • <mt:PaginationPageLink> - Used inside a <mt:PaginationPages> container, this tag will display the URL to page number being processed in the loop.
  • <mt:IfPreviousPage> - Conditional tag that is true if the page being displayed is 2 or higher.
  • <mt:PaginationPreviousPageLink> - The URL to the previous page.
  • <mt:IfNextPage> - Conditional tag that is true if the currently viewed page is not the last page.
  • <mt:IfNotLastPage> - Conditional tag that is relative to the page being processed, not the page being viewed - returns true if the page being processed is not the final page.
  • <mt:LastPageLink> - The URL to the last page.
  • <mt:LastPageNumber> - The number of the last page.
  • <mt:NextPageNumber> - The number of the next page.
  • <mt:PreviousPageNumber> - The number of the previous page.
  • <mt:PaginatedComments> - (Pro only) This is replacement container tag for <mt:Comments>. If you want to paginate the list of comments on an Entry archive, you should use <mt:PaginatedComments> instead of <mt:Comments>. You can use all the same <mt:Comment_____> tags inside the container. Arguments include:
    • show - The number of comments to show per page. (Note that you can also use 'lastn' for this argument)
    • offset - The offset for the page of comments. This should always be set to "$pagination_offset".

Template Tags for Entry Pagination

A new feature in Pagination Pro enables you to split long entries into multiple pages by adding <!--nextpage--> (on a line by iteself) when writing the entry, in either the main "Body" or "Extended" fields. Then, using the following template tag modifer or tags, you display only the current "part" of the entry, along with pagination links. Note: in order to differentiate this type of pagination, the term "part" is used instead of "page" -- think of it as splitting an entry into multiple parts.

(Note that using <!--nextpage--> for page breaks is consistent with the built-in feature of Wordpress. This consistency may come in handy for sites migrating from WP to MT, as the existing page breaks should "just work".)

The easy way to use this feature is to use a new modifier called paginate on the tag that you want to split into parts for example:

<mt:EntryBody paginate="1">

or

<mt:EntryMore paginate="1"> (if your page breaks are added to the "Extended" field)

Simply add the paginate="1" argument to your existing tags in your Entry archives and MT will display only the relevant part of the field, along with pagination links at the bottom.

If you want more flexibility, instead of using the modifier described above, you can use the following template tags to control the display of the parts and page numbers:

  • <mt:PaginatedTag> - This container is designed to container the part(s) and page links for a paginated Entry Field. There is one required argument:
    • tag - The tag with the page breaks, without the "mt:" prefix. Valid values are 'EntryBody' and 'EntryMore'. Example: <mt:PaginatedTag tag="EntryBody">
  • <mt:CurrentPart> - This tag displays the current part of the tag (part 1 on page 1, part 2 on page 2, etc.). This tag must be used inside a <mt:PaginatedTag> container.
  • <mt:Parts> - This container tag list the pages and page links for each part, if page breaks exist in the specified tag. This tag must be used inside an <mt:PaginatedTag> container. There is one optional argument:
    • glue - the value of glue will act as a separator between each part number. Example: <mt:Parts glue=" | ">
  • <mt:PartNumber> - Displays the part number.
  • <mt:PartLink> - Displays the URL that links to page for the part.
  • <mt:IfPreviousPart> - Conditional tag that is true if the part being displayed is 2 or higher.
  • <mt:PreviousPartLink> - The URL to the previous part.
  • <mt:IfNextPart> - Conditional tag that is true if the currently viewed part is not the last part.
  • <mt:NextPartLink> - The URL to the next part.

Variables: For advanced usage, several variables are set by the plugin. A global variable called 'current_part_number' will be assigned to the value of currently displayed part on pages 2+, but remains undefined on page 1. Within an <mt:Parts> container, a local variable called 'current_part' is assigned to a value of 1 if the part being processed is the currently displayed part. Finally, standard loop variables such as __first__, __last__, etc. are assigned and can be used inside <mt:Parts>

Complete Example:

<mt:PaginatedTag tag="EntryMore">

<mt:CurrentPart>

<mt:Parts glue=" &nbsp;">
<mt:If name="__first__">
<div class="partination"><p><strong>Page: &nbsp;
<mt:IfPreviousPart>
<a href="<mt:PreviousPartLink>">&laquo;&nbsp; Prev</a>
</mt:IfPreviousPart>
</mt:If>
<mt:If name="current_part">
<mt:PartNumber>
<mt:Else>
<a href="<mt:PartURL>"><mt:PartNumber></a>
</mt:If>
<mt:If name="__last__">
<mt:IfNextPart>
<a href="<mt:NextPartLink>">&nbsp;Next &nbsp;&raquo;</a>
</mt:IfNextPart>
</strong></p></div>
</mt:If>
</mt:Parts>

</mt:PaginatedTag>

Note: the template tags above will only work on templates published using MT's default "static" publishing system. The tags will generate an error if used on dynamically published templates.

Templates Set

Pagination comes with two templates:

  • Pagination - A template module that can be included in other templates to display page links.
  • HTACCESS for Pagination - An index template that builds the required mod_rewrite rules. Important: The output file for this template has been set to "htaccess.txt" on purpose. Some sites have already have a ".htaccess" file and you want to be careful not to overwrite the existing one (for example, if you use MT's PHP dynamic publishing, with my Fast Search plugin or otherwise). Check to see if you already have an .htaccess file and if you do, you may want build this template as "htaccess.txt" and then copy and paste the rules into the appropriate place in your .htaccess file (if using MT's dynamic publishing, paste before the existing rules.) If you want to use this template to build your .htaccess file, you will need to change the output file to ".htaccess".

Requirements

Note: while not required, the Cache Block plugin is needed if you want to use the Pagination caching features (highly recommended).

Installation

  1. Download the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation.
  2. Change the permissions of the /plugins/Pagination/pages.cgi script to 755 (CHMOD 755).
  3. Go to the blog you want and then to Preferences > Plugins and then open the settings for the Pagination plugin. Enable the caching settings if desired, then Save.
  4. Return to the settings and click the "Install Templates" button. This will install the templates mentioned above.
  5. Setup your .htaccess file with the Pagination rules, as described above.
  6. Edit your Main Index template and add the following before the </MTEntries> tag:

    <mt:EntriesFooter>
    <mt:Include module="Pagination">
    </mt:EntriesFooter>

  7. Modify your <MTEntries tag to include the argument offset="$pagination_offset". This is important. Example: <MTEntries lastn="10" offset="$pagination_offset">

  8. (Pro only) Do the same for your "Entry Listing" archive template, for both MTEntries containers.

  9. (Pro only) If you want to paginate your comment listings on your Entry archives, edit the "Comments" template module to replace the <MTComments> container with the MTPaginatedComments container, as discussed above. Be sure to include show="10 offset="$pagination_offset".

  10. (Pro only) If you want to paginate long entries on your Entry archives, edit your Entry archive (or relevant template module) to replace or modify the EntryBody or EntryMore tags, as described above.

Get Pagination Pro

Commercial License for 1 to 10 blogs - $97

">

Blog Network License for 10+ blogs - $249

">

Personal License for 1 to 4 blogs - $33

">

Get Pagination

Pagination is free for personal or commercial use, but you must leave the "powered by" link, which is added automatically below the paginations links.

Download Now

,<$MTAjaxRatingVoteCount type="paginationdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="paginationdownloads"$>

As always, comments, questions, and suggestions are welcome.

FriendFeed Comments is a plugin for Movable Type that enables you to import and display comments made using FriendFeed on your entries. You can also use the plugin to enable your blog commenter to "Cc." their comments to FriendFeed (if they have a FriendFeed account).

Background: FriendFeed Comments

FriendFeed is service that enables you aggregate and share your stuff from many other web sites, all in one place. Your feed can pull in your blog RSS feeds, photos from Flickr, videos from YouTube, tweets from Twitter, and many more.

Each item in your feed -- whether it is a blog entry or tweet -- can be commented on by other FriendFeed users.

Some great discussions about blog entries can happen on FriendFeed. The only problem is that those conversations are off-site and separated from the entry published on your blog. One of the goals of the FriendFeed Comments plugin is to bring those comments back to your published blog entry, displaying them with on-site blog comments.

Features

Version 1.0 of the FriendFeed Comments plugins includes the following features:

  • Checks all types of FriendFeed items for comments on your entries. Usually, comments on FriendFeed happen on the RSS item from your entry. Some comments, however, happen on the Twitter message you posted to announce the entry. The plugin aggregates these all these comments by checking all items in the feed.
  • Imports the comments as real MT comments. After importing, comments appear in the admin area just like other comments. Comments are displayed interspersed with on-site comments, displayed in chronological order.
  • New template tags can be used to highlight FriendFeed comments (more info below)
  • High perfomance, does not slow publishing. FriendFeed comments are imported via an MT scheduled task, running every 15 minutes in the background.
  • Check multiple FriendFeed user's feeds for comments. Useful for multi-author blogs and other advanced uses.
  • On-blog commenters can optionally Cc. their comments to FriendFeed. In addition to posting the comment on your blog, the comment will also be posted to item in your FriendFeed. Also, the comment will be posted as an item in the commenter's feed, so they can share the comment (and link) with followers of their feed.

Working Example: ReadWriteWeb

This plugin was suggested by Richard McManus and Marshall Kirkpatrick of ReadWriteWeb, and inspired by the FriendFeed Comments plugin for Wordpress, by Glenn Slaven. I have installed the plugin for ReadWriteWeb and it is now running, importing comments from FriendFeed and enabling commenter to Cc. FriendFeed. Check out the entries at http://www.readwriteweb.com/. Please don't post "test" comments there, you can use the live demo for that...

Live Demo

If you have a FriendFeed account, you can try out the plugin right now:

Click here to access the live demo for FriendFeed Comments.

Requirements

  • MT4+
  • JSON 2.x Perl module (included)
  • Net::FriendFeed Perl module (included)
  • Remote Comments Schema plugin (included)

Get FriendFeed Comments

This plugin is free to members of MT Hacks.

Download Now

,<$MTAjaxRatingVoteCount type="ffcommentsdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="ffcommentsdownloads"$>

Installation

  1. Download and expand the zip file.
  2. Upload the contents of the 'plugins' folder to the 'plugins' directory of your MT.
  3. Upload the contents of the 'extlib' folder to the 'extlib' directory of your MT.
  4. Upload the contents of the 'mt-static' folder to the 'mt-static' directory of your MT.
  5. Login to MT and go to the blog you want. Go to Tools > Plugins and choose FriendFeed Comments and then Settings. Enter the FriendFeed username(s) of the feed(s) that contain links to your blog entries. Save the settings.
  6. Ensure that scheduled tasks are running, ideally via cron job. Click here for more info. Comments will only be imported if scheduled tasks are running.
  7. (Optional) Modify your templates using the new template tags described below. If you are using the new MT4-style templates, you probably want to edit the "Comment Detail" template module.
  8. (Optional) Modify your comment form to enable on-site commenters to Cc. their comments to FriendFeed. You need to add two fields named friendfeed_user and friendfeed_remote_key. If you want to use the code shown on the demo entry, you can download this template module and include it.

Template Tags

FriendFeed Comments adds the following new template tags:

  • <MTIfFriendFeedComment> - A conditional tag that is true if the comment exists on FriendFeed.
  • <MTIfFriendFeedEntry> - A conditional tag that is true if the entry in context has been found on FriendFeed.
  • <MTFriendFeedEntryLink> - A URL to the item for the entry on FriendFeed.
  • <MTFriendFeedIconURL> - A URL to the small FriendFeed icon.

Example usage, place before the commenter's name:

<MTIfFriendFeedComment><a href="<MTFriendFeedEntryLink>" target="_blank" title="Posted on FriendFeed">
<img src="<MTFriendFeedIconURL>" align="left" alt="Posted on FriendFeed" /></a>  </MTIfFriendFeedComment>

As always, feedback is welcome.

Remote Comments Schema is plugin for Movable Type developers. The plugin is very simple and provides no new "features". As the name suggests, the plugin provides a database schema for remote comments. Specifically, this plugin extended the MT::Comment object by adding two new (real, not meta) columns:

  • remote_service
  • remote_id

These fields can be used to link MT comments to comments stored/created/imported/synced on remote service.

License: GPL

Download Remote Comments Schema

,<$MTAjaxRatingVoteCount type="remotecommentsdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="remotecommentsdownloads"$>

A new version of the Fast Search plugin for Movable Type is available.

The new version is a very important security update, and I recommend that all sites install the new version as soon as possible.

The primary issue that has been fixed was a security bug in which a malicious person could insert HTML or javascript into your search results pages by modifying the query string. Please note that this does not affect regular user searches or tag searches, but rather search results pages that spammers have linked to from external web sites.

Other fixes include a pagination issue that was affecting certain users (in which the page numbers were inaccurate), and a fix for the tag_dir argument when the blog was not at the root off the domain.

You can download the new version from the links below:

Download Now

Fast Search 2.22 for MT4+:
,<$MTAjaxRatingVoteCount type="fastsearchdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="fastsearchdownloads"$> (since 3/6/07)

Fast Search 2.092 for MT3.2 and 3.3:
,<$MTAjaxRatingVoteCount type="fastsearchdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="fastsearchdownloads"$> (since 3/6/07)

If you have previously purchased the Pro version, you should have by now received an email with a download link. If not, please contact me.

MT Forum is a forum plugin for Movable Type 4.1+. Using MT Forum you can add forums to existing MT blogs, or create new blogs that act as dedicated forums. MT Forum is completely integrated with Movable Type and supports posting topics and replies by MT-authenticated users as well as OpenID-authenticated users.

Screensnaps

MT Forum Features

MT Forum provides basic forum functionality in a way that is completely integrated with Movable Type. Features include:

  • Add forums to existing MT blogs/sites, or create a new site dedicated to the forum.
  • Create forums and subforums to organize discussions.
  • Forum posters can use their existing MT commenter accounts to post new topics and replies.
  • Forum posters can use OpenID, Vox, Livejournal, AOL, TypeKey and any other authentication method supported by MT, to post both topics and replies.
  • Topics and replies can also be posted by unauthenticated users (if configured by admin)
  • Familiar forum and topic layout promotes active forum participation.
  • Most recently active discussion topics are always listed at the top of forum listings (topic listings are sorted by most recent "post", whether it be a new topic or reply)
  • Static forum and topic pages are SEO-friendly (no long query strings).
  • New forum topics can be tagged by posters (if enabled by admin)
  • Default templates do not use HTML <table> tags for forum/topic layout.
  • Recent Forum Topics widget displays recent topics in your sidebar.
  • New topics can be scanned by MT's junk filters
  • Topic and Reply forms are spam-protected against spambots
  • Forum and Topic templates are completely customizable via MT templates.
  • Supports the integration with other MT plugins via template customization.

Live Demo

You can try MT Forum on the MT4.1 Test Blog. Browse around, post a new topic, reply to existing topics. Click here to for the live demo.

Note that some features shown in the live demo (and in the screensnaps above) require other plugins. These include topic view stats, topic signatures, reply (comment) titles, user profile pages, join dates and post counts.

Template Set

MT Forum comes with a set of templates that can be installed in a single click, making it very easy to setup. The templates control the display of the main forum home page, the forum listing pages, topic listing pages, and the new topic submission page.

Forum Themes

MT Forum comes with two themes (styles), the red one shown above, and a blue one shown here:

These themes are based on themes from the open source phpBB (version 3) forum application. With a bit of effort, other phpBB styles could be converted for use with MT Forum.

Requirements

Get MT Forum

After purchasing a license below, you will be taken directly to a download page.

Buy MT Forum and Entry Post Together

Note that the new topic posting feature of MT Forum is powered by the Entry Post plugin from MT Hacks. Use the links below to purchase licenses for both plugins together. Click here to buy a license for only MT Forum.

Commercial License - (up to 5 blogs) - $194.00

">

Blog Network License - (more than 5 blogs) - $346.00

">

Non-Commercial License - (up to 5 blogs) - $66.00

">


Installation


  1. Extract the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of you MT Installation.

  2. Upload the contents of the 'mt-static' directory to the 'mt-static' directory of your MT install

  3. The next time you access MT, you should see a "Time to Upgrade" screen that will update the database for MT Forum

  4. If you have not already done so, enable Entry Post for the blog(s) where you want to install a forum (details here)

  5. Go to the blog you want then choose Preferences > Plugins from the menu, then click on MT Forum then Settings. Click the "Install Templates" button to install the templates.

  6. Choose Design > Templates from the Menu and choose "Template Modules" from the right side of the page. Open the "Header" module. Look for the </head> tag. Immediately before that tag there should be a <mt:var name="html_head"> tag. If this is not present, then add it bebefore the &t;/head> tag and save the template.

  7. Choose to Manage > Forums from the menu and create one or more forums.

  8. Rebuild all files and view your forum at http://yourblogurl.com/forum.html

  9. (Optional) Use Widget Manager to add the "Recent Forum Topics" widget to the sidebar of your blog. You may also want to add a navigation link to forum.html so people can find the main forum page.

As always, feedback is appreciated, please reply to this entry.

User Profiles is a plugin for Movable Type 4.1+ that extends the user profiles in MT. Version 1.6 adds support for MT 4.1.

In the Pro version, extended profiles can be edited from the admin interface, or by commenters:

New features

Version 1.6 primarily adds support for MT 4.1. In the latest version of MT, user profile images are a core feature, called "userpics". If you previously installed the User Profiles plugin on MT4, version 1.6 will automatically migrate your users' profile photos to use the new core Userpic system.

Note that while Userpics are a core feature in MT 4.1, there is no core feature for enabling commenters to upload their userpics -- you will need the User Profiles plugin to enable that.

Features in User Profiles 1.6

  • Commenters can upload a profile image (any authenticated commenter, including Vox, OpenID, etc.)
  • Authenticated commenters can edit basic profile info

Features in User Profiles Pro

User Profiles Pro includes the following additional features:

  • Authors and commenters have extended profiles. Extended profiles come with 22 built-in fields (such as City, Country, Birthdate, About Me, etc.).
  • Custom fields for extended profiles can be defined by system administrators
  • Publish profile pages for each author and commenter, including profile images, basic and extended profile info, recent entries, and recent comments.
  • Automatically import profile images (avatars) for all your existing users from Gravatar, MyBlogLog, Vox, Livejournal, and BlogCatalog.
  • AJAX function auto-imports avatars in the background after new commenters login.

How it Works

Authenticated commenters can edit their profiles and upload a profile image:

Finally, the <MTAuthorImageURL> and <MTCommenterImageURL> tags can be used to display the user's profile image on your published blog pages (or use the core "userpic" tags in 4.1)

Profile images are stored as Assets within Movable Type. This means that these images can also be used in other ways, such as inserting them into entries. Movable Type will keep the full size image (cropped to square, if necessary) and create thumbnails when using the tags described below. Each profile image is tagged with '@userpic'.

With User Profiles Pro, extended profiles can be edited, either from the admin interface, or by commenter via the "edit profile" link after they login. User Profile pages are published automatically as static pages, which boosts performance for high traffic sites.

Live Demo - Try User Profiles Pro Now

User Profiles Pro has been enabled on the MT Test Blog. Start from this entry and read the instructions. Sign in, edit your profile, upload a photo, view your published profile. Try it now!

Template Tags

Version 1.6 of User Profiles includes the following template tags:

  • <MTAuthorImageURL> - This displays the url to a thumbnail of the author's profile image. There is one optional argument:
    • size - the size in pixels of square thumbnail, default is 50 pixels (each side)
  • <IfMTAuthorImage> - This conditional tag displays its contents if the author has uploaded a profile image.
  • <MTAuthorImageURL> - This displays the url to a thumbnail of the commenter's profile image. There is one optional argument:
    • size - the size in pixels of square thumbnail, default is 50 pixels (each side)
  • <IfMTCommenterImage> - This conditional tag displays its contents if the commenter has a profile image. Note: if you posted a comment on your own blog (while signed in), your profile image will be displayed using this tag.

Example: In your "Entry Metadata" template module, your could add the following:

<MTIfAuthorImage><img src="<MTAuthorImageURL size="50">" align="left" /> </MTIfAuthorImage>

This would display the author's profile image, if they have one in their profile.

Similarly, in your "Comment Detail" module, you could add:

<MTIfCommenterImage><img src="<MTCommenterImageURL size="50">" align="left" /> </MTIfCommenterImage>

Both example above can be seen in action on the MT4 Test Blog.

User Profiles Pro Template Tags

User Profiles Pro includes the following additional tags:

  • <MTAuthorProfileURL> - This displays the url to the author's published profile page.
  • <MTCommenterProfileURL> - This displays the url to the commenter's published profile page.
  • <MTEntryAuthorLink> - This replaces the core tag of the same name. Instead of linking to the author's URL, it will link to the author's profile page.
  • <MTCommentAuthorLink> - This replaces the core tag of the same name. Instead of linking to the commenter's URL, it will link to the commenter's profile page. If the commenter was not authenticated, it will link to the URL provided.
  • <MTUserProfile> - This tag is used to display extended profile information. There is one required argument:
    • field - the name of the field that you wish to display. For built-in fields, valid values are birthdate, first_name, last_name, address, city, state, country, mobile_phone, land_phone, sex, marital_status, occupation, company, signature, about_me, activities, interests, music, tv_shows, movies, books, or quotes. For custom-defined fields, use the defined name of the field (more on custom fields below). Note that for the built-in "birthdate" field, you can also specify a "date_format" argument that follows MT's date formats.
  • <MTAuthorComments> - This container tag, which is used on the default "User Profile" template, displays the comments from the author in context. On the published User Profile page, this is used to display a list of recent comments by the user.

User Profiles Template Set

User Profiles comes with several default templates that are easy to install with the Template Installer plugin. The User Profile template set includes the following templates:

  • Javascript - This a replacement for the core "Javascript" index template. If you have customized your existing template, it will be backed up during the installation process. The new version includes some new features for User Profiles.
  • Edit User Profile - This template module is used to display the "edit profile" page that commenter's see when they click the "Edit Profile" link. Note that this template also displays the image upload and the "edit extended profile" pages. You can customize the user profile experience (and extended profile fields) bu editing this module. Note: you should not rename this template module.
  • User Profile (Pro only) - This template module is used to publish the User Profile pages. Customize this template to change the way user profiles are displayed. A special note about this template -- when you save it, it will automatically republish all user profile pages (no need to republish your site). Note: you should not rename this template module.
  • YUI Javascript (Pro only) - This template module includes reference links to several Yahoo Javascript libraries. This template should be included in the Header template for all feedback templates (Entry archives). The auto-image-import AJAX function uses these libraries. Note: if you are already using the Ajax Comments plugin, then you already have this module, so you don't need to include it again.

Requirements

Installation

  1. Download the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation.
  2. You should now see an Upgrade Screen for User Profiles. For User Profiles Pro, the upgrade will add a new table for extended profiles and import profile images for existing users in your system
  3. Go to System Overview, then to Preferences > Plugins. Then choose User Profiles, then Settings. Entry the blog_id for profile images and templates, and the path for uploading profile images, then save.
  4. Return to the User Profiles settings and click the "Install Templates" button. The templates will be installed into the blog you chose in the previous step.
  5. In your "Header" template, add the following before the </head> tag:

    <MTIf name="include_javascript">
    <script type="text/javascript" src="<$MTLink template="javascript"$>"></script>
    </MTIf>

    And (Pro only) after the line that reads <MTIf name="entry_template">, add:

    <MTInclude module="YUI Javascript">

    Then save your "Header" template.

  6. Republish your Javascript template and Entry archives for the chosen blog

  7. Upload a profile image from your profile. (Tip: the quickest way to get to your profile is to click the "Hi Username!" link in the very top right of the page.) Click the link to add a profile image and follow the steps as shown above.

  8. Edit your extended profile by clicking "Extended Profile" from your profile page

  9. Edit your templates to display profile images, as described in the Template Tags section above.

Customizing Extended Profiles and Adding Custom Fields

User of User Profiles Pro may want to customized the display of the fields or add custom fields to the profiles. Click to read an in-depth article on how to customize Extended Profiles.

Get User Profiles Pro

Commercial License for 1 to 10 blogs - $97

">

Blog Network License for 10+ blogs - $249

">

Personal License for 1 to 4 blogs - $33

">

Get User Profiles

User Profiles v1.6 is free for both commercial and non-commercial use. Note that User Profiles does no include the "Pro" features mentioned above.

Download Now

,<$MTAjaxRatingVoteCount type="userprofilesdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="userprofilesdownloads"$>

As always, comments, questions, and suggestions are welcome.

IfAvailable is a plugin for Movable Type, designed primary for use by plugin or template developers. It provides a single template tag, <MTIfAvailable>, that can be use to check for the availability of other plugins or for specific Perl modules:

Arguments

Only one of the following arguments must be used:

  • perl_module - A perl module name. Example: <MTIfAvailable perl_module="XML::Parser">
  • plugin_id - The registered "id" of a specific plugin. Example: <MTIfAvailable plugin_id="userprofiles">
  • plugin_sig - The plugin "sig" of a specific plugin. Example: <MTIfAvailable plugin_sig="CommentTitles/CommentTitles.pl">. Useful when a plugin does not have a registered "id".

This plugin is especially useful for template developers who want to design template sets that contain template tags from one or more plugins, but the templates sets do not require those plugins. By using IfAvailable conditional blocks you can provide a template set that provides different output (read: extra features) to sites that have certain plugins/modules, and a more limited output if they do not. In other words, you don't have to create multiple versions of the template set. My MT Forum plugin uses this approach to provide a set of forum templates -- if sites have plugins such as Visitor Stats, User Profiles Pro, and Comment Titles, the forum templates will include things like topic views, post signatures, and user post counts.

License

  • GPL v2

Download Now

,<$MTAjaxRatingVoteCount type="ifavailabledownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="ifavailabledownloads"$>

The Navigation Breadcrumbs plugin for Movable Type 4.1 adds navigation "breadcrumbs" to administration interface. These are links at the top of each screen that helps show you where you are in the interface, and provides links to go up one or more levels. Previous versions of Movable Type includes these handy links, but MT4+ does not. So if you like those navigation links, use this plugin.

Screenshot

Changes in Version 1.1

Version 1.1 fixes display issues when running under MT 4.1. You should only upgrade to the new version if you are are using MT 4.1.

Requirements

  • Movable Type 4.1+

Download Now

,<$MTAjaxRatingVoteCount type="breadcrumbsdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="breadcrumbsdownloads"$>

Installation

  1. Download the zip file and upload the contents of the 'plugins' directory to the 'plugins' directory of your MT installation.
  2. You are done. The navigation breadcrumbs should start appearing immediately.

WP Interface is a plugin for Movable Type that provides a user interface very similar to Wordpress.

Yes, the above image is Movable Type, not Wordpress. ;)

More Screensnaps

Why?

You may be asking yourself why I would create a Wordpress Interface for Movable Type. Partly, I did it as a bit of a joke (but it is real and is does work). Partly as a proof of concept, demonstrating that alternative user interfaces can be created for Movable Type, without a huge effort. Partly to provide a simpler user interface that may be suited to some users. While Movable Type has always (and will remain) my preferred platform, I have always admired the clean intuitive interface of Wordpress. Finally, I did it as a fun way to show that Movable Type and Wordpress can work together (at least in some ways), despite the "rivalry" between the two platforms.

I suspect that the Wordpress Interface for Movable Type will elicit mixed reactions, and that is okay. Please share your thoughts in reply to this entry!

How it Works

Loosely based on the iPhone interface for MT, this plugin provides a simple interface to some of the functions of MT. The interface is definitely a beta, but it is functional for creating and managing entries and comments in a single blog. Other features could be added in future. The interface looks like the Wordpress Interface, but behind the scenes is the same Movable Type Open Source 4.1 that powers the MT interface.

Live Demo

Click here to try it out now (username: demo password: demo).

License

  • Open Source (GPL)

I am not an expert when it comes to Open Sources licensing, but since both Wordpress and Movable Type are open source, so is this plugin. I hope the community can help take it to the next level.

Installation

  1. Extract the files from the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT instalation.
  2. Upload the contents of the 'mt-static' folder to the 'mt-static' folder of your MT install.
  3. To enable the interface, open your mt-config.cgi file and add:

    WPInterface 1

  4. Then login to MT.

Another way to enable the plugin is to make an exact copy of your mt.cgi file. Name the duplicate "mt-wp.cgi" and upload it to same directory as mt.cgi. The access MT via the mt-wp.cgi script and it will use the WordPress interaface. This option is useful if you wnat to user both interfaces, or if there are multiple users who will use each interface.

Get WP Interface

This plugin is free to members of MT Hacks.

Download Now

,<$MTAjaxRatingVoteCount type="wpinterfacedownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="wpinterfacedownloads"$>

As always, feedback is welcome, please reply to this entry.

Convert To Global Template is a plugin for Movable Type 4.1+ that does exactly what it says: it enables you to convert blog templates to global (system-wide) templates in MT 4.1.

Movable Type 4.1 has a new feature in which you can create template modules and widgets at the system level. These "global" templates can then be included from any blog in the system. This plugin enables you to convert blog-level modules and widgets to global ones, in just a few clicks. Simply check the templates you want to convert, choose "Convert to Global" from the "more actions..." dropdown box, and hit Go.

You can also convert in the other direction, from global to blog level.

Requirements

  • MT 4.1+

Installation

  1. Upload the contents of the 'plugins' folder to the 'plugins' directory of your MT install.
  2. Convert templates as desired from the Blog Templates listing of modules and widgets.

Note: Only users with system admin permissions will be able to see and use this action.

Get Convert To Global Template

This plugin is free to members of MT Hacks.

Download Now

,<$MTAjaxRatingVoteCount type="converttoglobaltemplatedownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="converttoglobaltemplatedownloads"$>

Visitor Stats is a plugin for Movable Type 4+ that displays visitor and page view statistics for your MT sites. Visitor Stats Pro provides even more statistics and widgets (details below).

Visitor Stats looks like this:

New Features in Visitor Stats 1.6

  • Support for MT 4.1
  • Some template tags now supported under MT's PHP-dynamic publishing system (<MTVisitorStatsTracker>, <MTVisitorStatsCounter>, <MTEntryStats>, and <MTPageStats>)
  • Option to build dashboard stats via scheduled for better performance (Pro)
  • Code optimized for better overall performance

Visitor Stats Pro

Additional features included with Visitor Stats Pro:

  • Blog Widget for displaying a ranked list of "Most Read Entries"
  • Entry Stats graph that displays entry pages views by date.
  • List of Recent Visitors and Views on the admin Dashboard (including IP address, username, referrer and keywords).
  • Dashboard widgets for displaying top search engine keywords and referrers.
  • Detailed Entry Stats screen with graph, top keywords used to find the entry, and a list with details of each page view for that entry.
  • Many new template tags for displaying stats on the published pages for your blog.
  • See details about Visitor Stats Pro below

Visitor Stats also provides a "stats counter" tag (and widget) that you can place on your site to display your stats. Note: you can visit the MT4 Test Blog to to see some of the Visitor Stats (and Pro) publishing widgets and tags in action.

Visitor and View Stats

Visitor Stats tracks two key statistics for your blog:

  • Visits - A visit represents a real person who visited your blog. Even if the person views 20 pages of your site, it only counts as one visit (per day).
  • Views - Also known as page views, a view represents the viewing of a single web page on your site. If the person views 20 pages, it counts as 20 views. If a person refreshes the same page several times, each time counts a view.

How it Works

Visitor Stats tracks visitor and view information and records that information directly into your Movable Type database. After placing a single template tag in your templates, Visitors Stats will begin recording stats automatically using a combination of JavaScript and PHP (note that you do not need to enable MT's dynamic publishing feature). Then, when you view the admin dashboard for your blog, you will "Visitors" and "Views" tabs on the Blog Stats widget, which will display a graph of your stats (see image above). On the System Overview dashboard, you will see aggregate graphs of your stats for all blogs on the system.

Visitor Stats - Template Tags

Visitor Stats provides 4 template tags:

  • <MTVisitorStatsTracker> - Place this tag before the </head> tag in every template where you want to track stats. Only place one of these per template.
  • <MTVisitorStatsCounter> - This tag will display the total number of visitors or views for your blog, just like a web stats counter. There is one optional argument:
    • type - the type of stats that you want to count, which either be "visit" or "view". The default is "view". Example: <MTVisitorStatsCounter type="visit">
  • New! - <MTEntryStats> - Used within an entry context, this displays the total number of views for that entry.
  • New! - <MTStatsImageURL> - The URL to the small stats image ( that looks like ).There is one optional argument:
    • type - the type of stats that you want to graph, which either be "visit" or "view". The default is "view". Example: <MTStatsImageURL type="visit">

Visitor Stats Pro Features

Visitor Stats Pro includes additional stats and provides ways to view visitor and view stats in more detail, helping you understand the traffic to your sites. Where are readers coming from? What search keywords are they using in search engines to find your site? What entries are they reading? Which entries get the most views? Visitor Stats Pro helps you answer these questions and more.

Display a List of the Most Popular Entries

Visitor Stats Pro includes a widget that you can use to display a ranked list of the "Most Read Entries" in your blog sidebar, showing readers which entries are the most popular. You can also create customized most readlists by category, tag, etc. Examples include "Most Read Entries in this Category", or a "related entries" section that lists that the most read entries with the same tags as the current entry. This is a powerful feature with many possibilities.

Detailed Stats for Each Entry

In the MT4 admin interface, Visitor Stats Pro displays detailed view stats for each entry. On the entry screen, an Entry Views graph can display the traffic history for that entry:

(The graph on the edit entry screen can be hidden with a single click, or disabled in the plugin settings, for those who don't want to the graph to appear on this screen)

On the right side of the Edit Entry screen, the number of views for that entry will be displayed, and you can click the link for Detailed Stats:

The same graph also appears on the Detailed Stats screen for each entry (just click the "More Stats" link from the main entry screen), plus a list of top keywords for that entry, and a detailed list of the pages views for that entry:

As you can see from the image above, in addition to displaying the IP address for each Visitor (just to left of this image), Visitor Stats Pro will also identify visitors and views by registered users on your system. This includes both local MT authenticated users, as well as TypeKey, Vox, Livejournal, or other OpenID users. This provides valuable information about the traffic stats of your signed-in users. You can even filter the list of page views by dragging the sliders on the graph -- just choose a date range, then click the link that appears. The "From" column shows the URL that the visitor came from before arriving on your site.

More Dashboard Stats

Visitor Stats Pro provides even more stats on the MT4 admin dashboard. This includes a summary of recent visitors and views, along with detail about each. This is similar to the "Recent Entries" and "Recent Comments" displayed when you click the respective tab on the Blog Stats widget:

Top Keywords and Referrers Dashboard Widgets

Visitor Stats Pro includes two new widgets that you can optionally display on your admin dashboard. The "Top Keywords" widget will display a list of the top search engine keywords used to find your blog:

And the "Top Referrers" widget will display a list of the top referrer URLs for your visitors, so you can see where your traffic is coming from:

Many Visitor Stats Pro Template Tags

Visitor Stats Pro includes many new template tags that you can use to display your blog stats on your published pages, blog sidebar, etc. In addition to display lists of "most viewed entries" as described above, you can display lists of top keywords, top referrers, recent visitors, and recent page views. If fact there are so many new template tags, that I won't discuss them in detail here -- I will soon post a separate article that describes the tags with some example template code.

Requirements

Installation or Upgrade

Note: If you are upgrading from version 1.5x, you do not need to reinstall the templates, as they have not changed in version 1.6.

  1. Download and extract the zip file, then upload the contents of the 'plugins' directory into the 'plugins' directory of your Movable Type installation (often /cgi-bin/mt/plugins/).
  2. (Pro Version Only) Upload the contents of the 'extlib' directory into the 'extlib' directory of your Movable Type installation (often /cgi-bin/mt/extlib/).
  3. (Pro Version Only) Upload the contents of the 'mt-static' directory into the 'mt-static' directory used by your Movable Type installation.
  4. Login to MT and you should be redirected to an "Upgrade" screen that will update your database automatically.
  5. For each blog that you want to track, go to Preferences > Plugins and then click on "Visitor Stats" and then click on "Settings". Now click the link labeled "Click here to install the Visitor Stats templates". Note: Even if you are upgrading from a previous version, you should re-install the templates.
  6. Now go to Design > Templates and insert the <MTVisitorStatsTracker> tag before the </head> tag for all templates that you want to track. Note that if you are using the new MT4 default templates, then you only have to do this in one place: click on "Template Modules" from the right side of the page and open the "Header" template module and insert the <MTVisitorStatsTracker> before the </head> tag and then save the module. Note: If you are upgrading from a previous version of Visitor Stats, you can skip this step.
  7. Now Publish (rebuild) all your files.
  8. (Optional) Add the <MTVisitorStatsCounter> tag to your templates or use Widget Manger to add the "Visitor Stats Counter" widget to your sidebar. Pro users can add the "Most Read Entries" widget and start using the many new templates tags.

Get Visitor Stats Pro

Commercial License - $97

">

Non Commercial Use License - $33

">

Get Visitor Stats

Visitor Stats (Basic Version) is free to members of MT Hacks.

Download Now

,<$MTAjaxRatingVoteCount type="visitorstatsdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="visitorstatsdownloads"$>

Potential Future Features

Visitor Stats Pro was a much larger effort than I anticipated. As such, there are still a number of interesting features that may be added in the future. Future features will be determining largely by the requests of Visitor Stats Pro license holders. Here are some of the potential features:

  • Stats on a per author basis. If you have a blog with multiple authors, see which authors are generating the most traffic.
  • Drill-down into statistics. View the traffic history for a single visitor or registered commenter, see how they navigate through your site and which pages they viewed.
  • Geographical stats. See what country, region and city your visitors are coming from.
  • Recommended entries based on common viewing stats. For example "people who read this entry also read these entries..."
  • And more...

As always, suggestions, comments, and questions are appreciated.

A Note on the Small Stats Graphs

The small stats graphs included with this version of Visitor Stats are called Sparklines and were inspired by the SparkStats plugin for Wordpress. The sparkline graphs used by the Visitor Stats plugin are powered by the sparkline web service provided by bitworking.org. The plugin stores a copy of the image on your blog, and updates the image a maximum of once per hour (note that that stats image only updates when the page is published, either manually or automatically when someone posts a comment, etc.). Credit goes to those sites discussed above for their cool work with Sparklines.

Fast Search is a PHP plugin for Movable Type. This means that Fast Search uses Movable Type's dynamic PHP-based publishing system to display search results. However, you can continue to use static publishing for all of your indexes and archives. Fast Search is fast in part because it uses mySQL fulltext indexing -- basically this means that a search index will be created for the entries in your database, making searches much faster. Like the built-in search, Fast Search logs searches to the Movable Type Activity log.

New Features in Version 2.2

  • Support for MT 4.1 - A "division by zero" error that was caused by changes in 4.1 has been addressed.
  • New 'Type' Option - Optionally, you can now search only Pages or only Entries by specifiying the 'type' argument or URL paramater.
  • MT4+ Sort by Date Fix - Fixes an issue under MT4+ when changes to an entry's authored_on date were not reflected in the the sort order, when sorting by date.
  • Top Searches Stats and Widget - (Pro only) This new feature tracks your search stats, enabling the creation of "Top Searches" lists.
  • Tag Searches no Longer logged - Staring in version 2.2, "tag searches" will not longer be logged. Tag searches happen when someone clicks a linked tag name, so they are not real searches. This change removes log clutter and increases performance of tag search results.
  • Code Optimization - For better performance and memory utilization.

Note: Version 2.2 is only supported on MT4 and higher (including MT 4.1). If your are still using MT 3.2 or MT 3.3x, you need version 2.0 (see links below).

Tag Searches with Fast Search

Fast Search supports tag search. A tag search will display a list of all entries with a specific tag. Of course, tag searches have the same pagination features as regular searches, enabling you to browse multiple pages of tag search results. Tag search results are always sorted with the most recent entries listed first. Tag searches can done on a single blog (default), or across multiple blogs.

Tag Search Links. If you are using tags, you are probably displaying a list of tags with each entry. Each of those tags are linked to a search results page that displays all the entries with that tag. Since those links point to the built-in mt-search.cgi script -- Fast Search includes a new version of the <MTTagSearchLink> tag that points to the Fast Search script. This happens automatically, you don't have to edit your templates -- just enable Fast Search, install the Fast Search template, then rebuild your pages -- the tag links will be automatically updated.

Better Relevancy

By tweaking the fulltext queries, I have managed to improve the relevancy ranking significantly. To test this out, you should do a few searches (in fulltext mode) before you upgrade to Fast Search 2.0/2.1 -- note the results and their relevancy -- then upgrade and do the same searches. You should see much more relevant results at the top of the search results. Please post your feedback on this by replying to this entry.

Search all Blogs Easier

In the previous versions of Fast Search, it was possible to search across all blogs on a system, but you had to specify each of them separated by commas. This is fine if you have a few blogs, but what if you have 50? 100? 500? Version 2.0 makes this easier by allowing the special "all" keyword to indicate that you want to search all blogs (example <MTSearchResults blogs="all"> or in the URL/form: ?query=books&blogs=all). A time-saver for large MT installations and blog networks.

Include PHP in your Search Results Template

This not a new feature, but it deserves highlighting. Many sites use PHP on most of their pages for various reasons (for example, to include content such as headers/footer and advertising blocks). The problem is that you can't use PHP on the "built-in" search results pages, because they are dislayed by a (Perl) CGI script. This can make it challenging to maintain your site in a consistent manner. You can avoid such problem with Fast Search -- since it is powered by PHP, you can include blocks of PHP code in the search results template. (Note: there is a small requirement that you need to use <?php to start each block, using simply <? won't work.)

What Search Method is Best?

For most cases, "Fulltext" will be the fastest search method. This is the same method used in version 1.0. There are some cases in which you might two options:

  • Non-Fulltext. Technically speaking this method used a LIKE %query% syntax. If you don't know what that means, don't worry about, just read on.
  • Fallback. The Fallback method is a combination method. FastSearch will first try a fulltext search, and if that returns no results, then it will try a Non-Fulltext search.

Non-Fulltext and Fallback are capable of some types of searches that you can't do with mySQL. You might want to use Non-Fulltext or Fallback to:

  1. search multi-byte languages such as Arabic and Japanese.
  2. search words shorter than 3 characters (such as "MTV")
  3. search partial words
  4. search a mySQL database that does not support Fulltext searching

Fast Search Pro Features

Fast Search Pro includes additional features, including:

Clean Tag Search URLs

You can use nice looking tag search URLs such as:

https://mt-hacks.com/tag/spam
https://mt-hacks.com/tag/comments

This feature requires editing your .htaccess file and includes a special "bootstrapping" template to enable this feature.

Top Searches Stats and Widget

Fast Search Pro enables you to track search queries and display lists of "top searched keywords" on your site, linked to the search results page for each keyword. You can list the top searches from the past day, week, month or year -- enabling you to show your readers what keywords are most popular. The search links are compatible with the clean tag URLs described above (ie. https://mt-hacks.com/search/comments) -- making this feature an effective way to increase the number of pages indexed by search engines. Search results pages are highly optimized for the search keywords, making them great for SEO. This is an easy way to add hundreds of SEO-optimized pages to your site, without adding new content. This feature is new in version 2.2 of Fast Search Pro.

Template Tags

FastSearch is designed to easily replace the existing search functionality in Movable Type, but with added features. For example, if you are currently using customized search templates, you can use them with Fast Search, with very few changes in most cases. Many Fast Search template tags have the same names as their CGI counterparts:

  • <MTSearchString> - The search string (query) being searched.
  • <MTSearchResults> - A container tag that displays search results. Arguments include (all are optional):
    • lastn - restricts the search to n results. (example <MTSearchResults lastn="10"> ) The lastn argument, like all arguments for MTSearchResults, can also be specified in the URL (...&lastn=10) or POSTed from a search form)
    • offset - used in coordination with lastn, starts M entries from the start of the list. (example <MTSearchResults lastn="10" offset="10"> will display results 11-20)
    • order - must be either 'date' or 'relevance', the default is 'relevance'. (example $lt;MTSearchResults order="date"> will provide similar results as the CGI search)
    • category - must be a valid category ID for the current blog - restricts the search results to entries from this category.
    • google_highlight - if specified, search words will be highlighted. (example <MTSearchResults google_highlight="1"> )
    • query - the search string (text) to be searched. In normal use, you would NOT include this argument as part of the <MTSearchResults> tag, rather, it would be specified as a URL paramter (example ...query=search+phrase) or POSTed from a search form.
    • tag - the tag to be searched. In normal use, you would NOT include this argument as part of the <MTSearchResults> tag, rather, it would be include as a URL parameter (example ...tag=books) as part of a Tag Search Link.
    • blogs - a comma-separated list of blog_ids if you want to search more than one blog. This argument is optional, if excluded, only the current blog will be searched. Example usage: <MTSearchResults blogs="1,3,8">. Set blogs equal to "all" to search every blog on the sytem.
    • new - type - the type of object to search. This can be set to either "entry" or "page". If you want to search both entries and pages, then you should omit this argument. Example usage: <MTSearchResults type="page">
  • <MTBlogResultHeader> - this is container tag that displays content before the search results.
  • <MTBlogResultFooter> - this is container tag that displays content below the search results.
  • <MTNoSearchResults> - A container tag that displays its content only if zero results are found. Note that this tag must be used after a <MTSearchResults> container.
  • <MTNoSearch> - A container conditional tag that displays its content only if no search phrase was specified. Supports the use of <MTElse> inside this container.
  • <MTSearchCount> - The number of search results displayed on the current search results page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter> container.
  • <MTSearchFirst> - The number of the first search result on the current page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchLast> - The number of the last search result on the current page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchIfNextPage> - A conditional tag that displays its content if there is a subsequent page of search results. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchNextPageLink> - Output a URL to the next page of search results. This tag should be used within <MTSearchIfNextPage> tags.
  • <MTSearchIfPreviousPage> - A conditional tag that displays its content if there is a previous page of search results. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchPreviousPageLink> - Output a URL to the previous page of search results. This tag should be used within <MTSearchIfNextPage> tags.
  • <MTSearchTotalResults> - The total number of matching results in the database.
  • <MTSearchPages> - A container tag that can display links to multiple pages of search results. Optional arguments include:
    • max - the maximum number of page links to display on each page. Example: <MTSearchPages max="20">
    • glue - a text string that seperates each page. For example, if you wanted to display 1 - 2 - 3 - 4, you could use <MTSearchPages glue=" - ">
  • <MTSearchPageNumber> - Displays the page number of each search results page. This must be used within a <MTSearchPages> container.
  • <MTSearchPageLink> - Displays the URL to each search results page. This must be used within a <MTSearchPages> container.
  • <MTSearchIfCurrentPage> - A conditional tag that only displays its contents if the page number is the same as the current page - you would normally use this is you wanted to highlight the current page in the list of page numbers, etc. This must be used within a <MTSearchPages> container.
  • <MTIfStraightSearch> - A conditional tag that only displays its contents if the search is a normal search and not a tag search.
  • <MTIfTagSearch> - A conditional tag that only displays its contents if the search is a tag search and not a normal search.
  • <MTFastSearchScript> - This tag displays the filename of your Fast Search script. You can use this in your search forms as shown below. Note: for this tag to work, you should not rename your Fast Search template -- it should laways be named "Fast Search". This tag works in both static and dynamic templates.
  • <MTTagSearchLink> - This tag overrides the built-in tag of the same name (this automatic, not need to edit templates or anything). The new version of the tag is "smart" -- if Fast Search is enabled for a blog, it will link to the tag search results using the Fast Search script -- if not, it will use the built-in search script. This tag has the following optional argument:
    • tag_dir - Use this argument to specify a "directory" name for your tag search URLs. Note: This feature is only available to personal users who make a donation OR those who buy a commercial license.
  • new - <MTTopSearches> - (Pro only) A container tag that displays a list of top searched keyword phrases. Optional arguments include:
    • lastn - the number of keywords to list. Default: 10.
    • sort_by - the date range that you want to use for the list. This can be sent to one of "day", "week", "month", "year", with the default being "year". For example, <MTTopSearches sort_by="week"> would display a list of the popular searches from the past 7 days, ranked by the most searches during that time period.
    • sort_order - the sort order of the list, default is "descend" (the keyword with the most searches listed first)
  • new - <MTTopSearchKeyword> - Used inside a <MTTopSearches> container, this tag will display the search keyword phrase.
  • new - <MTTopSearchCount> - Used inside a <MTTopSearches> container, this tag will display the number of searches for the keyword. This tag has one optional argument:
    • period - The time period for the count. This can be set to one of "day", "week", "month", "year". If omitted, the count will be based on the sort_order of the list.
  • new - <MTFastSearchLink> - Used inside a <MTTopSearches> container, this tag will display the URL to the Fast Search results page for the keyword. This tag has one optional argument:
    • search_dir - If you want to use clean search URL, set this argument to the "directory" for your clean search URLs. For example, <MTFastSearchLink search_dir="search"> will create URLs like http://blogdomain.com/search/keyword+here.

Note: the new default Fast Search template includes pre-formatted template code that displays Google-style search results page links.

As you may have noticed, some of the tags above are identical to the ones used for the existing CGI-based search results. This is by design, so you will easily be able to cut-and-paste your existing search template code into the Fast Search template, though some minor modifications may be required.

Working Examples:

Here are some working examples you can try. Feel free to try additional search queries and note the speed that searches are performed.

  • Tag search results on MT Hacks. Example tags: spam cms.
  • Mars Rover Blog has over 5,000 entries. Example search: "water on mars". Note that this example shows the default FastSearch template, which is very similar to the default search results template in MT 3.2.
  • Seinfeld Blog has over 8,000 entries, 180 of which consist of the episode descriptions and scripts of all 180 episodes. Fast Search powers the Seinfeld Script Search, which is restricted to a single category containing the episodes. Example search: 'bubble boy'

Requirements:

  • Movable Type 3.2 or 3.3 (Fast Search v2.09)
  • Movable Type 4.0+ (Fast Search v2.2)
  • mySQL
  • Template Installer plugin (included)

Instructions

  1. Download the plugin and expand the zip file.
  2. Upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation (usually something like /cgi-bin/mt/plugins).
  3. Version 2.09 for MT3.2 and 3.3 only: Upload the contents of the 'php' folder to the 'php' directory (usually something like /cgi-bin/mt/php)
  4. Login to the MT admin interface. If you already logged in, choose 'Main Menu'
  5. If your are running MT 3.3 or 4.0+, you should be redirected to an 'Upgrade' screen at this point. The Fast Search upgrade process will update your database to add a fulltext index to the table in your database where entries are stored. Note that this may take some time if you have many entries, and this will add to the overall size of your database. Note: If you are installing FastSearch for the first time and you don not see an upgrade sceen, then you should follow Step 6: go the the plugin settings and click the link to create the Fast Search index.
  6. If you are running MT 3.2, you will not see the upgrade screen (as it is a 3.3 feature), so you need to create the index by browsing to the 'Plugin Settings' of a blog where you want to use Fast Search. Choose the 'Plugins' then find 'Fast Search' and choose 'Settings'. Now click the link in bold that says "Click here to create or rebuild the FastSearch fulltext index". Again, this may take some time, please be patient. After the index has been created, hit the Back button.
  7. Now browse to the 'Publishing' settings for the blog, and scroll down to the Setting called "Dynamic Publishing". If the first option, "Build all templates statically", is selected, you should change this setting to "Set each template's Build Options separately" and click "Save Changes" at the bottom of the screen. Otherwise, you don't need to make any changes here.(Note that change this setting will create an .htaccess file in the root path of the blog. Normally you won't notice this and everything will work fine, but if you have an existing.htacces file, you may want to take a look at it to make sure everything looks okay)
  8. If you just changed your Dynamic Publishing settings in the previous step, you should now rebuild all files for this blog by choosing "Rebuild Site" from the left menu, then "Rebuild all Files". Version 2.09 for MT3.2 and 3.3 only: You should also ensure that you have a "Dynamic Site Bootstrapper" (mtview.php) index template and make sure that it gets built, if it hasn't been built previously.
  9. Now return to the Fast Search settings and check the box to enable Fast Search. You may also want to adjust the settings for Maximum Search Results and logging, then click "Save Changes".
  10. Open the Fast Search settings once again and choose "Install Tenplates" link. The templates will be created. The "Fast Search" index template is an dynamic template (which can be customized) used to display the search results. (If desired you can also skip this step and create the index template manually, use the template tags as desired, or by cutting and pasting your exisiting search template code)

Upgrading Fast Search

Follow steps 1 to 3 above, then adjust your Fast Search plugin settings and search template, if desired.

After Upgrading to MT4

After upgrading to MT4 and installing Fast Search 2.1, there is one more thing you may need to do. In MT4, the 'php' folder resides inside /plugins/FastSearch/. But if you installed previous version of Fast Search, you had to upload the 'php' files to /php/plugins directory. Now that you have upgraded to MT4 and Fast Search 2.1, you need to delete those files from /php/plugins.

The Search Form

If you already have search forms on your blog pages, you need to update them to point to the new Fast Search template. For each template that contains a search form, look for the following (or similar):

<form method="post" action="<$MTCGIPath$><$MTSearchScript$>"

...and change it to:

<form method="post" action="<$MTBlogURL><$MTFastSearchScript$>"

...save the template and repeat this step for every template that has a search form.

If you want to insert a new search form on your site, or completely replace existing forms, you can use the following:

<form method="get" action="<$MTBlogURL$><$MTFastSearchScript$>">
    <label for="query" accesskey="4">Search this blog:</label><br />
    <input id="query" name="query" size="20" />
    <input type="submit" value="Search" />
</form>

Or better yet, install the new Fast Search Widget from the plugin settings area, and use WidgetManager to add the widget to your sidebar (you should also remove the existing search widget).

Of course you can also add optional fields to the form such as:

<input type="hidden" name="order" value="date" />

....to sort the results by date, or....

<input type="hidden" name="category" value="5" />

...to restrict the search to category_id = 5.

<input type="hidden" name="type" value="entry" />

...to restrict the search to only entries.

Once you have the search form(s) on you site, rebuild those pages and start searching. You should notice significant speed and resource improvement, especially on blogs with many entries.

Fast Search Settings

Fast Search settings are on a "per blog" basis. To access the settings, browse to the blog you want to use, then choose "Settings", then "Plugins". Look for Fast Search in the list and click the "Show Settings" button.

Get Fast Search Pro

After purchasing a license below, you will be taken directly to a download page with a link to download Fast Search Pro, which includes the "clean tag URLs" and Top Searches features described above. See the text file included with the download for instructions)

Commercial use - (up to 5 blogs) - $97.00

">Fast Search 2.2 for MT4:
">

">Fast Search 2.09 for MT3.2 and 3.3:
">

Blog Network License - (more than 5 blogs) - $249.00

">Fast Search 2.2 for MT4:
">

">Fast Search 2.09 for MT3.2 and 3.3:
">

Get Fast Search

Fast Search is FREE for non-commercial use ( although you must include a

Movable Type search results powered by 
<a href="https://mt-hacks.com/fastsearch.html">Fast Search</a>
link on your search results pages.

Download Now

Fast Search 2.2 for MT4+:
,<$MTAjaxRatingVoteCount type="fastsearchdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="fastsearchdownloads"$> (since 3/6/07)

Fast Search 2.09 for MT3.2 and 3.3:
,<$MTAjaxRatingVoteCount type="fastsearchdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="fastsearchdownloads"$> (since 3/6/07)

As always, suggestions and feedback are appreciated. Please reply to this entry.

Note: FastSearch is a suitable replacement for most implementations of the built-in search function in Movable Type. However, there are a few features that Fast Search does not include. Fast Search does not support comment searches, regexp search, case-senstive search, the use of AND and OR operators, and Edit Entry Links). Some of these features may be supported in future versions -- please let me know what features you would like to see.

Entry Post is a plugin for Movable Type that enables visitors to your site to submit entries using a form. Visitors do not need a user account and they do not need to login. Similar to posting a comment, they can simply fill in a form and submit.

New features in version 2.6

Entry Post 2.6 contains the following new features for use on MT4 and MT4.1:

  • Support for adding new entries to multiple categories
  • New "type" parameter enables you to create new "Pages" using entry post.
  • Support for use under MT 4.1
  • Entries can now be optionally set to "Unpublished (Review)" status (a 4.1 feature only)
  • Code refactoring for better performance
  • Support for the upcoming MT Forum plugin

I have been using external forms and scripts to submit MT entries for several years. Examples include Mars Rover Forum and Seinfeld Forum. These MT-powered forums enable forum members to post new topics (entries) using an external form. Based on this experience, I have converted the entry posting script into a plugin -- and added a bunch of additional features.

Basic Features

  • enable visitors to post entries to your blog
  • new entries can be set to "Published" or "Unpublished" (pending admin/moderator review)
  • supports all MT4 authentication methods (optional)
  • entries can be scanned against MT's Spam Filters
  • entries can be previewed before posting
  • email notifications of new entry submissions
  • entries can be added to a category (set a default or allow poster to choose)
  • entries can be tagged (default list of tags, or specified by the poster)
  • included default templates include spam-protected form

Advanced Features

  • enable posters to upload an image with the entry
  • the "EntryPost Response" template makes it easier to customize the screen that users see after submitting an entry.
  • email notification template enables to to customize the contents of the emails, including the ability to include extra fields data
  • other entry fields supported (Extended Entry, Excerpt, Keywords)
  • option to disable rebuilds when an entry is posted
  • option to disable entry creation (makes the form work as a 'contact me' form with email notification turned on.)
  • xml response option
  • support for extra fields defined by you
  • override "allow comments" and "allow trackbacks" settings.

Try Entry Post 2.5 Now

I have enabled Entry Post 2.5 on the MT Test Blog. Submit an entry by clicking here. Feel free to login (optional) and submit entries. (Note that you may need to clear your cookies before testing, as the test blog is on a different MT installation than MT Hacks).

  1. Basic Form (default form installed with Entry Post)
  2. Advanced Form (an example form to demonstrate advanced features)

By using the forms above, you will quickly get an idea of the visitor experience with Entry Post. In its simplest form, it is very similar to posting a comment.

Creating "Pages" with Entry Post

New in version 2.6, you can use Entry Post to create "Pages" instead of entries. To do this, simply add a hidden "type" field to the form with the value of "page":

<input type="hidden" value="page">

The Administrator Experience

Entry Post has been designed to be easy to install and configure. Simply upload the files, change some file permissions, then configure the plugin via the Plugin Settings for each blog. Required templates are installed with a single click (which can then be customized, if desired).

The settings area for Entry Post looks like this:


By using the above settings, you can configure most of the features of Entry Post.

Template Tags

EntryPost 2.5 includes the following template tags that you can use to display information posted using the plugin:

  • <MTEntryPosterName> - The name of the poster, as submitted in the "Name" field. If the name field it blank, the plugin assumes that the entry was not submitted via Entry Post, and this tag will display the name of the author of the entry. This makes it very easy to update your templates, simply replace the <MTEntryAuthorDisplayName> tag with the <MTEntryPosterName> tag, and it will "just work", regardless whether the netry was posted by an author or posted by a visitor to your blog.
  • <MTEntryPosterEmail> - The email address of the poster, as submitted in the "Email" field. If the "Name" field is blank, this tag outputs the email address of the author. For privacy and anti-spam reasons, I don't recommend using this tag in your templates.
  • <MTEntryPosterURL> - The URL of the poster, as submitted in the "URL" field. If the "Name" field is blank, this tag outputs the URL of the author.
  • <MTEntryPosterIP> - The IP address of the poster. For privacy reasons, I don't recommend using this tag in your templates.
  • <MTEntryPosterImage> - The relative path of the image uploaded by the poster.
  • <MTEntryPosterLink> - Outputs the linked name of the poster. If the "Name" field is blank, it will display the author's linked name. Supports the same arguments as <MTEntryAuthorLink>.
  • <MTEntryPostField> - This tag can be used to to display the value of any extra fields submitted using Entry Post. A single field argument is required, which should inlcude the name of the field, without underscores. For example, <MTEntryPostField field="Favorite Color"> would display the value of the Favorite Color field.

Advanced Use - Adding Extra Fields

Entry Post makes it very easy to add extra fields. All you have to do is add the extra fields to the form. First, browse to Templates and then Template Modules and edit the 'EntryPost Form" module. Now add a field to the form in the following format:

<input type="text" name="entrypost_Favorite_Color" />

..and you are done! Note that the "name" argument above must begin with "entrypost_", followed by the name of the field. Use underscores ("_") instead of spaces, if the field name has more than one word. You can add multiple extra fields in this manner, and they will automatically be added to the entries posted, and displayed automatically on the admin Entry screen.

Requirements

Installation


  • Download the zip file and extract the contents.

  • Upload the "EntryPost" directory (and all its sub-directories and files) to your MT 'plugins' directory.

  • Change the file permissions to 755 (CHMOD 755) for the EntryPost/mt-entrypost.cgi file.

  • Login to MT and go to 'Preferences > Plugins' area of a blog and "Settings" link for EntryPost. You should now see the available settings for EntryPost, as shown above.

  • Enable the plugin by checking the Enable checkbox, choose other settings, and the save the settings.

  • Return to the EntryPost settings and install the templates by clicking the provided link. After the templates have been created, you can customize them, if desired, to suit your needs or match your site design. The primary template is an index template called "EntryPost Submit Page" - this page includes the form to post entries.

  • If you are using the default template installed above, you must also made a small edit to your "Header" template module. Go to Design>Templates then choose template Module from the menu on the right. Open the module called "Header". Before the </head> tag, add the following:

    <MTIf name="entrypost_submit">
    <script type="text/javascript" src="<$MTLink template="javascript"$>"></script>
    </MTIf>

  • You will probably now want to provide a link to the Submit Page from your main index. One way to do this is to use the provided "EntryPost Submit Link" widget (using WidgetManager). Alternatively, you can manually create a link such as <a href="<MTEntryPostSubmitPage>">Submit an Entry</a>.

Get Entry Post

Commercial License - $97

If you site or blog is for-profit, a commercial license is required. The license includes all future updates to Entry Post and priority feature requests.

Personal License - $33

For use on a personal site or blog, a personal license is required. The license includes all future updates to Entry Post.

Not on MT4+? Version 2.0 supports MT 3.2 and MT3.3x.

If you would like to use Entry Post on a non-profit or charity site, please contact me.

As always, feedback, suggestions, and product questions are appreciated. Please reply to this entry.

Note: - While Entry Post includes built in support for poster fields and extra fields, it is not intended to be used as a general purpose "extra fields" plugin. Fields can only be added via the external Entry Post form. If you are interested in a general purpose fields plugin, there are several available, including CustomFields and RightFields.

Movable Type 4.1 has just been released. This represents first stable release of Movable Type Open Source (MTOS). In addition, the commercial version has also been released, which includes the same MTOS 4.1 + the "Professional Pack", which includes a slick commercial template set and Custom Fields functionality. MT 4.1 includes a number of new features and user interface enhancements. Highlights include system-wide template modules, a pluggable rich-text-editor, and new templates sets feature that lets you choose a template set when you create a new blog.

I have done a quick review of MT Hacks plugins on MT 4.1, and most of them that worked under 4.0x also work fine under 4.1. However, several plugins will need to be updated before they are fully functionally under 4.1. These include:

  • Visitor Stats - If you upgrade to 4.1 now, the plugin will continue to tracks stats, but the dashboard graphs won't show, and there may be a few other admin interface oddities. An upcoming version will address these.
  • User Profiles - Some user interface elements won't appear properly. Also, MT 4.1 comes with user photos as a core feature, so an upcoming version of User Profiles will migrate your profile photos to use the 4.1 system.
  • Fast Search - Fast Search may work fine under many cases in 4.1, but in some cases a "division by zero" error will occur, caused by changes made in 4.1. This will be addressed in an upcoming version. Get the Update Here.
  • Dynamic Menus - Needs to be updated to work with 4.1.
  • Breadcrumbs - On most screens, it is okay, but in some cases, a little wacky.

There may be others, I haven't tested everything yet. If you are brave enough to upgrade to 4.1 right away, please reply to this entry with any issues or strangeness that you encounter with my plugins.

Designed to be used with the Template Installer plugin, Template Exporter is a plugin for Movable Type that enables you to easily export your blog templates in a way that can be shared, distribute, or even sold to to others.

New in Version 1.1

  • Support for the new "Template Sets" feature in MT 4.1. Starting with MT 4.1, when you create a new blog, you can choose from multiple template sets to use. Template Exporter v1.1 enables you to export your current templates into sets that you can chose when creating new blogs, in a very easy way. More info on this feature below.
  • The code has been optimized to improve performance.

Note: templates exported with version 1.1 of Template Exporter cannot be install with older version of the Template Installer plugin, you will need Template Installer v1.1 (or higher).

Also note that version 1.1 can be used with both MT 4.01 and MT 4.1.

Screencasts

The easist way to describe how Template Exporter works is to show you. The first video below shows how you can export all of a blog templates:

And the the following video shows how you can export only selected templates:


Potential Uses of Template Exporter

This plugin can be put to use in several ways:

  • To create a "backup" of their templates, which can be re-installed later if desired.
  • To copy a set of template from one blog (or installation) to another (some call this "template portability").
  • To share your templates with friends, or post them for download on your blog.
  • To package and sell your customized template designs.
  • To deploy a common template design to multiple blogs in an MT installation.
  • To distribute blog Widgets.
  • To distribute blog templates with MT plugins, providing easy installation.

How it Works (if you care)

Template Exporter provides two main functions:

  • It extracts your templates and saves them in files named according to the template_identifier or template_name, such as main_index.mtml. Each template gets stored in its own file. (Technical note: if a template has an "identifier" field defined in the database, then it will be used for the file name. If not, a "dirified" version of the template name will be used, so "Main Index" will become "main_index".)
  • It automagically creates a YAML file named config.yaml, which defined the configuration information for template set. This includes things like the type and name of the template, and for index templates, the output file and "rebuild with indexes" setting. For example of a Template Exporter config.yaml file, click here.

These files are then saved in their own directory inside a "template_exporter" subdirectory of your blog. You can then use FTP or other means to download the directory and files from there, and subsequent shares the exported template or use with Template Installer to install them on another blog or installation.

Using Template Exporter with the MT 4.1 Template Sets Feature

Movable Type 4.1 includes a feature called Templatee Sets that enables you to choose a template set when you create a new blog. Template Exporter supports this template set format, so you can export your favorite template set and use it as one of the template set choices. No code or plugin creation required. Just use these easy steps:

  1. Go to the Templates area for the blog you want.
  2. Choose the "Export Templates" link from the "Actions" menu on the right side of the page.
  3. Give the new set a name and export it.
  4. Now take the exported set (including the folder that contains the set - for example, if you named it "Cool Style Templates" then the folder would be 'cool_style_templates') and move it into the 'plugins' directory.
  5. Create a new blog and your set will be among the options!

Requirements

  • MT4+

Installation

  1. Download and extract the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation.
  2. Go the blog you want, then Design > Templates then choose the "Export Templates" link from the lower right. (Or, to export only selected templates, check the boxes of the templates you want, then choose "Export Template(s)" from the "more actions" drop-down box, then click "Go".)
  3. Give the template set a name, using only letters, numbers, and spaces, and then click Continue.

Get Template Exporter

Commercial License - $97

">

Personal License - $33

">

Personal License - Free

Template Exporter is free to MT Hacks members for non-commercial use:

Download Now:

,<$MTAjaxRatingVoteCount type="templateexportererdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="templateexportererdownloads"$>

Developer/Designer License - Free

Template Exporter is free for commercial use by MT developers and template designers for use on their own MT installations for the purposes of exporting templates for public sale or for distribution with plugins. Developers and Designers can contact me for a copy.

Comments and suggestions are welcome.

Template Installer is a plugin for Movable Type that makes it easy to install new template sets for your blogs. Combined with Template Exporter plugin, this makes is very easy:

  • For bloggers to share templates / widgets with others
  • For designers to package, sell, and distribute template sets.
  • For companies to deploy template sets to company blogs

Currently, sharing templates requires a lot of cutting and pasting, a very time consuming process. Using Template Installer it takes only a few clicks to install a partial or complete template set in your blog.

New in Version 1.1

Update 1/25/08 13:15 EST:Due to an error on my part, the download link was pointing to the old version for the previous 24 hours. This is now fixed. Please use the download link below to get the new version.
  • Version 1.1 of Template Installer now includes support for MT 4.1. You can use this version with either MT 4.01 or MT 4.1.
  • The code has also been optimized to reduce CPU / memory usage, thus improving performance.
  • No new features have been added.

Note: Template Installer v1.1 can be used to install templates that have been exported using any version of Template Exporter. Templates exported by the new Template Exporter v1.1 cannot be installed with older versions of Template Installer, you'll need version 1.1 for those.

Screencast

The following screencast shows how easy it is to install new templates using Template Installer. In this example, the user chooses to install the "Default Templates", which is handy when you want to revert back to the defaults. The same process would be used to install a completly new set of templates. Click on the video below to watch:

As you can see, it is very quick and easy. As you can see from the last screen, Template Installer will back up your existing templates if they have been customized from the MT defaults.

The missing step from the above example is to upload the desired template set to the /plugins/TemplateInstaller/template_sets directory. No need to edit any files or settings. Once you have uploaded the set, it will appear as an option when you click "Install Templates" from the right side of the Manage Templates screen.

Requirements

  • MT4+
  • Template Refresh plugin (included with MT4)

Installation

  1. Download and extract the zip file, and upload the contents of 'plugins' folder to the 'plugins' directory of your Movable Type installation.
  2. Go to Design > Templates and then choose the "Install Templates" link from the lower right of the page.
  3. Choose a template set from the drop-down box, then click continue.
  4. View the results, then click "return to templates", and you are done.

Included Template Sets

The current version of Template Installer includes 3 template sets:

  • Default Templates - These are the default templates that come with MT4. While you can also use the Template Refresh plugin to re-install these, Template Installer provides easy access to do so. This set is also a good example set to see how it works.
  • Default Templates with Prefix Notation - A version of the default templates that use the new prefix notation. For example, <MTEntries> becomes <mt:Entries>, and so on. This template set will have the same output in your published blog as the default set, only the notation used is different. Note that the tags in this are not complete lowercases (it used mt:EntryTitle and not mt:entrytitle) Thank you to Marleen Zachte for creating this set and giving permission for its inclusion with this plugin!
  • Page Template Only - This set will install the MT4 default "Page" template, as well as the included "Page Detail" module. This set will be useful for those upgrading from previous version of MT, since the Page template is not automatically installed on existing blogs, during the MT4 upgrade.
  • 2 Column Layout Header - This set provides a replacement to the "Header" template module. The default MT4 templates use a 3-column layout. If you want to eaily change your blog to a 2-column layout, just install this template set.
  • Template Installer Widget - The set includes a widget template that you can use with the MT Widget Manager to show your support and spread the word about Template Installer. It is also a good example of how Template Installer can be used to distribute and install blog widgets.

Want more template sets?

Template Installer is new, so there are currently not many template sets available. If you have template sets that you would like to share, I will post a link to them here. Please contact me using the contact link in the menu above. You should also check and post your template sets to the following page on the MT wiki: Template Sets for MT4.

Get Template Installer

Template Installer is free to MT Hacks members for commercial or non-commercial use:

Download Now:

,<$MTAjaxRatingVoteCount type="templateinstallerdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="templateinstallerdownloads"$>

A Feature for Plugin Developers

For certain plugins, it makes sense to distribute custom template or widgets along with the plugin code. In the past, I included a special template installer routine to help users install such templates. In future, I will be use Template Installer for this purpose, and you can too. Rather than ask users to upload your template set to the Template Installer directory and ask them to install the set, I have include a "side door" feature that can be used instead. Using this approach, the templates are stored in a sub-directory of your plugin. Then you can simply present a link to your users to install the templates. The link would look something like this:

<a href="javascript:void(0)" onclick="return openDialog(false, 'install_blog_templates', 'template_path=$your_template_path&set=$your_set_name&blog_id=$blog_id &magic_token=$magic_token&return_args=$your_return_args')">Install Templates</a>

Of course, you will likely use template tags to form this url, but the key things are to make it open a dialog, to set the "template_path" parameter to the path to your template files (relative to the mt root directory), the "set" parameter to name of your set, and you can also set the "return_args" to return the user to your plugin screen after the templates have been installed. When users click this link, they will bypass the "choose a template set" screen and your templates will be installed immediately.

How do I Export Templates for use with Template Installer?

While you could do it manually, and it wouldn't be too hard, you probably want to use the sister plugin, Template Exporter, which automates the process in a single click.

As always, thoughts and suggestions appreciated.

Pagination is plugin for Movable Type that enables you to paginate lists of entries. For example, at the bottom of your home page, you could add a "Next" link so your readers can go to "Page 2" and read previous entries. You can display a list of linked page numbers to enable visitors to jump to any page number they want.

With Pagination Pro, you can also paginate your Category, Author, and date-based archives, and even paginate your Entry archives, displaying only a small number of comments on each page.

Try it Now - Live Demo

The MT4 Test Blog has the Pagination Pro plugin enabled. Scroll to the bottom of the home page to see the list of pages and follow the links. Also take a look at an example of a paginated Category archive here. Finally, take a look at a paginated version of a 300+ comment entry here.

How it Works

My goal here was to create a pagination plugin with high performance. I didn't want it to slow down rebuilds, and I wanted pages to display for readers without delay. With these goals in mind, I decided to dynamically render pages 2, 3, 4, and so on. This means that unlike the default for most pages in Movable Type, pages 2+ are not static files that get published to your blog directories. They dynamically rendered by the plugin's page viewer script. Note that this viewer script is Perl-based and does not use MT's built-in PHP-based dynamic publishing system. The benefit of this is that you can virtually any plugin template tags in your paginated templates, and you don't need to use PHP. So when someone views page 2, the script goes into action and builds the page and displays it.

Paginated URLs are clean, ending in index.html?page=2 (or similar). Pagination makes use of mod_rewrite for Apache to keep these URLs clean (most MT sites run on Apache, but there may be some alternative approaches for other web servers).

Page-Level Caching

To speed up dynamic page views and reduce CPU/memory/database usage, Pagination supports (optional) page-level caching, powered by the Cache Block plugin. This means that once the plugins generates the HTML for "page 2", it will store that in the cache for next time. And next time someone wants to see "page 2", it can be quickly fetched from the cache. In my tests, dynamic page views from the cache took about 0.04 seconds, so this is very fast. In the plugin settings you can specify how long to cache pages before refreshing the cache.

Template Tags

Pagination comes with a template module that makes it easy to implement -- in most cases you can simply include the module in your existing templates and it will 'just work'. So you may not need to learn or use the template tags below. But if you want to customize the appearance of your Pagniation links, you can use/edit the following tags:

  • <mt:PaginationPages> - This is a container tag for displaying linked page numbers, previous / next page links, etc. This tag should only be placed inside the following containers: <mt:EntriesFooter>, <mt:EntriesHeader>, <mt:CommentsFooter>, and <mt:CommentsHeader>. There are several arguments:
    • max_pages - (Required) The maximum number of page numbers to display at one time. Note that page numbers will roll forward as readers view higher page numbers, just like Google paginated search results.
    • glue - (Optional) This should contain some text or symbols that you to display bewteen each page number. For example, if you want 1 - 2 - 3, then use glue=" - ".
    • lastn - (Required) The number of items shown on each page. This must match the lastn argument of the parent <mt:Entries> or <mt:PaginatedComments> tag.
    • archive_type - (Optional) For advanced use, you can use this tag to override the archive_type used to calculate the page numbers and links. If omitted, the plugin will use the archive_type of the page being built.
    • class_type - (Optional) For advanced use, this tag will override the type of MT object being counted to determine the number of pages.
  • <mt:PaginationPageNumber> - Used inside a <mt:PaginationPages> container, this tag will display the page number being processed in the loop (not the current page number that is being published/viewed).
  • <mt:PaginationPageLink> - Used inside a <mt:PaginationPages> container, this tag will display the URL to page number being processed in the loop.
  • <mt:IfPreviousPage> - Conditional tag that is true if the page being displayed is 2 or higher.
  • <mt:PaginationPreviousPageLink> - The URL to the previous page.
  • <mt:IfNextPage> - Conditional tag that is true if the currently viewed page is not the last page.
  • <mt:IfNotLastPage> - Conditional tag that is relative to the page being processed, not the page being viewed - returns true if the page being processed is not the final page.
  • <mt:LastPageLink> - The URL to the last page.
  • <mt:LastPageNumber> - The number of the last page.
  • <mt:PaginatedComments> - (Pro only) This is replacement container tag for <mt:Comments>. If you want to paginate the list of comments on an Entry archive, you should use <mt:PaginatedComments> instead of <mt:Comments>. You can use all the same <mt:Comment_____> tags inside the container. Arguments include:
    • show - The number of comments to show per page. (Note that you can also use 'lastn' for this argument)
    • offset - The offset for the page of comments. This should always be set to "$pagination_offset".

Templates Set

Pagination comes with two templates:

  • Pagination - A template module that can be included in other templates to display page links.
  • HTACCESS for Pagination - An index template that builds the required mod_rewrite rules. Important: The output file for this template has been set to "htaccess.txt" on purpose. Some sites have already have a ".htaccess" file and you want to be careful not to overwrite the existing one (for example, if you use MT's PHP dynamic publishing, with my Fast Search plugin or otherwise). Check to see if you already have an .htaccess file and if you do, you may want build this template as "htaccess.txt" and then copy and paste the rules into the appropriate place in your .htaccess file (if using MT's dynamic publishing, paste before the existing rules.) If you want to use this template to build your .htaccess file, you will need to change the output file to ".htaccess".

Requirements

Note: while not required, the Cache Block plugin is needed if you want to use the Pagination caching features.

Installation

  1. Download the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation.
  2. Change the permissions of the /plugins/Pagination/pages.cgi script to 755 (CHMOD 755).
  3. Go to the blog you want and then to Preferences > Plugins and then open the settings for the Pagination plugin. Enable the caching settings if desired, then Save.
  4. Return to the settings and click the "Install Templates" button. This will install the templates mentioned above.
  5. Setup your .htaccess file with the Pagination rules, as described above.
  6. Edit your Main Index template and add the following before the </MTEntries> tag:

    <mt:EntriesFooter>
    <mt:Include module="Pagination">
    </mt:EntriesFooter>

  7. Modify your <MTEntries tag to include the argument offset="$pagination_offset". This is important. Example: <MTEntries lastn="10" offset="$pagination_offset">

  8. (Pro only) Do the same for your "Entry Listing" archive template, for both MTEntries containers.

  9. (Pro only) If you want to paginate your comment listings on your Entry archives, edit the "Comments" template module to replace the <MTComments> container with the MTPaginatedComments container, as discussed above. Be sure to include show="10 offset="$pagination_offset".

Get Pagination Pro

Commercial License for 1 to 10 blogs - $97

">

Blog Network License for 10+ blogs - $249

">

Personal License for 1 to 4 blogs - $33

">

Get Pagination

Pagination is free for personal or commercial use, but you must leave the "powered by" link, which is added automatically below the paginations links.

Download Now

,<$MTAjaxRatingVoteCount type="paginationdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="paginationdownloads"$>

As always, comments, questions, and suggestions are welcome.

Cache Block is a plugin for Movable Type that can dramatically speed up publishing by caching blocks of built template code. Cache Block is very flexible, enabling you to cache an entire page, a small template snippet, a template module, a sidebar widget, and entire sidebar, etc. Each block can be set to expire after a certain duration -- some blocks you may want to cache for 5 minutes, others for hours, or even days. When used wisely, the result is significantly faster publishing times and faster comment-posting.

Cache Block on ReadWriteWeb

ReadWriteWeb is a very popular technology blog with many entries and comments. And with over 130 front page Diggs and counting, ReadWriteWeb gets a lot of traffic. With the goal of speeding up publishing and comment posting, I recently implemented Cache Block on ReadWriteWeb. Combined with other optimizations, Cache Block helped to significantly improve publishing speed and now comments post much faster. This is one example of Cache Block being used on a live, busy site.

How It Works

For each page that is published by Movable Type, a large number of template tags are evaluated by the system, which often requires many database lookups. The Cache Block plugin strives to reduce those database lookups by caching groups of template code that has already been evaluated. For example, suppose you decided to cache your entire sidebar. The first time MT publishes that sidebar, it will do many database lookups to generate lists of recent entries, comments, lists of archives and tags, etc. After that, the Cache Block plugin will take all of that sidebar HTML and save it in the cache. The next time MT needs to publish your sidebar, it will find it in the cache, so it will skip the evaluation and related database lookups for the entire sidebar, and simply fetch the pre-built sidebar from the cache. This can speed up the process a lot. Imagine if you are trying to publish a 1000 page site, and each of those pages includes the sidebar!

Behind the scenes, Cache Block checks to see if memcached is available and enabled. If it is, CacheBlock will stores blocks using memcached, which is very fast. BUT, you don't need to have memcached! If memcached is not available, Cache Block will simply store the block in the database. As such, it will still require a database lookup to retrieve it from the cache, but you can save dozens or even hundreds of database lookups by caching significant segments of built template code, by replacing them with a single lookup to the cache. Even without memcached, Cache Block can dramatically speed up publishing.

Template Tags

Cache Block has just one template tag:

  • <MTCacheBlock> - This container tag should be wrapped around the block that you want to cache. Everything between the opening <:MTCacheBlock> and the closing </MTCacheBlock> will be saved as a single block in the cache. There are several arguments for this tag:
    • key - (Required) The key argument represents the cache key, a unique identifier for the cache block. Each block should have unique key. Note that keys are not namespaced on a per-blog basis -- meaning that a key of "foo" used in one blog will overwrite a key of "foo" on another blog.
    • expiry - (Required) The number of minutes that the block will be stored in the cache. Longer expiry times will result in more speed improvements, but the ideal expiry depends greatly on the content being cached and the volume of activity of your site.
    • refresh - (Optional) This argument is designed for temporary use only. Adding refresh=1 will force an update of the cache. In other words, with this argument, blocks will never be fetched from the cache. This argument is useful when you are making design changes to your templates, and you want to refresh the cache block so that you can view your changes on your site. After your template editing is complete, remember to remove the refresh=1 from all MTCacheBlock tags, so you can once again reap the benefits of the cache.

Cache Block Expiry

For Cache Block stored in the database, blocks are expired by a scheduled task that is set to run once per minute, at most. To ensure timely expiry of cache blocks, I strongly recommend that you set up a cron job to run the /tools/run-periodic-tasks script on a regular frequency that is consistent with your caching strategy. Click here for more information about scheduled tasks and setting up a cron job.

Cache Block Pro

Cache Block Pro includes the same powerful caching features, and adds powerful administration tools to facilitate further optimization and management of your Cache Blocks. Features include:

  • Flush Entire Cache - This useful function provides a quick way to flush your entire cache. Normally, you wouldn't want to do this, but during a redesign of your site, this one can come in handy.
  • Cache Blocks Widget - When you are editing a template, this widget will appear on the right side of the page, listing the Cache Blocks used by the template. When possible, listed blocks will have a "flush" link next to them so you can flush a single block easily. You can also click on the linked names of the blocks to view the contents of the Cache Block.
  • View All Cache Blocks - Use this feature to view a list of all Cache Blocks on the system, including the expiry date of each. Note that this feature is not currently available if you are using memcached.
  • Edit Cache Block - Manually edit the contents of specific Cache Blocks and change the expiry dates as desired.
  • View Rendered Block - From the Edit Cache Block screen, you can view the rendered HTML of the block. Instead of view the built HTML source, this will display thye block as it would be shown in the browser (in most cases, without applying your external styles)

Requirements

  • MT3.3+

Note: The Pro features described above require MT4.01 or higher.

Installation

  1. Upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation (usually /cgi-bin/mt/plugins/)
  2. Start using the >MTCacheBlock> tag in your templates, as described above.

Click here for Cache Block Examples.

Get Cache Block Pro

Commercial License for 1 to 10 blogs - $97

">

Blog Network License for 10+ blogs - $249

">

Personal License for 1 to 4 blogs - $33

">

Get Cache Block

Cache Block is free for personal or evaluation use.

Download Now

,<$MTAjaxRatingVoteCount type="cacheblockdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="cacheblockdownloads"$>

As always, comments, questions, and suggestions are welcome.

MT Forum is a forum plugin for Movable Type.

I have been using Movable Type as a forum for over 3 years. Finally, I have taken the time to package it all up so that it can be released as a plugin. Actually, most of it has been completely re-written to include more features and for better performance.

Sneak Preview: Live Demo of MT Forum

The first version of MT Forum will be released soon. For now, you can give it a try on the MT4 Test Blog. MT Forum has the familiar look and feel of online discussion forums. You can register for an account, or sign-in with OpenID, Vox, etc. Or post without authenticating (admins decide who can post). Try out the demo by following the link below, create some new topics and reply to existing topics:

Click here to try MT Forum

Please note that some of the features shown in the demo are provided by other plugins from MT Hacks, such as Visitor Stats Pro, User Profiles Pro, and Comment Titles. These plugins are not required to use MT Forum, but certain features (such as topic view counts, user profile pages, and comment titles) will only be available if you have these plugins installed. The Entry Post plugin is required.

Please reply to this entry with feedback, or post on the demo forums!

Stay tuned for more info and the upcoming release of MT Forum.

I am going to submit this as a bug report as well, but I wanted to share this on Pronet, as it may save other MT consultants/developers the hours of support time that I have spent on this issue. I have seen this 3 times with user of plugins, and it can be difficult to diagnose.

In short the problem seems to affect people:

- who upgrade to MT4 from a previous version of MT,
- AND who used dynamic publishing before and after the upgrade,
- AND whose path to MT4 is different from the path to the older version (for example, before the upgrade is was /var/www/cgi-bin/mt and after it was /var/www/cgi-bin/mt4)

The problem is that the old mtview.php (in the blog root directory) does not get updated. The side effect is that the mtview.php file is still pointing to the pre-MT4 directory, point to the old mt-config.cgi and the old mt.php file. In many cases the old versions of these files still exist at the old paths, because when people upgrade they often upload MT4 to a new directory, leaving the older MT in place -- this makes this problem difficult to diagnose, because MT4 is read a valid config file and valild mt.php library -- it doesn't know that it has the old files.

Things can get even more confusing when the old MT config file points to a old, pre-upgrade version of the database that still exists -- one user of Fast Search was stumped (as was I) when after upgrading to MT4, his search results included only the pre-MT4 entries -- there were no error messages at all, but the search was being handled by the older version of MT against the older version of the database!

Another symptom of this problem is when MT can't seem to find certain dynamic template tags. Errors like:
Smarty error: [in mt:17 line 23]: syntax error: unrecognized tag 'MTTemplateTagName' will result, even though the php files may be in the correct location.

Part of the problem here stems from the fact that MT4 got "smart" and no longer included the "dynamic bootstrapper" template with each blog, that built the mtview.php, but rather built it behind the scenes when publishing settings are saved. The side effect was that the file didn't get rebuilt with indexes, as was the default in previous versions. It was also "out of sight, out of mind" with MT4. While the MT4 upgrade includes an upgrade task to remove the mtview.php bootstrapper, it does not delete the the old mtview.php file, nor does it attempt to update the existing mtview.php file(s). :( I think (but am not sure) that saving the publishing settings for blog will attempt to update the the file, but who changes there publishing setting after upgrading?

If you or a client run into any strange dynamic publishing issues under MT4, I recommend the following as one of the first troubleshooting steps:

1. Rename the existing mtview.php file.
2. Save the Publishing settings for the blog. This should recreate the mtview.php.

I hope this helps save others from the hours of frustrating troubleshooting that I have ensured on this....

User Profiles is a plugin for Movable Type 4 that extends the user profiles in MT4. Version 1.5 adds the ability for commenters to add user profile images (sometimes called avatars), which can be displayed when posting comments. Also new is User Profiles Pro, which includes user profile pages for all authors and commenters, and extended profiles with many built-in fields and support for extra fields.

From the admin interface, here what the author photos feature looks like on the dashboard:

In the Pro version, extended profiles can be edited from the admin interface, or by commenters:

New Features in User Profiles 1.5

  • Commenters can upload a profile image (any authenticated commenter, including Vox, OpenID, etc.)
  • Authenticated commenters can edit basic profile info
  • Members widget displays user profile images

Features in User Profiles Pro

User Profiles Pro includes the following additional features:

  • Authors and commenters have extended profiles. Extended profiles come with 22 built-in fields (such as City, Country, Birthdate, About Me, etc.).
  • Custom fields for extended profiles can be defined by system administrators
  • Publish profile pages for each author and commenter, including profile images, basic and extended profile info, recent entries, and recent comments.
  • Automatically import profile images (avatars) for all your existing users from Gravatar, MyBlogLog, Vox, Livejournal, and BlogCatalog.
  • AJAX function auto-imports avatars in the background after new commenters login.

How it Works

From admin MT4 interface, users can add a profile image by editing their profile. (System admins can perform this task for any user on the system):

Users will the be prompted to upload a profile image:

Square images are recommended, but if the uploaded photo is not a square, the plugin will automatically crop the image to make it a square.

After saving the profile image, the image will appear in the user profile:

Authenticated commenters can use a similar process to edit their profiles and upload a profile image:

Finally, the <MTAuthorImageURL> and <MTCommenterImageURL> tags can be used to display the user's profile image on your published blog pages.

Profile images are stored as Assets within Movable Type. This means that these images can also be used in other ways, such as inserting them into entries. Movable Type will keep the full size image (cropped to square, if necessary) and create thumbnails when using the tags described below. Each profile image is tagged with 'profileimage'.

With User Profiles Pro, extended profiles can be edited, either from the admin interface, or by commenter via the "edit profile" link after they login. User Profile pages are published automatically as static pages, which boosts performance for high traffic sites.

Live Demo - Try User Profiles Pro Now

User Profiles Pro has been enabled on the MT Test Blog. Start from this entry and read the instructions. Sign in, edit your profile, upload a photo, view your published profile. Try it now!

Template Tags

Version 1.5 of User Profiles includes the following template tags:

  • <MTAuthorImageURL> - This displays the url to a thumbnail of the author's profile image. There is one optional argument:
    • size - the size in pixels of square thumbnail, default is 50 pixels (each side)
  • <IfMTAuthorImage> - This conditional tag displays its contents if the author has uploaded a profile image.
  • <MTAuthorImageURL> - This displays the url to a thumbnail of the commenter's profile image. There is one optional argument:
    • size - the size in pixels of square thumbnail, default is 50 pixels (each side)
  • <IfMTCommenterImage> - This conditional tag displays its contents if the commenter has a profile image. Note: if you posted a comment on your own blog (while signed in), your profile image will be displayed using this tag.

Example: In your "Entry Metadata" template module, your could add the following:

<MTIfAuthorImage><img src="<MTAuthorImageURL size="50">" align="left" /> </MTIfAuthorImage>

This would display the author's profile image, if they have one in their profile.

Similarly, in your "Comment Detail" module, you could add:

<MTIfCommenterImage><img src="<MTCommenterImageURL size="50">" align="left" /> </MTIfCommenterImage>

Both example above can be seen in action on the MT4 Test Blog.

User Profiles Pro Template Tags

User Profiles Pro includes the following additional tags:

  • <MTAuthorProfileURL> - This displays the url to the author's published profile page.
  • <MTCommenterProfileURL> - This displays the url to the commenter's published profile page.
  • <MTEntryAuthorLink> - This replaces the core tag of the same name. Instead of linking to the author's URL, it will link to the author's profile page.
  • <MTCommentAuthorLink> - This replaces the core tag of the same name. Instead of linking to the commenter's URL, it will link to the commenter's profile page. If the commenter was not authenticated, it will link to the URL provided.
  • <MTUserProfile> - This tag is used to display extended profile information. There is one required argument:
    • field - the name of the field that you wish to display. For built-in fields, valid values are birthdate, first_name, last_name, address, city, state, country, mobile_phone, land_phone, sex, marital_status, occupation, company, signature, about_me, activities, interests, music, tv_shows, movies, books, or quotes. For custom-defined fields, use the defined name of the field (more on custom fields below). Note that for the built-in "birthdate" field, you can also specify a "date_format" argument that follows MT's date formats.
  • <MTAuthorComments> - This container tag, which is used on the default "User Profile" template, displays the comments from the author in context. On the published User Profile page, this is used to display a list of recent comments by the user.

User Profiles Template Set

User Profiles comes with several default templates that are easy to install with the Template Installer plugin. The User Profile template set includes the following templates:

  • Javascript - This a replacement for the core "Javascript" index template. If you have customized your existing template, it will be backed up during the installation process. The new version includes some new features for User Profiles.
  • Edit User Profile - This template module is used to display the "edit profile" page that commenter's see when they click the "Edit Profile" link. Note that this template also displays the image upload and the "edit extended profile" pages. You can customize the user profile experience (and extended profile fields) bu editing this module. Note: you should not rename this template module.
  • User Profile (Pro only) - This template module is used to publish the User Profile pages. Customize this template to change the way user profiles are displayed. A special note about this template -- when you save it, it will automatically republish all user profile pages (no need to republish your site). Note: you should not rename this template module.
  • Members - This widget template displays thumbnails of member profile images.
  • YUI Javascript (Pro only) - This template module includes reference links to several Yahoo Javascript libraries. This template should be included in the Header template for all feedback templates (Entry archives). The auto-image-import AJAX function uses these libraries. Note: if you are already using the Ajax Comments plugin, then you already have this module, so you don't need to include it again.

Requirements

Installation

  1. Download the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation.
  2. You should now see an Upgrade Screen for User Profiles. For User Profiles Pro, the upgrade will add a new table for extended profiles and import profile images for existing users in your system
  3. Go to System Overview, then to Preferences > Plugins. Then choose User Profiles, then Settings. Entry the blog_id for profile images and templates, and the path for uploading profile images, then save.
  4. Return to the User Profiles settings and click the "Install Templates" button. The templates will be installed into the blog you chose in the previous step.
  5. In your "Header" template, add the following before the </head> tag:

    <MTIf name="include_javascript">
    <script type="text/javascript" src="<$MTLink template="javascript"$>"></script>
    </MTIf>

    And (Pro only) after the line that reads <MTIf name="entry_template">, add:

    <MTInclude module="YUI Javascript">

    Then save your "Header" template.

  6. Republish your Javascript template and Entry archives for the chosen blog

  7. Upload a profile image from your profile. (Tip: the quickest way to get to your profile is to click the "Hi Username!" link in the very top right of the page.) Click the link to add a profile image and follow the steps as shown above.

  8. Edit your extended profile by clicking "Extended Profile" from your profile page

  9. Edit your templates to display profile images, as described in the Template Tags section above.

Customizing Extended Profiles and Adding Custom Fields

User of User Profiles Pro may want to customized the display of the fields or add custom fields to the profiles. Click to read an in-depth article on how to customize Extended Profiles.

Get User Profiles Pro

Commercial License for 1 to 10 blogs - $97

">

Blog Network License for 10+ blogs - $249

">

Personal License for 1 to 4 blogs - $33

">

Get User Profiles

User Profiles v1.5 is free for both commercial and non-commercial use. Note that User Profiles does no include the "Pro" features mentioned above.

Download Now

,<$MTAjaxRatingVoteCount type="userprofilesdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="userprofilesdownloads"$>

As always, comments, questions, and suggestions are welcome.

Blog Janitor is a plugin for Movable Type that preforms various clean-up tasks. Blog Janitor can perform the following tasks:

  • Close comments on old entries.
  • Delete duplicate comments and trackbacks

Blog Janitor does his work automatically, you don't need to edit your templates. Just tell Blog Janitor the tasks you want him to perform (by adjusting the plugin settings), and he will go to work periodically (using the scheduled tasks feature of MT).

New in Version 1.1

  • Support for MT4. Blog Janitor now works with either MT3.3x or MT4+. No new features in this release.

Here are some details on Blog Janitor's current skills:

Close Comments and Trackbacks on Old Entries

One technique for reducing blog spam is to close comments (disable commenting) and trackbacks on entries that are older than a certain number of days. This can be a tedious process to do manually, if you remember to do it. Blog Janitor can take care of this job for you. Simply enable Close Comments in the plugin settings for a blog, and tell Blog Janitor the number of days he should wait before closing comments on an entry. That's all you have to do, Blog Janitor will routinely check for old entries and close comments on them for you.

Delete Duplicate Comments and Trackbacks

Duplicate comments and trackbacks can happen in a number of ways. For example, a commenter may hit the submit button twice, thinking that the comment did not get posted the first time. Another common occurence is duplicate junk comments and trackbacks -- since spammer often post identical spam messages, your Junk folders may be full of duplicates. Blog Janitor is skilled a scanning your recent comments and trackbacks for duplicates. If you give him the order (by enabling duplicate checking in plugin Settings), he look for recent duplicates and delete them. Just tell him how many recent items to scan, and he will go to work every hour looking for recent duplicates. (Note: there is no "undo" when Blog Janitor deletes items, but he does leave a message in the Activity Log notifying you of which items he has deleted).

Settings

The Settings is where you give Blog Janitor his orders. Go to the blog you want, then go to the Plugin settings for Blog Janitor. The settings look like this:

Requirements

  • MT 3.3x or MT4+

Instructions

  1. Download the zip file and expand it.
  2. Upload the contents of the 'plugins' directory in to the 'plugins' directory of you MT installation (usually /cgi-bin/mt/plugins/)
  3. Adjust the settings as described above

Notes:

  • If you have a large number if entries in your blog, Blog Janitor will not close comments on every old entry the first time he goes to work. He gets tired if he tries to close comments on too many entries at a time, and his union contract states that he doesn't have to close comments on more than 100 entries each hour. (Okay, the real reason is to save your MT from excess load that might slow things down) Since Blog Janitor works on up to 100 entries each hour, it may take some time before he gets 'caught up'. For example, if you have 2400 entries on your blog, it will take about 24 hours for Blog Janitor to go through all the old entries and close comments and trackbacks.
  • Blog Janitor punches his time clock when he starts and finishes a task. For each task, he posts a message to the Activity Log that explains what task was completed, and how many seconds it took him to complete. If you are concerned about system load, keep an eye on the Log to see how hard he is working.

Get Blog Janitor

Commercial Use: $97

">

If you buy a commercial license, you will get priority for future features, and an advanced version of Blog Janitor that enables you to give Blog Janitor orders on a system-wide basis (so you can adjust the settings in once place for all blogs on the system).

Blog Janitor is free for personal use:

Download Now

,<$MTAjaxRatingVoteCount type="blogjanitordownloads" id="1"$>,0);">Download Now (Blog Janitor for Personal Use)
Downloads: <$MTAjaxRatingVoteCount id="1" type="blogjanitordownloads"$>

As always, comments and suggestions are welcome - please reply to this entry.

memcached Stats is a plugin for Movable Type 4 (MT4) that provides a admin dashboard widget that displays stats for each of the memcached servers in your MT config.

memcached is an optional advanced feature with MT4. You can read more about memcached here, and about using MT with memcached here. In short, memcached is a caching system that caches data in memory. When configured for MT4, Movable Type will store numerous items in the cache to reduce the number of database queries and improve performance. To use memcached, your probably need a dedicated server with root access, as you have to compile and install several libraries. I installed it earlier today with help of this tutorial.

How it Works

The memcached Stats dashboard widget will display key statistics for each of your memcached servers. It looks like this:

As the example above shows, the widget will display a warning message when memcached is not returning stats for a particular server. This could mean that the memcached process or server has gone down, or that the server is unreachable.

Requirements

  • MT4+
  • Memcached (plus its dependancies)
  • Cache::Memcached perl module

Installation

  1. Download and extract the the contents of the zip file and uploads the contents of the 'plugins' folder to the 'plugins' directory of MT.
  2. Login to MT and go to your Dashboard. On the lower right side of the page you should see a "Select a Widget..." drop down box. Select "Memcached Stats" and click "Go". (Note that only system administrators have permissions to add this widget. Other users won't see this widget in the list)

Get Memcached Stats

Memcached Stats requires the purchase of a commercial license.

Commercial License - $97

">

Want More Stats?

The memached Stats widget displays only a handful of useful stats, as shown in the image above. There are more stats available, that could be added to the widget in future. A list can be found near the bottom of this page, in the "General-purpose statistics" section. If you see some useful stats that are missing from the widget, please let me know and I will add them.

As always, feedback and suggestions are appreciated.

Entry Post is a plugin for Movable Type that enables visitors to your site to submit entries using a form. Visitors do not need a user account and they do not need to login. Similar to posting a comment, they can simply fill in a form and submit.

New features in version 2.5

Entry Post 2.5 contains the following new features for use on MT4:

  • Complete support for all Authentication methods in MT4 (including MT Auth, OpenID, and TypeKey)
  • New "EntryPost Response" template makes it easier to customize the screen that users see after submitting an entry.
  • Enhanced preview template.
  • New email notification template enables to to customize the contents of the emails, including the ability to include extra field data
  • Better error handling (errors displayed via customizable template)
  • Advanced options for overriding the default "allow comments" and "allow trackbacks" settings.

I have been using external forms and scripts to submit MT entries for several years. Examples include Mars Rover Forum and Seinfeld Forum. These MT-powered forums enable forum members to post new topics (entries) using an external form. Based on this experience, I have converted the entry posting script into a plugin -- and added a bunch of additional features.

Basic Features

  • enable visitors to post entries to your blog
  • new entries can be set to "Published" or "Unpublished" (pending admin/moderator review)
  • supports all MT4 authentication methods (optional)
  • entries can be scanned against MT's Spam Filters
  • entries can be previewed before posting
  • email notifications of new entry submissions
  • entries can be added to a category (set a default or allow poster to choose)
  • entries can be tagged (default list of tags, or specified by the poster)
  • included default templates include spam-protected form

Advanced Features

  • enable posters to upload an image with the entry
  • other entry fields supported (Extended Entry, Excerpt, Keywords)
  • option to disable rebuilds when an entry is posted
  • option to disable entry creation (makes the form work as a 'contact me' form with email notification turned on.)
  • xml response option
  • support for extra fields defined by you
  • override "allow comments" and "allow trackbacks" settings.

Try Entry Post 2.5 Now

I have enabled Entry Post 2.5 on the MT Test Blog. Submit an entry by clicking here. Feel free to login (optional) and submit entries. (Note that you may need to clear your cookies before testing, as the test blog is on a different MT installation than MT Hacks).

  1. Basic Form (default form installed with Entry Post)
  2. Advanced Form (an example form to demonstrate advanced features)

By using the forms above, you will quickly get an idea of the visitor experience with Entry Post. In its simplest form, it is very similar to posting a comment.

The Administrator Experience

Entry Post has been designed to be easy to install and configure. Simply upload the files, change some file permissions, then configure the plugin via the Plugin Settings for each blog. Required templates are installed with a single click (which can then be customized, if desired).

The settings area for Entry Post looks like this:


By using the above settings, you can configure most of the features of Entry Post.

Template Tags

EntryPost 2.5 includes the following template tags that you can use to display information posted using the plugin:

  • <MTEntryPosterName> - The name of the poster, as submitted in the "Name" field. If the name field it blank, the plugin assumes that the entry was not submitted via Entry Post, and this tag will display the name of the author of the entry. This makes it very easy to update your templates, simply replace the <MTEntryAuthorDisplayName> tag with the <MTEntryPosterName> tag, and it will "just work", regardless whether the netry was posted by an author or posted by a visitor to your blog.
  • <MTEntryPosterEmail> - The email address of the poster, as submitted in the "Email" field. If the "Name" field is blank, this tag outputs the email address of the author. For privacy and anti-spam reasons, I don't recommend using this tag in your templates.
  • <MTEntryPosterURL> - The URL of the poster, as submitted in the "URL" field. If the "Name" field is blank, this tag outputs the URL of the author.
  • <MTEntryPosterIP> - The IP address of the poster. For privacy reasons, I don't recommend using this tag in your templates.
  • <MTEntryPosterImage> - The relative path of the image uploaded by the poster.
  • <MTEntryPosterLink> - Outputs the linked name of the poster. If the "Name" field is blank, it will display the author's linked name. Supports the same arguments as <MTEntryAuthorLink>.
  • <MTEntryPostField> - This tag can be used to to display the value of any extra fields submitted using Entry Post. A single field argument is required, which should inlcude the name of the field, without underscores. For example, <MTEntryPostField field="Favorite Color"> would display the value of the Favorite Color field.

Advanced Use - Adding Extra Fields

Entry Post makes it very easy to add extra fields. All you have to do is add the extra fields to the form. First, browse to Templates and then Template Modules and edit the 'EntryPost Form" module. Now add a field to the form in the following format:

<input type="text" name="entrypost_Favorite_Color" />

..and you are done! Note that the "name" argument above must begin with "entrypost_", followed by the name of the field. Use underscores ("_") instead of spaces, if the field name has more than one word. You can add multiple extra fields in this manner, and they will automatically be added to the entries posted, and displayed automatically on the admin Entry screen.

Requirements

Installation


  • Download the zip file and extract the contents.

  • Upload the "EntryPost" directory (and all its sub-directories and files) to your MT 'plugins' directory.

  • Change the file permissions to 755 (CHMOD 755) for the EntryPost/mt-entrypost.cgi file.

  • Login to MT and go to 'Preferences > Plugins' area of a blog and "Settings" link for EntryPost. You should now see the available settings for EntryPost, as shown above.

  • Enable the plugin by checking the Enable checkbox, choose other settings, and the save the settings.

  • Return to the EntryPost settings and install the templates by clicking the provided link. After the templates have been created, you can customize them, if desired, to suit your needs or match your site design. The primary template is an index template called "EntryPost Submit Page" - this page includes the form to post entries.

  • If you are using the default template installed above, you must also made a small edit to your "Header" template module. Go to Design>Templates then choose template Module from the menu on the right. Open the module called "Header". Before the </head> tag, add the following:

    <MTIf name="entrypost_submit">
    <script type="text/javascript" src="<$MTLink template="javascript"$>"></script>
    </MTIf>

  • You will probably now want to provide a link to the Submit Page from your main index. One way to do this is to use the provided "EntryPost Submit Link" widget (using WidgetManager). Alternatively, you can manually create a link such as <a href="<MTEntryPostSubmitPage>">Submit an Entry</a>.

Get Entry Post

Commercial License - $97

If you site or blog is for-profit, a commercial license is required. The license includes all future updates to Entry Post and priority feature requests.

Personal License - $33

For use on a personal site or blog, a personal license is required. The license includes all future updates to Entry Post.

Not on MT4? Version 2.0 supports MT 3.2 and MT3.3x.

If you would like to use Entry Post on a non-profit or charity site, please contact me.

As always, feedback, suggestions, and product questions are appreciated. Please reply to this entry.

Note: - While Entry Post includes built in support for poster fields and extra fields, it is not intended to be used as a general purpose "extra fields" plugin. Fields can only be added via the external Entry Post form. If you are interested in a general purpose fields plugin, there are several available, including CustomFields and RightFields.

Template Inheritance is a plugin for Movable Type that enables you to link templates together in a way that one template inherits its template code from another template. One example is when you have two or more blogs in your MT system, and you want to use the same design or template layout for each blog. Using the Template Inheritance plugin, you can effectively use one blog's templates as master templates that control the templates of the other blogs. So if you have 3 blogs on a company site with same look and feel, this can save you a lot of time manually updating the templates of each blog every time you make a change. Another way to think of it is sharing templates between several blogs. You can link all the templates in one blog to another, or selectively choose which templates should be inherited (including template modules).

New Features in Template Inheritance Pro 2.0

There two new features:

  • Support for MT4
  • A powerful "Inherit all Templates" feature that enables you to quickly link all of the template of blog, in a single step. This function even goes a step further -- if the "parent blog" has templates that don't exist in the "child blog", then those templates will be automatically created and then linked, so that they are inherited from the parent blog. In short, this will effectively copy all the template from Blog A to Blog B, and then link them so that when you make changes to templates in Blog A, the changes are made automatically in Blog B.

Background

I have wanted a plugin like this for years, the ability to share template code between multiple blogs. For a long time, MT has included a "Link this template to a file" feature in which you could link a template to an actual file on your server. I used to link multiple templates to the same file, effectively (and indirectly) sharing the template code between different blogs. While this works, it has its problems. At times in the past, there we MT bugs that prevented templates from being updated from the file - but I think those are fixed now. The other main problem is that you have to be very careful when editing a template, remembering that it may be shared with other blogs, etc. The Template Inheritance plugin is an improvement over the file linking method, addressing the key issues with file-based linking.

Features

For any specific template, you can assign another template on the system from which to inherit template code. For example you could decide that you want template "B" to inherits its template code from template "A".

It may be helpful to think of "A" as the parent template and "B" as the "child" template -- the child inherits its template code from its parent. When template becomes linked to parent template, the child's template code will immediately be replaced by the template code of the parent, and will be derive its template code from the parent from that point forward. You won't be able to edit the child template after the link is made (the template code is greyed-out and the field is disabled) -- instead, you will see a link to the parent template, and you can then edit the parent template.

Editing the parent template will automatically update all of its children templates. Of course, you need to rebuild the appropriate pages on each blog for template changes to be reflected on your blogs. You remove remove inheritance (break the link with the parent) at any time. When you remove inheritance from a child template, it becomes independent from that point forward, and you can now customize it independently of the parent template.

Or, you can use the "Inherit all Templates" function to link all of a blog's templates to those of another blog. This is major time saver when you have multiple blogs that you want to use the same layout and design. Simply create and customize the templates on a "master blog" then link the other blogs quickly.

Notes:

  • Only system administrators (sometimes called superusers) can create inheritance links.

  • You must enable the plugin for each blog before you can create inheritance links (blogs to have "child" templates need to be enabled, not those containing the "parent" templates)

  • A template cannot be both a child and a parent. If you try to assign inheritance from a template that is a child of another template, it will work -- but the plugin will make the link directly the ultimate parent. This makes it easier to manage, as you won't have to trace template linkages through several generations to find the "master" template.

  • When a parent template is deleted, each of its children immediately become independent (orphaned, if you will).

  • When first assigning inheritance to a template, the child template's code is replaced by that of the new parent. BE CAREFUL, there is no undo, the child's former template code will be gone. This is also true when using "Inherit All Templates". Just to be safe, it may be a good idea to back up the old template code beforehand, in case you decide to revert back.

Requirements

  • MT 3.3+

Note: the "Inherit all Templates" feature is currently available only on MT4. If you are interested in using this feature with MT3.3x, please let me know.

Great for Blog Networks

While Template Inheritance can be used in many different scenarios, it is a great fit for blog networks. Networks of blogs on the same MT system often have similar (or identical) design or template code. Sometimes only certain things are the same, such as a common header / footer, stylesheet, sidebar, advertising blocks, etc. Using this plugin to link up those common template elements, you can save a lot time managing the templates of the network. If you have a blog network and this sounds interesting, please contact me. I can help implement this for you, customize the plugin to meet your specific needs, etc.

Instructions

  1. Extract the contents of the zip file and upload the contents of the 'plugins' directory into the 'plugins' directory of your MT installation
  2. Login to MT (or hit Main Menu, if you are already logged in). You should now see and upgrade screen that will install a table for Template Inheritance.
  3. Browse to the blog you want, then go to the plugin settings to enable the plugin.
  4. Browse to the template you want, then click the "Click here to inherit code from another template" link.
  5. Enter the template ID of the desired parent in the prompt box, hit OK.
  6. The template is now linked to the parent. Rebuild to see the results on your site.
  7. (Pro Version only) Or use the "inherit all blogs" feature to link an entire blog.

Get Template Inheritance

Template Inheritance is free for personal use on up to 3 blogs.

Donations are appreciated:

Download Now

,<$MTAjaxRatingVoteCount type="templateinheritancedownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="templateinheritancedownloads"$>

Template Inheritance Pro is only available with a license:

Commercial License (4-10 blogs): $97

">

Blog Network License (10+ blogs): $249

">

As always, feedback and suggestions are appreciated. Please reply to this entry.

User Profiles is a plugin for Movable Type 4 that extends the user profiles in MT4. Version 1.0 adds the ability to user profile images (sometimes called avatars) from within the MT4 interface:

Profile images are just the first step for the User Profiles plugin. Look forward to more profile features in the near future.

How it Works

From admin MT4 interface, users can add a profile image by editing their profile. (System admins can perform this task for any user on the system):

Users will the be prompted to upload a profile image:

Square images are recommended, but if the uploaded photo is not a square, the plugin will automatically crop the image to make it a square.

After saving the profile image, the image will appear in the user profile:

Finally, the <MTAuthorImageURL> and <MTCommenterImageURL> tags can be used to display the user's profile image on your published blog pages.

Note: In version 1.0, authenticated commenters cannot upload their own profile images -- only users will access to the MT4 admin area can upload photos. In the next version, commenters will be able to upload profile images as well.

Profile images are stored as Assets within Movable Type. This means that these images can also be used in other ways, such as inserting them into entries. Movable Type will keep the full size image (cropped to square, if necessary) and create thumbnails when using the tags described below. Each profile image is tagged with 'profileimage'.

Template Tags

Version 1.0 of User Profiles includes 4 new template tags:

  • <MTAuthorImageURL> - This displays the url to a thumbnail of the author's profile image. There is one optional argument:
    • size - the size in pixels of square thumbnail, default is 50 pixels (each side)
  • <IfMTAuthorImage> - This conditional tag displays its contents if the author has uploaded a profile image.
  • <MTAuthorImageURL> - This displays the url to a thumbnail of the commenter's profile image. There is one optional argument:
    • size - the size in pixels of square thumbnail, default is 50 pixels (each side)
  • <IfMTCommenterImage> - This conditional tag displays its contents if the commenter has a profile image. Note: if you posted a comment on your own blog (while signed in), your profile image will be displayed using this tag.

Example: In your "Entry Metadata" template module, your could add the following:

<MTIfAuthorImage><img src="<MTAuthorImageURL size="50">" align="left" /> </MTIfAuthorImage>

This would display the author's profile image, if they have one in their profile.

Similarly, in your "Comment Detail" module, you could add:

<MTIfCommenterImage><img src="<MTCommenterImageURL size="50">" align="left" /> </MTIfCommenterImage>

Both example above can be seen in action on the MT4 Test Blog.

Installation

  1. Download the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation.
  2. Go to the blog you want, then to Preferences > Plugins. Then choose User Profiles, then Settings. Entry the path for uploading profile images, then save.
  3. Upload a profile image from your profile. (Tip: the quickest way to get to your profile is to click the "Hi Username!" link in the very top right of the page.) Click the link to add a profile image and follow the steps as shown above.
  4. Edit your templates to display profile images, as described in the Template Tags section above.

Get User Profiles

User Profiles v1.0 is free for both commercial and non-commercial use. (Note that future versions will have additional features and may not free for commercial use.)

Download Now

,<$MTAjaxRatingVoteCount type="userprofilesdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="userprofilesdownloads"$>

Upcoming Features

This is just the beginning for the User Profiles plugin. Potential future features include:

  • Enabling commenters to upload photos
  • Public user profile pages listing profile information, plus recent entries and comments.
  • Extended profiles (fields for birth date, hometown, etc.)
  • Importing photos from other services, if possible.
  • And more - please make feature suggestions in the comments of this entry

The Customized Email Templates plugin enables MT4 sites to customize email notification templates on per blog basis. Using the familiar MT4 template management screens, you can easily customize the emails that get sent out by the system. For example, you could change the order of comment fields, remove unwanted items, or add new pieces of information to suit your needs.

How it Works

When MT is ready to send an email, the plugin looks for template modules in that blog with the same names as the default system filename. The key names are:

  • new-comment.tmpl
  • new-ping.tmpl

If the module is not found, the system default will be used (same as without the plugin). If a match is found, the template module will be used instead of the system default.

Note that these template modules are special, because they are a hybrid of an "application template" and a "blog template". What this means is that you will see a lot of <mt:var tags, which are variables that are set by the system. In addition to these tags, you can also use normal <MTCommentXXX, <MTCommenter and <MTEntryXXX tags when customizing these templates.

Template Sets

As a separate download, I have created a template set to get you started: This template set includes template modules for both comment notifications (new-comment.tmpl) and trackback notifications (new-ping.tmpl). Remember, it is important not to rename these modules.

These templates are virtually identical to the system defaults, but I have included two enhancements to the new-comment.tmpl template:

  • If the comment was made by a authenticated commenter, the Auth type will be shown after their name. For example, it would show "Commenter name: Bob Sakamano (Vox)".
  • I have modified the "View comment" URL so that it includes the anchor #comment-<mt:CommentID>. These means that when you click the link, it will go directly to that comment on the page, rather than to the very top of the page. This is handy for sites that get a lot of comments, and you have scroll all the way down to view the new comment and/or reply.

Requirements

Installation

Download and extract the zip file. Upload the contents of the 'plugins' folder to the 'plugins' directory of your Movable Type installation.
For each blog that you want to customize, install template Modules to be used. Download the template sets and install them using Template Installer. (Advanced users can create these manually, but they must be named as described above.)

Get Customized Email Templates

Commercial License - $97.00

">

Personal License - Free

Customized Email Templates is free for personal, non-commercial use.

Download Now

,<$MTAjaxRatingVoteCount type="customemaildownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="customemaildownloads"$>

Template Set:
Download Now

As always, comments and suggestions are welcome.

Entry To Page Converter is a plugin for Movable Type 4 that enables you to convert Entries into Pages.

Pages are a new feature in MT4 that you can use to create pages that are not really 'entries'. In previous versions of Movable Type, many people used entries for such pages. Now that MT4 has "pages", you can use this plugin to easily convert those old entries into pages. By the way, you can also do the reverse, convert Pages into Entries.

How it Works

On the Entry listing screen, you can select the entries that you want to convert by checking the boxes. Then simply choose "Convert to Page(s)" from the "more actions..." dropdown menu and click "Go". The Entries will immediately be converted to Pages. During the conversion process, the entry is automatically removed from any categories it may have been in, since Pages don't use categories. After the conversion process, you will be redirected to a "Batch Edit" screen for your new pages. Using this screen, you can quickly add Pages to Folders and other minor edits, then hit save. It's that easy.

Requirements

  • MT4.0+

Installation

  1. Download and extract the zip file, then upload the contents of the 'plugins' directory into the 'plugins' directory of your Movable Type installation (often /cgi-bin/mt/plugins/).
  2. Login to MT and go to the entry listing for the blog you want.
  3. Select the entries that you want to convert by checking the checkboxes.
  4. Choose "Convert to Page(s)" more the "more actions..." dropdown box and click "Go"
  5. (Optional) Add the new pages to Folders and make other edits, then save.
  6. Rebuild your site.

Get Entry to Page Converter

Commercial License - $25

">

Visitor Stats is free for non-commercial use, to members of MT Hacks.

Download Now

,<$MTAjaxRatingVoteCount type="entrytopageconverterdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="entrytopageconverterdownloads"$>

Comments and Suggestions are welcome, please post a comment.

Visitor Stats is a plugin for Movable Type 4.0 that displays visitor and page view statistics for MT4 blogs. New! Visitor Stats Pro provides even more statistics and widgets (details below).

Visitor Stats looks like this:

New Features in Visitor Stats 1.5

  • Stats Counter widget now includes mini graph
  • Several bugs and warnings fixed.
  • Stats are now reported in the time zone for each blog
  • New template tag for displaying the number of times an entry has been viewed

Announcing Visitor Stats Pro

This is the first release of the "Pro" version of this plugin. Additonal features included with Visitor Stats Pro:

  • Blog Widget for displaying a ranked list of "Most Read Entries"
  • Entry Stats graph that displays entry pages views by date.
  • List of Recent Visitors and Views on the admin Dashboard (including IP address, username, referrer and keywords).
  • Dashboard widgets for displaying top search engine keywords and referrers.
  • Detailed Entry Stats screen with graph, top keywords used to find the entry, and a list with details of each page view for that entry.
  • Many new template tags for displaying stats on the published pages for your blog.
  • See details about Visitor Stats Pro below

Visitor Stats also provides a "stats counter" tag (and widget) that you can place on your site to display your stats. Note: you can visit the MT4 Test Blog to to see some of the Visitor Stats (and Pro) publishing widgets and tags in action.

Visitor and View Stats

Visitor Stats tracks two key statistics for your blog:

  • Visits - A visit represents a real person who visited your blog. Even if the person views 20 pages of your site, it only counts as one visit (per day).
  • Views - Also known as page views, a view represents the viewing of a single web page on your site. If the person views 20 pages, it counts as 20 views. If a person refreshes the same page several times, each time counts a view.

How it Works

Visitor Stats tracks visitor and view information and records that information directly into your Movable Type database. After placing a single template tag in your templates, Visitors Stats will begin recording stats automatically using a combination of JavaScript and PHP (note that you do not need to enable MT's dynamic publishing feature). Then, when you view the admin dashboard for your blog, you will "Visitors" and "Views" tabs on the Blog Stats widget, which will display a graph of your stats (see image above). On the System Overview dashboard, you will see aggregate graphs of your stats for all blogs on the system.

Visitor Stats - Template Tags

Visitor Stats provides 4 template tags:

  • <MTVisitorStatsTracker> - Place this tag before the </head> tag in every template where you want to track stats. Only place one of these per template.
  • <MTVisitorStatsCounter> - This tag will display the total number of visitors or views for your blog, just like a web stats counter. There is one optional argument:
    • type - the type of stats that you want to count, which either be "visit" or "view". The default is "view". Example: <MTVisitorStatsCounter type="visit">
  • New! - <MTEntryStats> - Used within an entry context, this displays the total number of views for that entry.
  • New! - <MTStatsImageURL> - The URL to the small stats image ( that looks like ).There is one optional argument:
    • type - the type of stats that you want to graph, which either be "visit" or "view". The default is "view". Example: <MTStatsImageURL type="visit">

Visitor Stats Pro Features

Visitor Stats Pro includes additional stats and provides ways to view visitor and view stats in more detail, helping you understand the traffic to your sites. Where are readers coming from? What search keywords are they using in search engines to find your site? What entries are they reading? Which entries get the most views? Visitor Stats Pro helps you answer these questions and more.

Display a List of the Most Popular Entries

Visitor Stats Pro includes a widget that you can use to display a ranked list of the "Most Read Entries" in your blog sidebar, showing readers which entries are the most popular. You can also create customized most readlists by category, tag, etc. Examples include "Most Read Entries in this Category", or a "related entries" section that lists that the most read entries with the same tags as the current entry. This is a powerful feature with many possibilities.

Detailed Stats for Each Entry

In the MT4 admin interface, Visitor Stats Pro displays detailed view stats for each entry. On the entry screen, an Entry Views graph can display the traffic history for that entry:

(The graph on the edit entry screen can be hidden with a single click, or disabled in the plugin settings, for those who don't want to the graph to appear on this screen)

The same graph also appears on the Detailed Stats screen for each entry (just click the "More Stats" link from the main entry screen), plus a list of top keywords for that entry, and a detailed list of the pages views for that entry:

As you can see from the image above, in addition to displaying the IP address for each Visitor (just to left of this image), Visitor Stats Pro will also identify visitors and views by registered users on your system. This includes both local MT authenticated users, as well as TypeKey, Vox, Livejournal, or other OpenID users. This provides valuable information about the traffic stats of your signed-in users. You can even filter the list of page views by dragging the sliders on the graph -- just choose a date range, then click the link that appears. The "From" column shows the URL that the visitor came from before arriving on your site.

More Dashboard Stats

Visitor Stats Pro provides even more stats on the MT4 admin dashboard. This includes a summary of recent visitors and views, along with detail about each. This is similar to the "Recent Entries" and "Recent Comments" displayed when you click the respective tab on the Blog Stats widget:

Top Keywords and Referrers Dashboard Widgets

Visitor Stats Pro includes two new widgets that you can optionally display on your admin dashboard. The "Top Keywords" widget will display a list of the top search engine keywords used to find your blog:

And the "Top Referrers" widget will display a list of the top referrer URLs for your visitors, so you can see where your traffic is coming from:

Many Visitor Stats Pro Template Tags

Visitor Stats Pro includes many new template tags that you can use to display your blog stats on your published pages, blog sidebar, etc. In addition to display lists of "most viewed entries" as described above, you can display lists of top keywords, top referrers, recent visitors, and recent page views. If fact there are so many new template tags, that I won't discuss them in detail here -- I will soon post a separate article that describes the tags with some example template code.

Requirements

Installation or Upgrade

  1. Download and extract the zip file, then upload the contents of the 'plugins' directory into the 'plugins' directory of your Movable Type installation (often /cgi-bin/mt/plugins/).
  2. (Pro Version Only) Upload the contents of the 'extlib' directory into the 'extlib' directory of your Movable Type installation (often /cgi-bin/mt/extlib/).
  3. Login to MT and you should be redirected to an "Upgrade" screen that will update your database automatically.
  4. For each blog that you want to track, go to Preferences > Plugins and then click on "Visitor Stats" and then click on "Settings". Now click the link labeled "Click here to install the Visitor Stats templates". Note: Even if you are upgrading from a previous version, you should re-install the templates.
  5. Now go to Design > Templates and insert the <MTVisitorStatsTracker> tag before the </head> tag for all templates that you want to track. Note that if you are using the new MT4 default templates, then you only have to do this in one place: click on "Template Modules" from the right side of the page and open the "Header" template module and insert the <MTVisitorStatsTracker> before the </head> tag and then save the module. Note: If you are upgrading from a previous version of Visitor Stats, you can skip this step.
  6. Now Publish (rebuild) all your files.
  7. (Optional) Add the <MTVisitorStatsCounter> tag to your templates or use Widget Manger to add the "Visitor Stats Counter" widget to your sidebar. Pro users can add the "Most Read Entries" widget and start using the many new templates tags.

Get Visitor Stats Pro

Commercial License - $97

">

Non Commercial Use License - $33

">

Get Visitor Stats

Visitor Stats (Basic Version) is free to members of MT Hacks.

Download Now

,<$MTAjaxRatingVoteCount type="visitorstatsdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="visitorstatsdownloads"$>

Potential Future Features

Visitor Stats Pro was a much larger effort than I anticipated. As such, there are still a number of interesting features that may be added in the future. Future features will be determining largely by the requests of Visitor Stats Pro license holders. Here are some of the potential features:

  • Stats on a per author basis. If you have a blog with multiple authors, see which authors are generating the most traffic.
  • Drill-down into statistics. View the traffic history for a single visitor or registered commenter, see how they navigate through your site and which pages they viewed.
  • Geographical stats. See what country, region and city your visitors are coming from.
  • Recommended entries based on common viewing stats. For example "people who read this entry also read these entries..."
  • PHP versions of template tags to support MT's dynamic publishing system.
  • And more...

As always, suggestions, comments, and questions are appreciated.

A Note on the Small Stats Graphs

The small stats graphs included with this version of Visitor Stats are called Sparklines and were inspired by the SparkStats plugin for Wordpress. The sparkline graphs used by the Visitor Stats plugin are powered by the sparkline web service provided by bitworking.org. The plugin stores a copy of the image on your blog, and updates the image a maximum of once per hour (note that that stats image only updates when the page is published, either manually or automatically when someone posts a comment, etc.). Credit goes to those sites discussed above for their cool work with Sparklines.

These Movable Type Podcasting Templates are designed to be used with the Podcasting Plugin, created by Byrne Reese. In fact, the templates were created by Bryne, and I have simply package them up so you can easily install them with the Template Installer plugin.

Included Templates

Both of the templates below are replacements for the default Atom and RSS templates. Note that these can be used on any blog, even if you are not podcasting. The templates will check each entry for a podcast item, and only add the necessary podcasting bits if it finds one.

  • Atom - Movable Type 4 Atom Feed index template with support for podcasts
  • RSS - Movable Type 4 RSS Feed index template with support for podcasts

Requirements

Installation

Install is easy, using the Template Installer plugin:

Download and expand the zip file.
Upload the 'podcasting_templates' folder to the /plugins/TemplateInstaller/template_sets/ directory of your MT4 install. (Make sure to upload both the folder and its contents).
Browse to the blog you want, then go to Design > Templates then click the "Install Templates" link on the lower right.
From the dropdown, choose the "Podcasting Templates" set and click "continue".

Note that your existing versions of these templates will be automatically backed up during the template installation process.

Get MT4 Podcasting Templates

Download Now:

,<$MTAjaxRatingVoteCount type="podcastingtemplatesdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="podcastingtemplatesdownloads"$>

A new feature in MT4 enables users to login via OpenID. This makes it easy to login to comment on MT4 blogs: simply enter your OpenID URL and you are good to go. But what if you don't have an OpenID. They are easy to get, but I thought it would be cool if you could use your own MT blog URL, and use your MT installation account to login to other MT sites to comment. That is exactly what the OpenID Server plugin enables you to do.

When I first set out to built an OpenID Server plugin for MT, I thought is was going to be a lot of work and steep learning curve. But then I discovered that such a plugin was previously created over 2 years ago for MT 3.2, created by Mark Paschal and Brad Choate of Six Apart. I merely moved things around a bit to suit MT4, made a few minor tweaks, and added a template tag to make it easy to setup. As such, 99% percent of the credit goes to Mark and Brad. I just thought it would be cool to login to other MT4 blogs using my MT install login account -- it kinda brings the whole OpenID thing full circle.

Screencast

Notice the URL in the address bar after I click the OpenID "Sign In" button:

Requirements

  • MT4
  • Net::OpenID::Server Perl Module (included)

Installation

  1. Extact the files from the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation
  2. Upload the contents of the 'extlib' directory to the 'extlib' directory.
  3. Change the permissions on the /plugins/openid-server/server.cgi file to 755 (CHMOD 755)
  4. In your author profile, set your Website URL to the URL you wish to use as your OpenID profile URL.
  5. In the <head> section of that page, add the HTML tag:
  6. <link rel="openid.server" href="<MTCGIPath>plugins/openid-server/server.cgi" />

    OR (easier)

    <$MTOpenIDHeader$>

  7. If your profile page is a static HTML page, replace "" with the full CGIPath to the copy of Movable Type where the plugin is installed.

  8. To sign in with OpenID, when presented with an OpenID signon form, enter the URL to your

  9. profile URL. If you are not logged in to Movable Type, you will be prompted to log in.

Download Now

The OpenID Server plugin is free software.

,<$MTAjaxRatingVoteCount type="openidserverdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="openidserverdownloads"$>

Note: I probably should submit this version to code.sixapart.com, but I am not sure hwo to do that. I have never used Trac, nor contributed to any open source software before. I am not sure what the best practices are here, etc. I am sure somebody will point me in the right direction here...

Comment Titles is a plugin for Movable Type that adds a "Title" field for comments. Commenters can (optionally) add a Title to their comment. Comment Titles can be viewed and edited from the admin interface.

Screenshot

Template Tags

Comment Titles provides one new template tag:

  • <MTCommentTitle> - This tag will display the the title for the comment in context. If the comment does not have a title, this tag will output nothing.

Requirements

  • MT 4.01+

Note: Due to a bug in MT 4.0 that I found while developing this plugin, Comment Titles will not work with 4.0. You need 4.01 (or newer).

Installation

  1. Download and extract the zip file. Upload the contents of the 'plugins' directory to the 'plugins' directory of your Movable Type installation.
  2. Add a "title" field to your comment form. If you are using the default MT4 templates, go to Design>Templates, then "Template Modules" from the right side of the page. Then choose the "Comment Form" template. You can place the field anywhere between the <form and </form> tags, but I recommend after the URL field. Below the "comment-form-url" div, add:

    <div id="comment-form-title">
    <label for="comment-title">Title</label>
    <input id="comment-title" name="title" size="30" value="<MTIf name="comment_preview_template"><$MTCommentTitle$></MTIf>" />
    </div>


  3. Next, display the Comment Title on your published page by adding the <MTCommentTitle> tag to your Entry (Individual Archive) template. If you are using the default MT4 templates, then go to Design>Templates, then "Template Modules" from the right side of the page. Then choose the "Comment Detail" template. You can decide where you want to display the title, but one option is to place it right before the comment body (before the comment-content div):

    <MTIfNonEmpty tag="MTCommentTitle"><div class="comment-content">
    <strong><$MTCommentTitle$></strong>
    </div></MTIfNonEmpty>

    Note that in the above example, I have used the MTIfNonEmpty tag. By doing so, the HTML for the title will only be displayed if a title exists for that comment. This avoids extra blank lines and other markup when comments don't have titles.


  4. Publish your entry pages and you are done.

Get Comment Titles

Commercial License - $97.00

">

Personal License - Free

Comment Titles is free for personal, non-commercial use.

Download Now

,<$MTAjaxRatingVoteCount type="commenttitlesdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="commenttitlesdownloads"$>

As always, comments and suggestions are welcome.

Ajax Comments is a plugin for Movable Type 4 that enables your commenters to post comments using Ajax, without the page refreshing.

Live Demo

The best way to describe Ajax Comments is to show you. Try it out right now on the MT Test Blog. Click here to post a comment on the test entry.

Template Sets

To make Ajax Rating easy to setup, 6 templates are included. The following templates are new ones:

Ajax Comments Javascript (index template) - Contains links to the Javascript needed to posta comment.
YUI Javascript (template module) - Contains references to YUI Javascript libraries hosted externally.

...and 4 templates that are replacements for MT4 default templates: (Note: if you already customized these templates, you may have to do some manual template customization here. The installer will back up your existiing versions of these template.)

  • Comments (template module)
  • Comment Form (template module)
  • Comment Preview (system template)
  • Comment Response (system template)

The above templates can be easily installed by clicking the "install templates" button in the plugin settings (requires the Template Installer plugin).

Spam Protect

Ajax Comments can also be used to reduce your spam load significantly with "Spam Protect". Spam Protect is enabled by default, but you can disable it in the plugin settings. Spam Protect tricks automated spambots by tricking them into posting comments to the wrong URL. I have used this technique for a few years, and it makes a big difference is spam volume as server load. The one drawback to using Spam Protect is that commenters must have Javascript enabled to successfully post comments -- the tiny percentage of people who have Javascript disbaled will be sent to the "fake" Spam Protect URL. To minimize the CPU load from spambots, I recommend setting the Spam Protect URL to a non-existant page, so the bots will get a 404 "page not found" error.

Requirements

Installation

  • Download and extract the zip file. Upload the contents of the 'plugins' folder to the 'plugins' directory of your Movable Type installation.
  • Go the the plugin settings (Preferences > Plugins, then click Ajax Comments then Settings). Install the templates by clicking the button.
  • (Optional) Return to the plugin settings and adjust the Spam Protect settings and save.
  • Edit your "Header" template module. Go to Design > Templates then choose "Template Modules" from the right side of the page. Open the "Header" template. Look for a line that says:
    <MTIf name="feedback_template">

    After that line, add the following two lines:

    <$MTInclude module="YUI Javascript"$>
    <script type="text/javascript" src="<$MTLink template="ajax_comments_javascript"$>"></script>

  • Ensure that you have the "Use Comment Confirmation Page" setting checked under Preferences > Blog Settings > Comments. This is checked by default in new MT4 blogs. It must be checked for Ajax Comments to work.

  • Rebuild your Entry Archives.

Get Ajax Comments

Commercial License - $97.00

">

Personal License - Free

Ajax Comments is free for personal, non-commercial use.

Download Now

,<$MTAjaxRatingVoteCount type="ajaxcommentsdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="ajaxcommentsdownloads"$>

As always, comments and suggestions are welcome.

Ajax Rating is a plugin for Movable Type that enables visitors to rate your entries or your blog.

Try it now by rating this blog:
<$MTAjaxStarRater type="blog" max_points="5" id="22"$>

The "Pro" version of Ajax Rating lets you rate comments, trackbacks, categories, authors, tags, and just about anything else. Added features include threshold viewing for comments based on rating, listing "hot" items, and comment reporting. More details on the Pro version below.

Ajax Rating is easy to setup and use. After downloading the plugin and installing the files, a few simple changes to your templates will enable you to adding Ajax Star Raters to your entries. For example, just add <MTAjaxStarRater type="entry"> to after the <MTEntryBody> tag and you are done - instant Ajax Star Ratings.

New in Version 1.11

Update 9/7/07 11:15 EDT: - Version 1.11 has been released, which fixes 2 bugs, one that affected new MT4 installs in which the tables didn't get added,. and the other affect the star rater under dynamic publishing. If you downloaded version 1.1 yesterday or earlier today, you should updgrade to v1.11 using the download link below.

Ajax Rating v1.11 adds full support for Movable Type 4 (including Ajax Rating Pro). Version 1.11 supports three major versions of MT: 3.2, 3.3x, and 4.0+. Apart from adding MT4 support, there are no new features in this version. Also note that the Templater Installer plugin is required when installing Ajax Rating on MT4.

Download Now

,<$MTAjaxRatingVoteCount type="ajaxratingdownloads" id="1"$>,0);">Download Now (Ajax Rating for Personal Use)
Downloads: <$MTAjaxRatingVoteCount id="1" type="ajaxratingdownloads"$>

Ajax Rating Pro

Ajax Rating Pro has a lot more features:

  • Thumbs up /down (or plus/minus) rating modes
  • Display listings of top rated items
  • Rate comments and other objects
  • Hide comments below a certain rating threshold
  • Enable visitors to choose their own threshold
  • Include a button for reporting spam or inappropriate comments
  • Display "hot lists" based on recent voting activity

Digg-like Functionality

The "hot lists" feature mentioned above is one of the most powerful features of Ajax Rating. It can be used to enable Digg-like functionality, in which your home page can be set to display only the items that are "popular now". Used this way, the ratings become a filter for the content you feature on the home page. If you have a site or blog network with new entries be added frequently, this feature is especially useful. In a typical blog-format home page, entries get pushed lower down the page every time a new one is posted, so even popular entries can get pushed off the home page quickly on a busy site. Ajax Ratings gives you an alternative to this, displaying the hottest entries first, as determined by visitor rankings. This is automatic, and you can define the "hot" time frame (1 day, 3 days, 2 weeks, etc.). Ajax Rating hot lists can really change the dynamics of a site, and may inspire ideas for new ratings-driven sites.

Comment Viewing Threshold

Sites like Slashdot, Scoop-powered sites, and Digg have a similar feature, which hides comments if they are below a certain rating or score threshold. Referred to as a comment viewing threshold or a "collaborative filtering tool", the idea is to display top-rated comments prominently, while hiding or collapsing lower rated comments. With the Ajax Rating plugin, it is possible to do this with Movable Type comments. The plugin is very flexible in how you want to set this, but a common approach might be to enable readers to vote each comment "up" or "down" (plus or minus, thumbs up, thumbs down, etc.). A vote up would equal +1 point and a vote down would equal -1 point. You then set a default viewing threshold. For example, you might choose -10 as the default, meaning that comments with a total score of less than -10 will appear collapsed (or partially or completely hidden, you choose). Collapsed comments can be displayed with a single click. You can also include a form that enables readers to set their own threshold level. Again, this is very customizable, you decide how you want things to work on your site. Take a look at this test entry, which demonstrates both a Star Rater (for the entry) and Plus/Minus comment threshold viewing (for the comments). Set your own threshold using the form at the bottom of the comments and see how the display changes. Similar to the hot list described, above comment viewing thresholds are another way to transform the display of your content based on user ratings.

Rate Anything

Another advanced feature is the ability to rate anything at all. In addition to rating MT objects like entries, comments, categories, authors, and blogs, you can also use Ajax Ratings to rate other things. For example, if you want to create a rater for a movie or book, you can do that. (Example: <$MTAjaxStarRater type="movie" id="23" max_points="5$> -- just remember what movie you assigned the ID 23 to....)

One Vote per IP Address

To prevent people from voting multiple times on the same item, only one vote is accepted per IP address per item.

Template Tags

Template tags for Ajax Rating are available for both static and dynamic (php) publishing.

The following template tags are available in Ajax Rating (free version):

  • <MTAjaxStarRater> - This tag will output a star rater like the one shown above. To rate entries, it must be used in an Entry context (ie. between <MTEntries> and </MTEntries> tags or in the Individual Archive Template. A good spot is just after the <MTEntryBody> tag. The following arguments are supported:
    • type - Recommend (but not required) when rating entries and required when rating a blog. (Example: <MTAjaxStarRater type="entry"> or <MTAjaxStarRater type="blog"). With Ajax Rating Pro, you can also specify the following types: comment, category, author, tag, trackback, or anything else (see "rate anything" above).
    • max_points - Not required for entries and comments, but required for other types. This argument specifies the number of stars that will be displayed. (Example: <MTAjaxStarRater type="blog" max_points="5"> will create a rater with 5 stars)
    • id - For advanced use, the id argument enables you specify a specific object ID number that you want to rate. If you use the tag in the correct context, you don't need to include the 'id' argument. But if you want to place a rater outside of the relevant context, or if you want to rate a non-MT object (see "rate anything" above), then you must specify the id of the object. Normally, you don't want to use this, so forget I mentioned it. ;)
  • <MTAjaxRatingTotalScore> - This will display the total score for the item being rated (adding up the values of all of the ratings made).
  • <MTAjaxRatingAverageScore> - This will display the average score for the item being rated.
  • <MTAjaxRatingVoteCount> - This will display the number of votes or ratings that have been submitted for this item.
  • <MTAjaxRatingEntryMax> - This will display the maximum number of points (stars) for rating entries, as specified in the plugin settings for that blog.

With Ajax Rating Pro, the following tags are also available (in addition to those described above):

  • <MTAjaxRatingList> - A general purpose container tag for displaying listings of "top rated" items in the MT database. The following arguments are available:
    • type - Required. Allowed values are: entry, comment, trackback, category, blog, author, tag. Tip: do not pluralize these types.
    • sort_by - Determines which metric is use to rank the results. Allowed value are: average, votes, total. The default is sorting by total score.
    • sort_order - The sort_order defaults to 'descend' (highest rating first), but you could also specify 'ascend' to show the worst rated items first.
    • blogs - To display a list of items from all blogs on the system, specify blogs="all". Otherwise, leave this out and the list will be restricted to the current blog.
    • show_n - Use this argument to specify the number of items you want to list (the default is 10). (Example: <MTAjaxRatingList type="entry" show_n="15">)
    • hot - Set 'hot' equal to 1 to generate a list of recently "hot" items (this is the powerful feature discussed above). When the 'hot' argument is set to 0 or omitted, the listing will be based on "all time" ratings data. Adding hot="1" will based the listing on recent voting activity only.
  • <MTAjaxRatingEntries> - Same as <MTAjaxRatingList type="entry">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxRatingComments> - Same as <MTAjaxRatingList type="comment">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxRatingPings> - Same as <MTAjaxRatingList type="trackback">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxRatingCategories> - Same as <MTAjaxRatingList type="category">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxRatingBlogs> - Same as <MTAjaxRatingList type="blog">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxRatingAuthors> - Same as <MTAjaxRatingList type="author">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxRatingTags> - Same as <MTAjaxRatingList type="tag">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxThumbRater> - Instead of a star rater, this tag will display a thumbs up/down (or plus/minus, etc.) rater. With this type of rater, there are images for voting an item "up" or "down". A vote "up" is equal to 1 point, a vote "down" is equal -1 point. The following arguments are available:
    • type - Recommend (but not required when used in an entry or comment context). (Example: <MTAjaxThumbRater type="comment">). The same types can be used as described for <MTAjaxStarRater> above.
    • id - Same (advanced) usage as described for <MTAjaxStarRater> above.
    • report_icon - This optional argument will display a third button, a "report" button, when used with comment raters. Visitors to your site can click this button to report the comment (for abuse, spam, profanity, etc.). When a comment is reported, an email is sent to the author of that entry, along with a link to edit the comment in question.
  • <MTAjaxRaterOnclickJS> - In addition to the convenient star and thumb raters, you can create your own rater. This tag makes it easier. To enable a rating button (or text link), you need to specify a javascript onclick event. This tag fills in the details. For example suppose you wanted to create a single voting text link for each entry - you could do so as follows: <a href="#" onclick="<$MTAjaxRaterOnclickJS type="entry" points="1"$>">I like it!</a>). Arguments include:
    • type - Recommended (but not required when used in an entry or comment context).
    • id - Same (advanced) usage as described for <MTAjaxStarRater> above.
  • <MTAjaxRatingCommentMax> - This will display the maximum number of points for rating comments, as specified in the plugin settings for that blog.
  • <MTAjaxRatingDefaultThreshold> - This will display the default threshold for viewing comments, as specified in the plugin settings for that blog.
  • <MTIfAjaxRatingBelowThreshold> - This is conditional tag whose contents will be displayed if the comment is below the default threshold, as specified in the settings. Note that this tag does not apply to user-specified thresholds (more on those later).
  • <MTAjaxRatingRefreshHot> - WARNING: You should not use this tag if you have a busy site with high-volume voting activity. This a special tag, it displays no ouput. It simply triggers the process of calculating the list of "hot" items. Note that "hot" list are not tabulated when the listing tags are rebuilt. For performance reasons, this process happens separately, usually via an MT scheduled task that runs automatically (approx) once every hour. If, for some reason, you want to manually refresh to the "hot" list, you can place the <MTAjaxRatingRefreshHot> tag into an index template and rebuild it (be sure to uncheck the "rebuild this template with indexes" box!). Again, this should be used carefully on busy sites, and usually not at all. The "hot" list can also be refreshed via an included cron script (more on this later).
Ajax Rating Settings

The settings for Ajax Ratings looks like this:

The blog settings for Ajax rating Pro looks like this:

Ajax Rating Pro also has a setting that is set only at the system level (Go to System Overview > Plugins). The system setting looks like this:

One of the notable settings is the "Rebuild After a Vote" option. High traffic site with high-volume voting should be careful with this setting. Generally speaking rebuilds can consume a lot of processor cycles, and a significant rebuilding after votes could slow things down, depending on several factors. The best performance option is "No Rebuilds" -- if you choose this option, the page will get update with the reader's vote immediately, but if this refresh the page, their vote won't be reflected (because the page has not yet been rebuilt). In this mode, ratings and votes counts get recorded into the database, but are not reflected on your pages until those pages are rebuilt (such as after a comment is posted to the entry, or manually rebuilt). If you have a site with high volume voting, chances are that you also have high-volume commenting -- if this is true, use the "No Rebuilds" option here and your entries will still be rebuilt every time a comment is posted. The second option here is "Rebuild Entry Only" -- this will only rebuild the Individual Archive template(s) for that entry (or if the vote is for a category, it will only rebuild the relevant category archive page) -- performance-wise, this option is not too bad. The third option is "Rebuild Entry, Archives, Indexes" -- this is the same level of rebuilding that happens when a comment is posted. It is the worst option performance-wise, as many pages may be rebuilt (the individual archive page(s), each of the category pages for the entries categories, any date-based archives enabled, and every index template in your blog. Be careful with this one on high-traffic blogs. The final option is "Build Indexes Only", which will only rebuild your index templates. This option might be suitable if you are only using the "Rate This Blog" widget (more on this later) on your main index. Note that if you are using PHP Dynamic publishing, there is no issue with rebuilds, you can set this to "No Rebuilds" and ratings will always be reflected correctly each time the page is loaded.

Requirements

(Note: If you are running 3.3x or 4.0, installation will be much easier, as the database tables will be automatically created for you. If you are running 3.2, you will need to create the tables manually - or via a utility like phpMyAdmin)

Installation Instructions

  1. Expand the zip file.
  2. Upload the contents of the 'plugins' directory to the 'plugins' directory of your MT install (usually /cgi-bin/mt/plugins)
  3. Upload the contents of the 'mt-static' directory to the static directory created when you installed MT (usually called 'mt-static')
  4. Change the permissions on the mt-vote.cgi and mt-report.cgi (Pro only) files found within /plugins/AjaxRating/ to 755 (CHMOD 755)
  5. Login to Movable Type (or if already logged, click "Main Menu")
  6. If your are running MT 3.3x or 4.0, you should now be redirected to an Upgrade screen that will install the tables for Ajax Rating. If you are running MT 3.2, then you need to create the tables manually, using the ajaxrating.sql file to create these tables.
  7. After the tables have been created, browse to the settings (Preferences>Plugins for MT4 or Settings->Plugins for older versions) for the blog you want. Choose the settings that you want and then save.
  8. Return to the settings and click the "Install Templates" link. This will install the javascript and styles index templates and rebuild them automatically. (Note: if you change you settings in future, remember to manually rebuild this index templates afterwards)
  9. For every template for which you plan to place raters, add the following between the <head> and </head> tags (if you are using the MT4 default templates, go to Template Modules and edit the "Header" template):
  10. <script type="text/javascript" src="<MTStaticWebPath>prototype.lite.js"></script>
    <script type="text/javascript" src="<MTStaticWebPath>moo.ajax.js"></script>
    <script type="text/javascript" src="<MTBlogURL>ajaxrating.js"></script>
    <link rel="stylesheet" href="<$MTBlogURL$>ajaxrating.css" type="text/css" />

  11. Now you can place raters to meet your needs. Most people may want to add something like the following below the <MTEntryBody> tag (if you are using the MT4 default templates, go to Template Modules and edit the "Entry Summary" and "Entry Detail" templates):
  12. <$MTAjaxStarRater type="entry"$>
    Rating: <strong><span id="ajaxrating_entry_<$MTEntryID$>_avg"><$MTAjaxRatingAverageScore type="entry"$></span></strong>/<$MTAjaxRatingEntryMax$> (<span id="ajaxrating_entry_<$MTEntryID$>_cnt"><$MTAjaxRatingVoteCount type="entry"$></span> votes cast)

  13. Add the included Ajax Rating widget to your sidebar. This will display a "Rate this Blog" section that will enable people to rate your blog. (Optional)

  14. Test it out and tell people they can start submitting votes!

For more advanced usage, see the articles linked at the bottom of this entry.

Get Ajax Rating

Ajax Rating is free for personal use, but you must include a link on your home page to https://mt-hacks.com/ajaxrating.html, such as:

Ratings on this site are powered by the <a href="https://mt-hacks.com/ajaxrating.html">Ajax Rating</a> plugin for Movable Type.

Download Now

,<$MTAjaxRatingVoteCount type="ajaxratingdownloads" id="1"$>,0);">Download Now (Ajax Rating for Personal Use)
Downloads: <$MTAjaxRatingVoteCount id="1" type="ajaxratingdownloads"$>

A lot of effort went into this plugin, donations are much appreciated. Suggested donation is $10:

If you wish to use Ajax Rating for commercial use, a commercial license must be purchased for $25:

Get Ajax Rating Pro

Ajax Rating Pro Regular License (1 to 10 blogs)

A regular license for Ajax Rating Pro enable you to use Ajax Rating Pro on up to 10 blogs on a single MT installation. The cost is $249:

">

Ajax Rating Pro Blog Network License (10+ blogs)

If you want to use Ajax Rating Pro on more than 10 blogs on a single MT installation, you can purchase a "Blog Network License". The blog network license is for unlimited blogs on the same install, and includes up to 2 hours of implementation consulting and a custom multi-blog installation script. The multi-blog installation script can be customized to meet your needs (subject to the 2 hours of consulting time) and includes setup of settings and installation of templates for each blog. The blog network license is $499.

">

Rater Images and CSS Styles

I did not design the default star graphic used with this plugin, and I did not craft the CSS styles that make it look and work so slick. Much credit for both of these elements goes to Ryan Masuga of Masuga Design. Ryan's Unobtrusive AJAX Star Rating Bar has been downloaded more than 85,000 times! Thank you Ryan.

The plus / minus images, on the other hand, I did design .... and it shows. Graphic design is not my forte. As mentioned above, you can swap out your own images for both types of raters (more on that soon). If anyone out there want to design some better button images, please do! Thumbs up and thumbs down images would be cool, and maybe a better plus/minus set as well. If you design some buttons you want to share, let me know I will post them here or include them with Ajax Rating (giving you credit of course).

Future Features

In the future Ajax Rating Pro will be enhanced even further. If you purchase a license for Ajax Rating Pro, you can help steer the development of new features. I see a lot of potential for this plugin with very active blog sites, and blog networks in particular -- and new features will likely be in this area. Here are a few ideas that may be worth adding if customers are interested:

  • more sophisticated "hot" list algorithms - making this more sophisticated and customizable, so you can fine tune everything to make sure that the popularity filter is promoting those items that help build community and create buzz
  • score summary for authors and commenters - look at which authors have the highest and lowesst rated entries (maybe offer prizes or compensation based on ratings), also look at summarized raters for each commenter, possibly triggering automatic or manual review when commenters have continually poor ratings (troll meter)
  • displaying rating and vote information on the MT admin screens
  • notification thresholds that will flag comments below thresholds, or even rules that automatically unpublish them pending review.

As always, comments, feedback, suggestions are welcome. Please reply to this entry.

The Customized Sign In Templates plugin enables MT4 sites to customize the commenter sign in and registration screens. MT4 include built-in support for commenter registration and login. By default, the screens where commenters login and register are system templates that bear the Movable Type logo -- they can't easily be customized to reflect the look and feel of your site. This plugin makes it easier to customize these screens.

Before and After Screensnaps

Live Demo

Try it out now on my MT4 Test Blog. Click here and then click the sign in link to post a comment.

How it Works

When someone clicks the "sign in" (or to sign up) link for a particular blog, the plugin looks for template modules in that blog with the following names:

  • Member Login
  • Member Signup
  • Member Signup Thanks

If the module is not found, the system default will be displayed (same as without the plugin). If a match is found, the template module will be used instead of the system default.

Note that these template modules are special, because they are a hybrid of an "application template" and a "blog template". What this means is that you will see some different template tags, some that begin with <mtapp:. Its best not to mess with those too much, unless you really know what you are doing.

Template Sets

As a separate download, I have created two template sets to get you started:

  • System Default Sign In Templates - these are identical to the ones that ship with MT, but installing this set (using the Template Installer plugin) will create Template Modules in your blog, so you can start customizing from there.
  • Blog Style Sign In Templates - This set has already been customized to use your blog's style, header, and footer.

Requirements

  • MT4

Installation

Download and extract the zip file. Upload the contents of the 'plugins' folder to the 'plugins' directory of your Movable Type installation.
For each blog that you want to customize, install template Modules to be used. Download the template sets and install them using Template Installer. (Advanced users can create these manually, but they must be named "Member Login", "Member Signup", and "Member Signup Thanks".)

Get Customized Sign In Templates

Commercial License - $97.00

">

Bonus: Those who purchase a commercial license will subsequently receive a version that enables customization of the password recovery screens. For technical reasons, this part was not as easy to accomplish, but I will create a solution and make it available to those who buy a license.

Personal License - Free

Customized Sign In Templates is free for personal, non-commercial use.

Download Now

,<$MTAjaxRatingVoteCount type="customsignindownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="customsignindownloads"$>

Template Sets (both are the same zip file):
Download Now

As always, comments and suggestions are welcome.

I have created Google Sitemaps template for Movable Type 4 (MT4). This index template can help your site get fully indexed by Google and other search engines. The sitemap template will include the following pages:

  • All entry pages
  • All monthly pages
  • All category pages
  • All category-monthly pages (new in MT4)
  • All author pages (new in MT4)
  • All author-monthly pages (new in MT4)
  • All tag pages

Note: Due to an apparent bug in MT4, I wasn't able to get a listing of "Pages" (new in MT4) to work. I will update the template when that bug gets fixed.

You can install the template using the Template Installer plugin. Note that this template is set to NOT publish automatically when index templates get rebuilt. For performance reasons, you should leave that option unchecked. This means that from time to time you should open the template and choose "Save & Publish".

Download Now:

,<$MTAjaxRatingVoteCount type="googlesitemapdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="googlesitemapdownloads"$>

Designed to be used with the Template Installer plugin, Template Exporter is a plugin for Movable Type that enables you to easily export your blog templates in a way that can be shared, distribute, or even sold to to others.

Screencasts

The easist way to describe how Template Exporter works is to show you. The first video below shows how you can export all of a blog templates:

And the the following video shows how you can export only selected templates:


Potential Uses of Template Exporter

This plugin can be put to use in several ways:

  • To create a "backup" of their templates, which can be re-installed later if desired.
  • To copy a set of template from one blog (or installation) to another (some call this "template portability").
  • To share your templates with friends, or post them for download on your blog.
  • To package and sell your customized template designs.
  • To deploy a common template design to multiple blogs in an MT installation.
  • To distribute blog Widgets.
  • To distribute blog templates with MT plugins, providing easy installation.

How it Works (if you care)

Template Exporter provides two main functions:

  • It extracts your templates and saves them in files named according to the template_identifier or template_name, such as main_index.mtml. Each template gets stored in its own file. (Technical note: if a template has an "identifier" field defined in the database, then it will be used for the file name. If not, a "dirified" version of the template name will be used, so "Main Index" will become "main_index".)
  • It automagically creates a YAML file named config.yaml, which defined the configuration information for template set. This includes things like the type and name of the template, and for index templates, the output file and "rebuild with indexes" setting. For example of a Template Exporter config.yaml file, click here.

These files are then saved in their own directory inside a "template_exporter" subdirectory of your blog. You can then use FTP or other means to download the directory and files from there, and subsequent shares the exported template or use with Template Installer to install them on another blog or installation.

Requirements

  • MT4+

Installation

  1. Download and extract the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation.
  2. Go the blog you want, then Design > Templates then choose the "Export Templates" link from the lower right. (Or, to export only selected templates, check the boxes of the templates you want, then choose "Export Template(s)" from the "more actions" drop-down box, then click "Go".)
  3. Give the template set a name, using only letters, numbers, and spaces, and then click Continue.

Get Template Exporter

Commercial License - $97

">

Personal License - Free

Template Exporter is free to MT Hacks members for non-commercial use:

Download Now:

,<$MTAjaxRatingVoteCount type="templateexportererdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="templateexportererdownloads"$>

Developer/Designer License - Free

Template Exporter is free for commercial use by MT developers and template designers for use on their own MT installations for the purposes of exporting templates for public sale or for distribution with plugins. Developers and Designers can contact me for a copy.

Comments and suggestions are welcome.

Template Installer is a plugin for Movable Type that makes it easy to install new template sets for your blogs. Combined with Template Exporter plugin, this makes is very easy:

  • For bloggers to share templates / widgets with others
  • For designers to package, sell, and distribute template sets.
  • For companies to deploy template sets to company blogs

Currently, sharing templates requires a lot of cutting and pasting, a very time consuming process. Using Template Installer it takes only a few clicks to install a partial or complete template set in your blog.

Screencast

The following screencast shows how easy it is to install new templates using Template Installer. In this example, the user chooses to install the "Default Templates", which is handy when you want to revert back to the defaults. The same process would be used to install a completly new set of templates. Click on the video below to watch:

As you can see, it is very quick and easy. As you can see from the last screen, Template Installer will back up your existing templates if they have been customized from the MT defaults.

The missing step from the above example is to upload the desired template set to the /plugins/TemplateInstaller/template_sets directory. No need to edit any files or settings. Once you have uploaded the set, it will appear as an option when you click "Install Templates" from the right side of the Manage Templates screen.

Requirements

  • MT4+
  • Template Refresh plugin (included with MT4)

Installation

  1. Download and extract the zip file, and upload the contents of 'plugins' folder to the 'plugins' directory of your Movable Type installation.
  2. Go to Design > Templates and then choose the "Install Templates" link from the lower right of the page.
  3. Choose a template set from the drop-down box, then click continue.
  4. View the results, then click "return to templates", and you are done.

Included Template Sets

The current version of Template Installer includes 3 template sets:

  • Default Templates - These are the default templates that come with MT4. While you can also use the Template Refresh plugin to re-install these, Template Installer provides easy access to do so. This set is also a good example set to see how it works.
  • Default Templates with Prefix Notation - A version of the default templates that use the new prefix notation. For example, <MTEntries> becomes <mt:Entries>, and so on. This template set will have the same output in your published blog as the default set, only the notation used is different. Note that the tags in this are not complete lowercases (it used mt:EntryTitle and not mt:entrytitle) Thank you to Marleen Zachte for creating this set and giving permission for its inclusion with this plugin!
  • Page Template Only - This set will install the MT4 default "Page" template, as well as the included "Page Detail" module. This set will be useful for those upgrading from previous version of MT, since the Page template is not automatically installed on existing blogs, during the MT4 upgrade.
  • 2 Column Layout Header - This set provides a replacement to the "Header" template module. The default MT4 templates use a 3-column layout. If you want to eaily change your blog to a 2-column layout, just install this template set.
  • Template Installer Widget - The set includes a widget template that you can use with the MT Widget Manager to show your support and spread the word about Template Installer. It is also a good example of how Template Installer can be used to distribute and install blog widgets.

Want more template sets?

Template Installer is new, so there are currently not many template sets available. If you have template sets that you would like to share, I will post a link to them here. Please contact me using the contact link in the menu above. You should also check and post your template sets to the following page on the MT wiki: Template Sets for MT4.

Get Template Installer

Template Installer is free to MT Hacks members for commercial or non-commercial use:

Download Now:

,<$MTAjaxRatingVoteCount type="templateinstallerdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="templateinstallerdownloads"$>

A Feature for Plugin Developers

For certain plugins, it makes sense to distribute custom template or widgets along with the plugin code. In the past, I included a special template installer routine to help users install such templates. In future, I will be use Template Installer for this purpose, and you can too. Rather than ask users to upload your template set to the Template Installer directory and ask them to install the set, I have include a "side door" feature that can be used instead. Using this approach, the templates are stored in a sub-directory of your plugin. Then you can simply present a link to your users to install the templates. The link would look something like this:

<a href="javascript:void(0)" onclick="return openDialog(false, 'install_blog_templates', 'template_path=$your_template_path&set=$your_set_name&blog_id=$blog_id &magic_token=$magic_token&return_args=$your_return_args')">Install Templates</a>

Of course, you will likely use template tags to form this url, but the key things are to make it open a dialog, to set the "template_path" parameter to the path to your template files (relative to the mt root directory), the "set" parameter to name of your set, and you can also set the "return_args" to return the user to your plugin screen after the templates have been installed. When users click this link, they will bypass the "choose a template set" screen and your templates will be installed immediately.

How do I Export Templates for use with Template Installer?

While you could do it manually, and it wouldn't be too hard, you probably want to use the sister plugin, Template Exporter, which automates the process in a single click.

As always, thoughts and suggestions appreciated.

Visitor Stats is a plugin for Movable Type 4.0 that displays visitor and page view statistics on your MT Dashboard.

It looks like this:

Visitor Stats also provides a "stats counter" tag (and widget) that you can place on your site to display your stats.

Visitor and View Stats

Visitor Stats tracks two key statistics for your blog:

  • Visits - A visit represents a real person who visited your blog. Even if the person views 20 pages of your site, it only counts as one visit (per day).
  • Views - Also known as page views, a view represents the viewing of a single web page on your site. If the person views 20 pages, it counts as 20 views. If a person refreshes the same page several times, each time counts a view.

How it Works

Visitor Stats tracks visitor and view information and records that information directly into your Movable Type database. After placing a single template tag in your templates, Visitors Stats will begin recording stats automatically using a combination of JavaScript and PHP (note that you do not need to enable MT's dynamic publishing feature). Then, when you view the admin dashboard for your blog, you will "Visitors" and "Views" tabs on the Blog Stats widget, which will display a graph of your stats (see image above). On the System Overview dashboard, you will see aggregate graphs of your stats for all blogs on the system.

Template Tags

Visitor Stats provides 2 template tags:

  • <MTVisitorStatsTracker> - Place this tag before the </head> tag in every template where you want to track stats. Only place one of these per template.
  • <MTVisitorStatsCounter> - This tag will display the total number of visitors or views for your blog, just like a web stats counter. There is one optional argument:
    • type - the type of stats that you want to count, which either be "visit" or "view". The default is "view". Example: <MTVisitorStatsCounter type="visit">

Requirements

Installation

  1. Download and extract the zip file, then upload the contents of the 'plugins' directory into the 'plugins' directory of your Movable Type installation (often /cgi-bin/mt/plugins/).
  2. Login to MT and you should be redirected to an "Upgrade" screen that will update your database automatically.
  3. For each blog that you want to track, go to Preferences > Plugins and then click on "Visitor Stats" and then click on "Settings". Now click the link labeled "Click here to install the Visitor Stats templates".
  4. Now go to Design > Templates and insert the <MTVisitorStatsTracker> tag before the </head> tag for all templates that you want to track. Note that if you are using the new MT4 default templates, then you only have to do this in one place: click on "Template Modules" from the right side of the page and open the "Header" template module and insert the <MTVisitorStatsTracker> before the </head> tag and then save the module.
  5. Now Publish (rebuild) all your files.
  6. (Optional) Add the <MTVisitorStatsCounter> tag to your templates or use Widget Manger to add the "Visitor Stats" widget to your sidebar.

Get Visitor Stats

Visitor Stats is free to members of MT Hacks.

Download Now

,<$MTAjaxRatingVoteCount type="visitorstatsdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="visitorstatsdownloads"$>

Want More Features? Visitor Stats Pro is Coming Soon!

Visitor Stats Pro will be a premium version of the plugin with more stats and many cool features. While it will include some of the typical web stats metrics, the focus of Visitor Stats Pro will be on providing meaningful stats about Movable Type items such as entries and authors.

Here are some of the potential features:

  • Visitor and View stats on a per entry basis, so you can see how popular your entries are.
  • Stats on a per author basis. If you have a blog with multiple authors, see which authors are generating the most traffic.
  • Template tags and widget to display a list of "Most Read" entries.
  • Drill-down into statistics. See a list of recent visitors. See which visitors are registered commenters. View the traffic history for a single visitor or registered commenter, see how they navigate through your site and which pages they viewed.
  • View referrer information to see where visitors are coming from (the page they were on prior to arriving on your site).
  • Search engines and keywords.
  • And more...

Do you have some ideas for features? If so, please reply to this entry and submit those ideas. Suggestions are appreciated.

When Visitor Stats Pro is released, I will send out an email to MT Hacks members. So if you haven't already done so, register now.

Fast Search is a PHP plugin for Movable Type. This means that Fast Search uses Movable Type's dynamic PHP-based publishing system to display search results. However, you can continue to use static publishing for all of your indexes and archives. Fast Search is fast in part because it uses mySQL fulltext indexing -- basically this means that a search index will be created for the entries in your database, making searches much faster. Like the built-in search, Fast Search logs searches to the Movable Type Activity log.

New Features in Version 2.1

Fast Search v2.1 provides support for Movable Type 4.0 (MT4). Note that version 2.1 will not work with versions prior to MT4 -- if you are not yet running MT4, then you can download version 2.07 below, which works with MT 3.2 and MT 3.3x. Fast Search 2.1 contains no new features, it provides the same features for MT4.

Tag Searches with Fast Search

Fast Search supports tag search. A tag search will display a list of all entries with a specific tag. Of course, tag searches have the same pagination features as regular searches, enabling you to browse multiple pages of tag search results. Tag search results are always sorted with the most recent entries listed first. Tag searches can done on a single blog (default), or across multiple blogs.

Tag Search Links. If you are using tags, you are probably displaying a list of tags with each entry. Each of those tags are linked to a search results page that displays all the entries with that tag. Since those links point to the built-in mt-search.cgi script -- Fast Search includes a new version of the <MTTagSearchLink> tag that points to the Fast Search script. This happens automatically, you don't have to edit your templates -- just enable Fast Search, install the Fast Search template, then rebuild your pages -- the tag links will be automatically updated.

Clean Tag Search URLs

You can use nice looking tag search URLs such as:

https://mt-hacks.com/tag/spam
https://mt-hacks.com/tag/comments

This feature requires editing your .htaccess file and a minor edit to the Dynamic Bootstrapping template. This feature is only available to those who purchase a license or for personal users for $33. More info on getting clean tag URLs below.

Better Relevancy

By tweaking the fulltext queries, I have managed to improve the relevancy ranking significantly. To test this out, you should do a few searches (in fulltext mode) before you upgrade to Fast Search 2.0/2.1 -- note the results and their relevancy -- then upgrade and do the same searches. You should see much more relevant results at the top of the search results. Please post your feedback on this by replying to this entry.

Search all Blogs Easier

In the previous versions of Fast Search, it was possible to search across all blogs on a system, but you had to specify each of them separated by commas. This is fine if you have a few blogs, but what if you have 50? 100? 500? Version 2.0 makes this easier by allowing the special "all" keyword to indicate that you want to search all blogs (example <MTSearchResults blogs="all"> or in the URL/form: ?query=books&blogs=all). A time-saver for large MT installations and blog networks.

Include PHP in your Search Results Template

This not a new feature, but it deserves highlighting. Many sites use PHP on most of their pages for various reasons (for example, to include content such as headers/footer and advertising blocks). The problem is that you can't use PHP on the "built-in" search results pages, because they are dislayed by a (Perl) CGI script. This can make it challenging to maintain your site in a consistent manner. You can avoid such problem with Fast Search -- since it is powered by PHP, you can include blocks of PHP code in the search results template. (Note: there is a small requirement that you need to use <?php to start each block, using simply <? won't work.)

What Search Method is Best?

For most cases, "Fulltext" will be the fastest search method. This is the same method used in version 1.0. There are some cases in which you might two options:

  • Non-Fulltext. Technically speaking this method used a LIKE %query% syntax. If you don't know what that means, don't worry about, just read on.
  • Fallback. The Fallback method is a combination method. FastSearch will first try a fulltext search, and if that returns no results, then it will try a Non-Fulltext search.

Non-Fulltext and Fallback are capable of some types of searches that you can't do with mySQL. You might want to use Non-Fulltext or Fallback to:

  1. search multi-byte languages such as Arabic and Japanese.
  2. search words shorter than 3 characters (such as "MTV")
  3. search partial words
  4. search a mySQL database that does not support Fulltext searching

Template Tags

Version 2.0 / 2.1 of FastSearch is designed to easily replace the existing search functionality in Movable Type, but with added features. For example, if you are currently using customized search templates, you can use them with Fast Search, with very few changes in most cases. Many Fast Search template tags have the same names as their CGI counterparts:

  • <MTSearchString> - The search string (query) being searched.
  • <MTSearchResults> - A container tag that displays search results. Arguments include (all are optional):
    • lastn - restricts the search to n results. (example <MTSearchResults lastn="10"> ) The lastn argument, like all arguments for MTSearchResults, can also be specified in the URL (...&lastn=10) or POSTed from a search form)
    • offset - used in coordination with lastn, starts M entries from the start of the list. (example <MTSearchResults lastn="10" offset="10"> will display results 11-20)
    • order - must be either 'date' or 'relevance', the default is 'relevance'. (example $lt;MTSearchResults order="date"> will provide similar results as the CGI search)
    • category - must be a valid category ID for the current blog - restricts the search results to entries from this category.
    • google_highlight - if specified, search words will be highlighted. (example <MTSearchResults google_highlight="1"> )
    • query - the search string (text) to be searched. In normal use, you would NOT include this argument as part of the <MTSearchResults> tag, rather, it would be specified as a URL paramter (example ...query=search+phrase) or POSTed from a search form.
    • new - tag - the tag to be searched. In normal use, you would NOT include this argument as part of the <MTSearchResults> tag, rather, it would be include as a URL parameter (example ...tag=books) as part of a Tag Search Link.
    • blogs - a comma-separated list of blog_ids if you want to search more than one blog. This argument is optional, if excluded, only the current blog will be searched. Example usage: <MTSearchResults blogs="1,3,8">new - Set blogs equal to "all" to search every blog on the sytem.
  • <MTBlogResultHeader> - this is container tag that displays content before the search results.
  • <MTBlogResultFooter> - this is container tag that displays content below the search results.
  • <MTNoSearchResults> - A container tag that displays its content only if zero results are found. Note that this tag must be used after a <MTSearchResults> container.
  • <MTNoSearch> - A container conditional tag that displays its content only if no search phrase was specified. new - Now supports the use of <MTElse> inside this container.
  • <MTSearchCount> - The number of search results displayed on the current search results page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter> container.
  • <MTSearchFirst> - The number of the first search result on the current page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchLast> - The number of the last search result on the current page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchIfNextPage> - A conditional tag that displays its content if there is a subsequent page of search results. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchNextPageLink> - Output a URL to the next page of search results. This tag should be used within <MTSearchIfNextPage> tags.
  • new - <MTSearchIfPreviousPage> - A conditional tag that displays its content if there is a previous page of search results. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • new - <MTSearchPreviousPageLink> - Output a URL to the previous page of search results. This tag should be used within <MTSearchIfNextPage> tags.
  • <MTSearchTotalResults> - The total number of matching results in the database.
  • <MTSearchPages> - A container tag that can display links to multiple pages of search results. Optional arguments include:
    • max - the maximum number of page links to display on each page. Example: <MTSearchPages max="20">
    • glue - a text string that seperates each page. For example, if you wanted to display 1 - 2 - 3 - 4, you could use <MTSearchPages glue=" - ">
  • <MTSearchPageNumber> - Displays the page number of each search results page. This must be used within a <MTSearchPages> container.
  • <MTSearchPageLink> - Displays the URL to each search results page. This must be used within a <MTSearchPages> container.
  • <MTSearchIfCurrentPage> - A conditional tag that only displays its contents if the page number is the same as the current page - you would normally use this is you wanted to highlight the current page in the list of page numbers, etc. This must be used within a <MTSearchPages> container.
  • new - <MTIfStraightSearch> - A conditional tag that only displays its contents if the search is a normal search and not a tag search.
  • new - <MTIfTagSearch> - A conditional tag that only displays its contents if the search is a tag search and not a normal search.
  • new - <MTFastSearchScript> - This tag displays the filename of your Fast Search script. You can use this in your search forms as shown below. Note: for this tag to work, you should not rename your Fast Search template -- it should laways be named "Fast Search". This tag works in both static and dynamic templates.
  • replacement - <MTTagSearchLink> - This tag overrides the built-in tag of the same name (this automatic, not need to edit templates or anything). The new version of the tag is "smart" -- if Fast Search is enabled for a blog, it will link to the tag search results using the Fast Search script -- if not, it will use the built-in search script. This tag has the following optional argument:
    • tag_dir - Use this argument to specify a "directory" name for your tag search URLs. Note: This feature is only available to personal users who make a donation OR those who buy a commercial license.

Note: the new default Fast Search template includes pre-formatted template code that displays Google-style search results page links.

As you may have noticed, some of the tags above are identical to the ones used for the existing CGI-based search results. This is by design, so you will easily be able to cut-and-paste your existing search template code into the Fast Search template, though some minor modifications may be required.

Working Examples:

Here are some working examples you can try. Feel free to try additional search queries and note the speed that searches are performed.

  • Tag search results on MT Hacks. Example tags: spam cms.
  • Mars Rover Blog has over 5,000 entries. Example search: "water on mars". Note that this example shows the default FastSearch template, which is very similar to the default search results template in MT 3.2.
  • Seinfeld Blog has over 8,000 entries, 180 of which consist of the episode descriptions and scripts of all 180 episodes. Fast Search powers the Seinfeld Script Search, which is restricted to a single category containing the episodes. Example search: 'bubble boy'

Requirements:

  • Movable Type 3.2 or 3.3 (Fast Search v2.07)
  • Movable Type 4.0 (Fast Search v2.1)
  • mySQL

Instructions

  1. Download the plugin and expand the zip file.
  2. Upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation (usually something like /cgi-bin/mt/plugins).
  3. Version 2.07 for MT3.2 and 3.3 only: Upload the contents of the 'php' folder to the 'php' directory (usually something like /cgi-bin/mt/php)
  4. Login to the MT admin interface. If you already logged in, choose 'Main Menu'
  5. If your are running MT 3.3 or 4.0, you should be redirected to an 'Upgrade' screen at this point. The Fast Search upgrade process will update your database to add a fulltext index to the table in your database where entries are stored. Note that this may take some time if you have many entries, and this will add to the overall size of your database. Note: If you are installing FastSearch for the first time and you don not see an upgrade sceen, then you should follow Step 6: go the the plugin settings and click the link to create the Fast Search index.
  6. If you are running MT 3.2, you will not see the upgrade screen (as it is a 3.3 feature), so you need to create the index by browsing to the 'Plugin Settings' of a blog where you want to use Fast Search. Choose the 'Plugins' then find 'Fast Search' and choose 'Settings'. Now click the link in bold that says "Click here to create or rebuild the FastSearch fulltext index". Again, this may take some time, please be patient. After the index has been created, hit the Back button.
  7. Now browse to the 'Publishing' settings for the blog, and scroll down to the Setting called "Dynamic Publishing". If the first option, "Build all templates statically", is selected, you should change this setting to "Set each template's Build Options separately" and click "Save Changes" at the bottom of the screen. Otherwise, you don't need to make any changes here.(Note that change this setting will create an .htaccess file in the root path of the blog. Normally you won't notice this and everything will work fine, but if you have an existing.htacces file, you may want to take a look at it to make sure everything looks okay)
  8. If you just changed your Dynamic Publishing settings in the previous step, you should now rebuild all files for this blog by choosing "Rebuild Site" from the left menu, then "Rebuild all Files". Version 2.07 for MT3.2 and 3.3 only: You should also ensure that you have a "Dynamic Site Bootstrapper" (mtview.php) index template and make sure that it gets built, if it hasn't been built previously.
  9. Now return to the Fast Search settings and check the box to enable Fast Search. You may also want to adjust the settings for Maximum Search Results and logging, then click "Save Changes".
  10. Open the Fast Search settings once again and choose "Click here to install the default Fast Search Template." The template will be created and then displayed. This is an dynamic Index template (which can be customized) used to display the search results. (If desired you can also skip this step and create the index template manually, use the template tags as desired, or by cutting and pasting your exisiting search template code)
  11. Upgrading Fast Search

    Follow steps 1 to 3 above, then adjust your Fast Search plugin settings and search template, if desired. If you using Tag Search, you probably want to update your Fast Search template. One way to do this is to rename or delete your existing template, then reinstall the new default template from the plugin settings area.

    After Upgrading to MT4

    After upgrading to MT4 and installing Fast Search 2.1, there is one more thing you may need to do. In MT4, the 'php' folder resides inside /plugins/FastSearch/. But if you installed previous version of Fast Search, you had to upload the 'php' files to /php/plugins directory. Now that you have upgraded to MT4 and Fast Search 2.1, you need to delete those files from /php/plugins.

The Search Form

If you already have search forms on your blog pages, you need to update them to point to the new Fast Search template. For each template that contains a search form, look for the following (or similar):

<form method="post" action="<$MTCGIPath$><$MTSearchScript$>"

...and change it to:

<form method="post" action="<$MTBlogURL><$MTFastSearchScript$>"

...save the template and repeat this step for every template that has a search form.

If you want to insert a new search form on your site, or completely replace existing forms, you can use the following:

<form method="get" action="<$MTBlogURL$><$MTFastSearchScript$>">
    <label for="query" accesskey="4">Search this blog:</label><br />
    <input id="query" name="query" size="20" />
    <input type="submit" value="Search" />
</form>

Or better yet, install the new Fast Search Widget from the plugin settings area, and use WidgetManager to add the widget to your sidebar (you should also remove the existing search widget).

Of course you can also add optional fields to the form such as:

<input type="hidden" name="order" value="date" />

....to sort the results by date, or....

<input type="hidden" name="category" value="5" />

...to restrict the search to category_id = 5.

Once you have the search form(s) on you site, rebuild those pages and start searching. You should notice significant speed and resource improvement, especially on blogs with many entries.

Fast Search Settings

Fast Search settings are on a "per blog" basis. To access the settings, browse to the blog you want to use, then choose "Settings", then "Plugins". Look for Fast Search in the list and click the "Show Settings" button.

Get Fast Search

After purchasing a license below, you will be taken directly to a download page with a link to download Fast Search Pro, which includes the "clean tag URLs" feature described above. See the text file included with the download for instructions)

Commercial use - (up to 5 blogs) - $97.00

">Fast Search 2.1 for MT4:
">

">Fast Search 2.07 for MT3.2 and 3.3:
">


Blog Network License - (more than 5 blogs) - $249.00

">Fast Search 2.1 for MT4:
">

">Fast Search 2.07 for MT3.2 and 3.3:
">


Non-commercial use - FREE ( although you must include a

Movable Type search results powered by 
<a href="https://mt-hacks.com/fastsearch.html">Fast Search</a>
link on your search results pages.

If you would like to use the "clean tag URLs" feature described above for non-commercial use, the price is $33:

">Fast Search 2.1 for MT4:
">

">Fast Search 2.07 for MT3.2 and 3.3:
">

Download Now

Fast Search 2.1 for MT4:
,<$MTAjaxRatingVoteCount type="fastsearchdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="fastsearchdownloads"$> (since 3/6/07)

Fast Search 2.07 for MT3.2 and 3.3:
,<$MTAjaxRatingVoteCount type="fastsearchdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="fastsearchdownloads"$> (since 3/6/07)

As always, suggestions and feedback are appreciated. Please reply to this entry.

Note: FastSearch v2.0/2.1 is a suitable replacement for most implementations of the built-in search function in Movable Type. However, there are a few features that Fast Search v2.0/2.1 does not include. Fast Search v2.0/2.1 does not support comment searches, regexp search, case-senstive search, the use of AND and OR operators, and Edit Entry Links). Some of these features may be supported in future versions -- please let me know what features you would like to see.

The Dynamic Menus plugin for Movable Type 4.0 (MT4) hides inactive menu items in the MT4 user interface.

By default, MT4 will display all menu items, even if the user does not have the required permissions to access certain items. The inactive items appear grayed out and are not clickable. Some people, including myself, think it would be better if the inactive menu items did not show up at all: if you don't have permissions to perform certain functions, why should those functions clutter up the interface. In some cases, these unclickable, inactive menu items may cause unwanted user confusion, and it is simpler to only show those function that the user is able to perform. So the Dynamic Menus plugin does exactly this, it hides those inactive menu items completely. So if you agree with my thinking on this, download this plugin!

Screenshot

Requirements

  • Movable Type 4.0+

Download Now

,<$MTAjaxRatingVoteCount type="dynamicmenusdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="dynamicmenusdownloads"$>

Installation

  1. Download the zip file and upload the contents of the 'plugins' directory to the 'plugins' directory of your MT installation.
  2. You are done. The inactive menu items should be hidden immediately. Note that if you are logged in as a system administrator, you won't notice any difference in the menus, because you have permissions to perform all functions.

Thank you to Movable Type web designer Jesse Gardner for suggesting the 'Dynamic Menus' name, as the name that I came up with was kinda lame.

The Navigation Breadcrumbs plugin for Movable Type 4.0 (MT4) adds navigation "breadcrumbs" to administration interface. These are links at the top of each screen that helps show you where you are in the interface, and provides links to go up one or more levels. Previous versions of Movable Type includes these handy links, but MT4 does not. So if you like those navigation links, use this plugin.

Screenshot

Requirements

  • Movable Type 4.0+

Download Now

,<$MTAjaxRatingVoteCount type="breadcrumbsdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="breadcrumbsdownloads"$>

Installation

  1. Download the zip file and upload the contents of the 'plugins' directory to the 'plugins' directory of your MT installation.
  2. You are done. The navigation breadcrumbs should start appearing immediately.

MT Plugin Network is a plugin for Movable Type that provides links to the latest plugins and tools, from within the MT administration interface:

MT Plugin Network is collaborative effort by a growing list of plugin developers. When plugin developers release new or updated plugins or tools, they will be added to list of recent MT Plugins and Tools. This way you can quickly and easily stay on top of the latest plugins for Movable Type. Version 1.1 is designed exclusively for Movable Type 4, but version 1.0 is still available for MT3.3.

Download Now

For MT 4.0: Click here to download MT Plugin Network v1.1

For MT 3.3x: Click here to download MT Plugin Network v1.0

Instructions

Unzip the file and upload the contents to your plugins directory within your Movable Type installation (often /cgi-bin/mt/plugins/). After uploading, MT Plugin Network is installed.

Some of the free plugins released by MT Hacks have MT Plugin Network included in the download files. As a condition of the free use of the software, I ask that you also install PluginNetwork. It is a great way to keep up to date on new and updated plugins from MT Hacks (and other plugin providers), as I post updates to the Plugin Network announcements box.

Are you a plugin developer? If you would like to join the MT Plugin Network and include your plugin announcements in the "MT Plugins and Tools" box, please send an email to plugins at mtpluginnetwork.com.

Entry Post is a plugin for Movable Type that enables visitors to your site to submit entries using a form. Visitors do not need a user account and they do not need to login. Similar to posting a comment, they can simply fill in a form and submit.

New features in version 2.0

Entry Post 2.0 contains the following new features:

  • Native Field Support - This means that the EntryPost plugin now manages fields by itself, so you don't need to install CustomFields or any other plugin. You can use Entry Post 2.0 alongside other fields plugins -- there are no known conflicts.
  • Extra Fields - In addition to the standard Name, Email Address, URL, and Image fields, you can now use Entry Post to submit extra fields "on the fly".
  • New Template Tags - New tags make it easier to display information about the poster (and any extra fields) in your blog pages.
  • Support for MT4 - Entry Post two can be used with MT 3.2, 3.3, and now 4.0. tested with MT4 beta5.

I have been using external forms and scripts to do this for several years. Examples include Mars Rover Forum and Seinfeld Forum. These MT-powered forums enable forum members to post new topics (entries) using an external form. Based on this experience, I have converted the entry posting script into a plugin -- and added a bunch of additional features.

Basic Features

  • enable visitors to post entries to your blog
  • new entries can be set to "Published" or "Unpublished" (pending admin/moderator review)
  • supports TypeKey authentication (optional)
  • entries can be scanned against MT's Junk Filters
  • entries can be previewed before posting
  • email notifications of new entry submissions
  • entries can be added to a category (set a default or allow poster to choose)
  • entries can be tagged (default list of tags, or specified by the poster)
  • included default templates include spam-protected form

Advanced Features

  • enable posters to upload an image with the entry
  • other entry fields supported (Extended Entry, Excerpt, Keywords)
  • option to disable rebuilds when an entry is posted
  • option to disable entry creation (makes the form work as a 'contact me' form with email notification turned on.)
  • xml response option
  • support for extra fields defined by you

Try Entry Post Now

I have set up an Entry Post test blog that you can use to submit test entries. You can use one of two forms:

  1. Basic Form (default form installed with Entry Post)
  2. Advanced Form (an example form to demonstrate advanced features)

By using the forms above, you will quickly get an idea of the visitor experience with Entry Post. In its simplest form, it is very similar to posting a comment.

The Administrator Experience

Entry Post has been designed to be easy to install and configure. Simply upload the files, change some file permissions, then configure the plugin via the Plugin Settings for each blog. Required templates are installed with a single click (which can then be customized, if desired).

The settings area for Entry Post looks like this:


By using the above settings, you can configure most of the features of Entry Post.

Template Tags

New in version 2.0, EntryPost includes the following template tags that you can use to display information posted using the plugin:

  • <MTEntryPosterName> - The name of the poster, as submitted in the "Name" field. If the name field it blank, the plugin assumes that the entry was not submitted via Entry Post, and this tag will display the name of the author of the entry. This makes it very easy to update your templates, simply replace the <MTEntryAuthorDisplayName> tag with the <MTEntryPosterName> tag, and it will "just work", regardless whether the netry was posted by an author or posted by a visitor to your blog.
  • <MTEntryPosterEmail> - The email address of the poster, as submitted in the "Email" field. If the "Name" field is blank, this tag outputs the email address of the author. For privacy and anti-spam reasons, I don't recommend using this tag in your templates.
  • <MTEntryPosterURL> - The URL of the poster, as submitted in the "URL" field. If the "Name" field is blank, this tag outputs the URL of the author.
  • <MTEntryPosterIP> - The IP address of the poster. For privacy reasons, I don't recommend using this tag in your templates.
  • <MTEntryPosterImage> - The relative path of the image uploaded by the poster.
  • <MTEntryPosterLink> - Outputs the linked name of the poster. If the "Name" field is blank, it will display the author's linked name. Supports the same arguments as <MTEntryAuthorLink>.
  • <MTEntryPostField> - This tag can be used to to display the value of any extra fields submitted using Entry Post. A single field argument is required, which should inlcude the name of the field, without underscores. For example, <MTEntryPostField field="Favorite Color"> would display the value of the Favorite Color field.

Advanced Use - Adding Extra Fields

Entry Post 2.0 makes it very easy to add extra fields. All you have to do is add the extra fields to the form. First, browse to Templates and then Template Modules and edit the 'EntryPost Form" module. Now add a field to the form in the following format:

<input type="text" name="entrypost_Favorite_Color" />

..and you are done! Note that the "name" argument above must begin with "entrypost_", followed by the name of the field. Use underscores ("_") instead of spaces, if the field name has more than one word. You can add multiple extra fields in this manner, and they will automatically be added to the entries posted, and displayed automatically on the admin Entry screen.

Requirements

  • MT 3.2+ (Note: The tags and TypeKey login features require MT 3.3+)

Limitations

  • Under MT 3.2, you will be able to see the Entry Post fields on the entry screen, but you won't be able edit them.
  • Under MT 4.0, the Typkey sign-in feature doesn't work reliably. The next version of Entry Post will focus on support for MT4's native authentication system.

Installation


  • Download the zip file and extract the contents.

  • Upload the "EntryPost" directory (and all its sub-directories and files) to your MT 'plugins' directory.

  • Change the file permissions to 755 (CHMOD 755) for the EntryPost/mt-entrypost.cgi and EntryPost/signin.cgi files.

  • Login to MT and go to the 'Settings' area of a blog and choose the 'Plugins' tab. Then click the "Settings" link for EntryPost. You should now see the available settings for EntryPost, as shown above.

  • Enable the plugin by checking the Enable checkbox, choose other settings, and the save the settings.

  • Return to the EntryPost settings and install the templates by clicking the provided link. After the templates have been created, you can customize them, if desired, to suit your needs or match your site design. The primary template is an index template called "EntryPost Submit Page" - this page includes the form to post entries.

  • You will probably now want to provide a link to the Submit Page from your main index. One way to do this is to use the provided "EntryPost Submit Link" widget (using WidgetManager). Alternatively, you can manually create a link such as <a href="<MTEntryPostSubmitPage>">Submit an Entry</a>.

Get Entry Post

Commercial License - $97

If you site or blog is for-profit, a commercial license is required. The license includes all future updates to Entry Post and priority feature requests.

Personal License - $33

For use on a personal site or blog, a personal license is required. The license includes all future updates to Entry Post.

If you would like to use Entry Post on a non-profit or charity site, please contact me.

Live Demo

If you are interested in purchasing EntryPost, but would like to try it first, that can be arranged. To experience the poster side of things, visit the Entry Post test blog using the links provided above. If you would like to login to see the admin interface, please contact me.

As always, feedback, suggestions, and product questions are appreciated. Please reply to this entry.

Note: - While Entry Post 2.0 includes built in support for poster fields and extra fields, it is not intended to be used as a general purpose "extra fields" plugin. Fields can only be added via the external Entry Post form. If you are interested in a general purpose fields plugin, there are several available, including CustomFields and RightFields.

Comment Registration is a plugin for Movable Type that enables readers to register an account on your site and login to post comments. Commenters register and login directly with your site, not via an external authentication service (this plugin does not use TypeKey).

UPDATE: The latest version of this plugin, version 1.2, includes an important security bug fix. It is highly recommended that sites using previous versions upgrade to version 1.2 immediately. Simply upload the new version to upgrade -- there is no need to edit or re-install templates.

Movable Type supports comment registration (authentication), but commenters must register and sign via TypeKey, a centralized authentication service offered by Six Apart (the makers of MT). While this "remote authentication" approach has some key advantages, there are also reasons why you might prefer a "local authentication" system. The Comment Registration plugin provides this option.

Comment Registration works with the built-in Commenter system of MT (see the "Commenters" menu item on the left-hand navigation menu). When someone creates a commenter account on your site and posts a comment, they will appear on the Commenters screen, including their Nickname, username, URL, email, and a tally of their comments:

Note: Commenters must post at least one comment before they appear on the Commenters listing. If someone creates an account but does not post a comment, they will not appear in the listing.

Because the plugin uses the the built-in Commenters system, you can use all the MT commenter features, such as:

  • Trusting and Banning commenters:
  • Settings for accepting comments:
  • Settings for publishing comments:

Comment Registration comes with 4 default templates (based on the default MT3.3 templates):

Commenter Login - An index template that contains a login form for commenters.
Commenter Registration - And index template that contains a form for creating a commenter account on your system.
Site Javascript - This is a replacement index template for the existing Site Javascript (mt-site.js) template. (Your existing Site Javascript will be renamed as a backup during installation).
Widget: Commenter Login - A Widget Manager widget that you can add to your sidebar, containing a login form for commenters.

Test it Out Now

Head over to the MT Hacks Test Blog and register for an account and then submit a few comments. Start at this test entry by clicking here.

Installation:

  1. Extract the files from the zip file, and upload the contents of the 'plugins' directory to the 'plugins' directory of your MT installation.
  2. Change the permissions on the mt-login.cgi file to 755 (CHMOD 755).
  3. Browse to the blog you want, then go to Settings - Plugins, and then the Settings button for Comment Registration. You will notice that the plugin has no settings of its own, but you will find a link to install the default templates. Click that link. The default templates will be installed and rebuilt.
  4. You must have Authentication enabled for the default templates to work (if you currently allow TypeKey authentication, you can skip this step). Go Settings > Feedback and find the "Authentication status" setting. In field after "Or, manually enter token", enter some text (anything will do).
  5. (Optional) Adjust the Feedback settings for accepting and publishing comments (see images above) as desired.
  6. Save Feedback settings and then manually rebuild the Site Javascript (mt-site.js) index template.

Requirements

  • MT 3.3x

Note that this plugin does not work with MT4, as this plugin's features have be built-in to MT4.

Get Comment Registration

Comment Registration is free for personal use, but you must place a link on your site, such as:

Powered by the <a href="https://mt-hacks.com/commentregistration.html">Comment Registration</a> plugin for Movable Type.

Donations are appreciated:

Download
,<$MTAjaxRatingVoteCount type="commentregistrationdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="commentregistrationdownloads"$>

Commercial License (up to 5 blogs) - $97

Blog Network License (unlimited blogs) - $249

Note for multi-blog installations / blog networks: commenters need only create one account and can use the same login for all of the sites on the same MT installation.

As always, comments and feedback are appreciated. Please reply to this entry.

Fast Search is a PHP plugin for Movable Type. This means that Fast Search uses Movable Type's dynamic PHP-based publishing system to display search results. However, you can continue to use static publishing for all of your indexes and archives. Fast Search is fast in part because it uses mySQL fulltext indexing -- basically this means that a search index will be created for the entries in your database, making searches much faster. Like the built-in search, Fast Search logs searches to the Movable Type Activity log.

Update 3/11/2007:Version 2.02 has been released. This is a critical update for those who installed 2.0 prior to March 10, 2007. Inadvertently, the old version of the MTSearchString tag was included in that zip file. Version 2.02 has the correct version of that tag. Note: if you don't plan on using Tag Search, then you don't really need 2.02.
Update 3/14/2007:Version 2.03 has been released. This version addresses a Unknown column 'mt_entry.entry_id' in 'on clause' error that affected people running mySQL 5+. (A big thanks to David Chiu for providing the fix!)

New Features in Version 2.0

Fast Search v2.0 has several new features:

  • Tag Search. Fast Search now supports Tag Search (MT3.3+). Also known as a tag listing, Tag Search displays a list of entries with a specific tag. If you list tags in your entries, they are probably linked to a Tag Search. Fast Search v2.0 does the same thing, only faster.
  • Better Relevance Ranking. Fulltext searches now provide much better relevance ranking.
  • Easier System-wide Searching. Now it is even easier to to search all blogs in a single search.
  • Search results containing all keywords. This is a small change for Fulltext searches. Previously, if you searched for 'red books' (without quotes), the search results would include any entry containing 'red' or 'books'. In version 2.0, only entries with both 'red' and 'books' will be included in the search results. This makes things more consistent with other search engines.
  • Fast Search Widget. A new Fast Search Widget makes it easy to add a Fast Search form to your sidebar.
  • New Template Tags. Several new template tags make it easier to customize your search results. Fast Search now supports all of the template tags used in the default MT 3.3 search results template -- this means it is even easier to switch to Fast Search

Tag Searches with Fast Search

Fast Search now supports tag search. A tag search will display a list of all entries with a specific tag. Of course, tag searches have the same pagination features as regular searches, enabling you to browse multiple pages of tag search results. Tag search results are always sorted with the most recent entries listed first. Tag searches can done on a single blog (default), or across multiple blogs.

Tag Search Links. If you are using tags with MT 3.3+, you are probably displaying a list of tags with each entry. Each of those tags are linked to a search results page that displays all the entries with that tag. Since those links point to the built-in mt-search.cgi script -- Fast Search includes a new version of the <MTTagSearchLink> tag that points to the Fast Search script. This happens automatically, you don't have to edit your templates -- just enable Fast Search, install the Fast Search template, then rebuild your pages -- the tag links will be automatically updated.

Clean Tag Search URLs

With Fast Search 2.0, it is possible to use nice looking tag search URLs such as:

https://mt-hacks.com/tag/spam
https://mt-hacks.com/tag/comments

This feature requires editing you .htaccess file and a minor edit to the Dynamic Bootstrapping template. This feature is only available to those who purchase a license or those personal users who donate at least $33. I will email you the required files and full instructions.

Better Relevancy

By tweaking the fulltext queries, I have managed to improve the relevancy ranking significantly. To test this out, you should do a few searches (in fulltext mode) before you upgrade to Fast Search 2.0 -- note the results and their relevancy -- then upgrade and do the same searches. You should see much more relevant results at the top of the search results. Please post your feedback on this by replying to this entry.

Search all Blogs Easier

In the previous version of Fast Search, it was possible to search across all blogs on a system, but you had to specify each of them separated by commas. This is fine if you have a few blogs, but what if you have 50? 100? 500? Version 2.0 makes this easier by allowing the special "all" keyword to indicate that you want to search all blogs (example <MTSearchResults blogs="all"> or in the URL/form: ?query=books&blogs=all). A time-saver for large MT installations and blog networks.

Include PHP in your Search Results Template

This not a new feature, but it deserves highlighting. Many sites use PHP on most of their pages for various reasons (for example, to include content such as headers/footer and advertising blocks). The problem is that you can't use PHP on the "built-in" search results pages, because they are dislayed by a (Perl) CGI script. This can make it challenging to maintain your site in a consistent manner. You can avoid such problem with Fast Search -- since it is powered by PHP, you can include blocks of PHP code in the search results template. (Note: there is a small requirement that you need to use <?php to start each block, using simply <? won't work.)

What Search Method is Best?

For most cases, "Fulltext" will be the fastest search method. This is the same method used in version 1.0. There are some cases in which you might two options:

  • Non-Fulltext. Technically speaking this method used a LIKE %query% syntax. If you don't know what that means, don't worry about, just read on.
  • Fallback. The Fallback method is a combination method. FastSearch will first try a fulltext search, and if that returns no results, then it will try a Non-Fulltext search.

Non-Fulltext and Fallback are capable of some types of searches that you can't do with mySQL. You might want to use Non-Fulltext or Fallback to:

  1. search multi-byte languages such as Arabic and Japanese.
  2. search words shorter than 3 characters (such as "MTV")
  3. search partial words
  4. search a mySQL database that does not support Fulltext searching

Template Tags

Version 2.0 of FastSearch is designed to easily replace the existing search functionality in Movable Type, but with added features. For example, if you are currently using customized search templates, you can use them with Fast Search, with very few changes in most cases. Many Fast Search template tags have the same names as their CGI counterparts:

  • <MTSearchString> - The search string (query) being searched.
  • <MTSearchResults> - A container tag that displays search results. Arguments include (all are optional):
    • lastn - restricts the search to n results. (example <MTSearchResults lastn="10"> ) The lastn argument, like all arguments for MTSearchResults, can also be specified in the URL (...&lastn=10) or POSTed from a search form)
    • offset - used in coordination with lastn, starts M entries from the start of the list. (example <MTSearchResults lastn="10" offset="10"> will display results 11-20)
    • order - must be either 'date' or 'relevance', the default is 'relevance'. (example $lt;MTSearchResults order="date"> will provide similar results as the CGI search)
    • category - must be a valid category ID for the current blog - restricts the search results to entries from this category.
    • google_highlight - if specified, search words will be highlighted. (example <MTSearchResults google_highlight="1"> )
    • query - the search string (text) to be searched. In normal use, you would NOT include this argument as part of the <MTSearchResults> tag, rather, it would be specified as a URL paramter (example ...query=search+phrase) or POSTed from a search form.
    • new - tag - the tag to be searched. In normal use, you would NOT include this argument as part of the <MTSearchResults> tag, rather, it would be include as a URL parameter (example ...tag=books) as part of a Tag Search Link.
    • blogs - a comma-separated list of blog_ids if you want to search more than one blog. This argument is optional, if excluded, only the current blog will be searched. Example usage: <MTSearchResults blogs="1,3,8">new - Set blogs equal to "all" to search every blog on the sytem.
  • <MTBlogResultHeader> - this is container tag that displays content before the search results.
  • <MTBlogResultFooter> - this is container tag that displays content below the search results.
  • <MTNoSearchResults> - A container tag that displays its content only if zero results are found. Note that this tag must be used after a <MTSearchResults> container.
  • <MTNoSearch> - A container conditional tag that displays its content only if no search phrase was specified. new - Now supports the use of <MTElse> inside this container.
  • <MTSearchCount> - The number of search results displayed on the current search results page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter> container.
  • <MTSearchFirst> - The number of the first search result on the current page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchLast> - The number of the last search result on the current page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchIfNextPage> - A conditional tag that displays its content if there is a subsequent page of search results. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchNextPageLink> - Output a URL to the next page of search results. This tag should be used within <MTSearchIfNextPage> tags.
  • new - <MTSearchIfPreviousPage> - A conditional tag that displays its content if there is a previous page of search results. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • new - <MTSearchPreviousPageLink> - Output a URL to the previous page of search results. This tag should be used within <MTSearchIfNextPage> tags.
  • <MTSearchTotalResults> - The total number of matching results in the database.
  • <MTSearchPages> - A container tag that can display links to multiple pages of search results. Optional arguments include:
    • max - the maximum number of page links to display on each page. Example: <MTSearchPages max="20">
    • glue - a text string that seperates each page. For example, if you wanted to display 1 - 2 - 3 - 4, you could use <MTSearchPages glue=" - ">
  • <MTSearchPageNumber> - Displays the page number of each search results page. This must be used within a <MTSearchPages> container.
  • <MTSearchPageLink> - Displays the URL to each search results page. This must be used within a <MTSearchPages> container.
  • <MTSearchIfCurrentPage> - A conditional tag that only displays its contents if the page number is the same as the current page - you would normally use this is you wanted to highlight the current page in the list of page numbers, etc. This must be used within a <MTSearchPages> container.
  • new - <MTIfStraightSearch> - A conditional tag that only displays its contents if the search is a normal search and not a tag search.
  • new - <MTIfTagSearch> - A conditional tag that only displays its contents if the search is a tag search and not a normal search.
  • new - <MTFastSearchScript> - This tag displays the filename of your Fast Search script. You can use this in your search forms as shown below. Note: for this tag to work, you should not rename your Fast Search template -- it should laways be named "Fast Search". This tag works in both static and dynamic templates.
  • replacement - <MTTagSearchLink> - This tag overrides the built-in tag of the same name (this automatic, not need to edit templates or anything). The new version of the tag is "smart" -- if Fast Search is enabled for a blog, it will link to the tag search results using the Fast Search script -- if not, it will use the built-in search script. This tag has the following optional argument:
    • tag_dir - Use this argument to specify a "directory" name for your tag search URLs. Note: This feature is only available to personal users who make a donation OR those who buy a commercial license.

Note: the new default Fast Search template includes pre-formatted template code that displays Google-style search results page links.

As you may have noticed, some of the tags above are identical to the ones used for the existing CGI-based search results. This is by design, so you will easily be able to cut-and-paste your existing search template code into the Fast Search template, though some minor modifications may be required.

Working Examples:

Here are some working examples you can try. Feel free to try additional search queries and note the speed that searches are performed.

  • Tag search results on MT Hacks. Example tags: spam cms.
  • Mars Rover Blog has over 5,000 entries. Example search: "water on mars". Note that this example shows the default FastSearch template, which is very similar to the default search results template in MT 3.2.
  • Seinfeld Blog has over 8,000 entries, 180 of which consist of the episode descriptions and scripts of all 180 episodes. Fast Search powers the Seinfeld Script Search, which is restricted to a single category containing the episodes. Example search: 'bubble boy'

Requirements:

  • Movable Type 3.2 or 3.3
  • mySQL

Instructions

  1. Download the plugin and expand the zip file.
  2. Upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation (usually something like /cgi-bin/mt/plugins).
  3. Upload the contents of the 'php' folder to the 'php' directory (usually something like /cgi-bin/mt/php)
  4. Login to the MT admin interface. If you already logged in, choose 'Main Menu'
  5. If your are running MT 3.3, you should be redirected to an 'Upgrade' screen at this point. The Fast Search upgrade process will update your database to add a fulltext index to the table in your database where entries are stored. Note that this may take some time if you have many entries, and this will add to the overall size of your database.
  6. If you are running MT 3.2, you will not see the upgrade screen (as it is a 3.3 feature), so you need to create the index by browsing to the 'Settings' of a blog where you want to use Fats Search. Choose the 'Plugins' tab then find 'Fast Search' and choose 'Settings'. Now click the link in bold that says "Click here to create or rebuild the FastSearch fulltext index". Again, this may take some time, please be patient. After the index has been created, hit the Back button.
  7. Now browse to the 'Publishing' settings tab for the blog, and scroll down to the Setting called "Dynamic Publishing". If the first option, "Build all templates statically", is selected, you should change this setting to "Set each template's Build Options separately" and click "Save Changes" at the bottom of the screen. Otherwise, you don't need to make any changes here.(Note that change this setting will create an .htaccess file in the root path of the blog. Normally you won't notice this and everything will work fine, but if you have an existing.htacces file, you may want to take a look at it to make sure everything looks okay)
  8. If you just changed your Dynamic Publishing settings in the previous step, you should now rebuild all files for this blog by choosing "Rebuild Site" from the left menu, then "Rebuild all Files". You should also ensure that you have a "Dynamic Site Bootstrapper" (mtview.php) index template and make sure that it gets built, if it hasn't been built previously.
  9. Now return to the Fast Search settings ('Plugins' tab within 'Settings') and check the box to enable Fast Search. You may also want to adjust the settings for Maximum Search Results and logging, then click "Save Changes".
  10. Open the Fast Search settings once again and choose "Click here to install the default Fast Search Template." The template will be created and then displayed. This is an dynamic Index template (which can be customized) used to display the search results. (If desired you can also skip this step and create the index template manually, use the template tags as desired, or by cutting and pasting your exisiting search template code)
  11. Upgrading Fast Search

    Follow steps 1 to 3 above, then adjust your Fast Search plugin settings and search template, if desired. If you using Tag Search, you probably want to update your Fast Search template. One way to do this is to rename or delete your existing template, then reinstall the new default template from the plugin settings area.

The Search Form

If you already have search forms on your blog pages, you need to update them to point to the new Fast Search template. For each template that contains a search form, look for the following (or similar):

<form method="post" action="<$MTCGIPath$><$MTSearchScript$>"

...and change it to:

<form method="post" action="<$MTBlogURL><$MTFastSearchScript>"

...save the template and repeat this step for every template that has a search form.

If you want to insert a new search form on your site, or completely replace existing forms, you can use the following:

<form method="get" action="<$MTBlogURL$><$MTFastSearchScript>">
    <label for="query" accesskey="4">Search this blog:</label><br />
    <input id="query" name="query" size="20" />
    <input type="submit" value="Search" />
</form>

Or better yet, install the new Fast Search Widget from the plugin settings area, and use WidgetManager to add the widget to your sidebar (you should also remove the existing search widget).

Of course you can also add optional fields to the form such as:

<input type="hidden" name="order" value="date" />

....to sort the results by date, or....

<input type="hidden" name="category" value="5" />

...to restrict the search to category_id = 5.

Once you have the search form(s) on you site, rebuild those pages and start searching. You should notice significant speed and resource improvement, especially on blogs with many entries.

Fast Search Settings

Fast Search settings are on a "per blog" basis. To access the settings, browse to the blog you want to use, then choose "Settings", then "Plugins". Look for Fast Search in the list and click the "Show Settings" button.

Download Fast Search

Non-commercial use - FREE ( although you must include a

Movable Type search results powered by 
<a href="https://mt-hacks.com/fastsearch.html">Fast Search</a>
link on your search results pages.

Also, donations are appreciated. Those who donate at least $33 will receive the BONUS "clean tag URLs" feature described above:

Commercial use - (up to 5 blogs) - $97.00

Blog Network License - (more than 5 blogs) - $249.00

Download Now

,<$MTAjaxRatingVoteCount type="fastsearchdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="fastsearchdownloads"$> (since 3/6/07)

As always, suggestions and feedback are appreciated. Please reply to this entry.

Note: FastSearch v2.0 is a suitable replacement for most implementations of the built-in search function in Movable Type. However, there are a few features that Fast Search v2.0 does not include. Fast Search v2.0 does not support comment searches, regexp search, case-senstive search, the use of AND and OR operators, and Edit Entry Links). Some of these features may be supported in future versions -- please let me know what features you would like to see.

Comment Registration is a plugin for Movable Type that enables readers to register an account on your site and login to post comments. Commenters register and login directly with your site, not via an external authentication service (this plugin does not use TypeKey).

Movable Type supports comment registration (authentication), but commenters must register and sign via TypeKey, a centralized authentication service offered by Six Apart (the makers of MT). While this "remote authentication" approach has some key advantages, there are also reasons why you might prefer a "local authentication" system. The Comment Registration plugin provides this option.

Comment Registration works with the built-in Commenter system of MT (see the "Commenters" menu item on the left-hand navigation menu). When someone creates a commenter account on your site and posts a comment, they will appear on the Commenters screen, including their Nickname, username, URL, email, and a tally of their comments:

Note: Commenters must post at least one comment before they appear on the Commenters listing. If someone creates an account but does not post a comment, they will not appear in the listing.

Because the plugin uses the the built-in Commenters system, you can use all the MT commenter features, such as:

  • Trusting and Banning commenters:
  • Settings for accepting comments:
  • Settings for publishing comments:

Comment Registration comes with 4 default templates (based on the default MT3.3 templates):

Commenter Login - An index template that contains a login form for commenters.
Commenter Registration - And index template that contains a form for creating a commenter account on your system.
Site Javascript - This is a replacement index template for the existing Site Javascript (mt-site.js) template. (Your existing Site Javascript will be renamed as a backup during installation).
Widget: Commenter Login - A Widget Manager widget that you can add to your sidebar, containing a login form for commenters.

Test it Out Now

Head over to the MT Hacks Test Blog and register for an account and then submit a few comments. Start at this test entry by clicking here.

Installation:

  1. Extract the files from the zip file, and upload the contents of the 'plugins' directory to the 'plugins' directory of your MT installation.
  2. Change the permissions on the mt-login.cgi file to 755 (CHMOD 755).
  3. Browse to the blog you want, then go to Settings - Plugins, and then the Settings button for Comment Registration. You will notice that the plugin has no settings of its own, but you will find a link to install the default templates. Click that link. The default templates will be installed and rebuilt.
  4. You must have Authentication enabled for the default templates to work (if you currently allow TypeKey authentication, you can skip this step). Go Settings > Feedback and find the "Authentication status" setting. In field after "Or, manually enter token", enter some text (anything will do).
  5. (Optional) Adjust the Feedback settings for accepting and publishing comments (see images above) as desired.
  6. Save Feedback settings and then manually rebuild the Site Javascript (mt-site.js) index template.

Get Comment Registration

Comment Registration is free for personal use, but you must place a link on your site, such as:

Powered by the <a href="https://mt-hacks.com/commentregistration.html">Comment Registration</a> plugin for Movable Type.

Donations are appreciated:

Download

,<$MTAjaxRatingVoteCount type="commentregistrationdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="commentregistrationdownloads"$>

Commercial License (up to 5 blogs) - $97

Blog Network License (unlimited blogs) - $249

Note for multi-blog installations / blog networks: commenters need only create one account and can use the same login for all of the sites on the same MT installation.

As always, comments and feedback are appreciated. Please reply to this entry.

Template Inheritance is a plugin for Movable Type that enables you to link templates together in a way that one template inherits its template code from another template. One example is when you have two or more blogs in your MT system, and you want to use the same design or template layout for each blog. Using the Template Inheritance plugin, you can effectively use one blog's templates as master templates that control the templates of the other blogs. So if you have 3 blogs on a company site with same look and feel, this can save you a lot of time manually updating the templates of each blog every time you make a change. Another way to think of it is sharing templates between several blogs. You can link all the templates in one blog to another, or selectively choose which templates should be inherited (including template modules).

I have wanted a plugin like this for years, the ability to share template code between multiple blogs. For a long time, MT has included a "Link this template to a file" feature in which you could link a template to an actual file on your server. I used to link multiple templates to the same file, effectively (and indirectly) sharing the template code between different blogs. While this works, it has its problems. At times in the past, there we MT bugs that prevented templates from being updated from the file - but I think those are fixed now. The other main problem is that you have to be very careful when editing a template, remembering that it may be shared with other blogs, etc. The Template Inheritance plugin is an improvement over the file linking method, addressing the key issues with file-based linking.

Features

For any specific template, you can assign another template on the system from which to inherit template code. For example you could decide that you want template "B" to inherits its template code from template "A".

It may be helpful to think of "A" as the parent template and "B" as the "child" template -- the child inherits its template code from its parent. When template becomes linked to parent template, the child's template code will immediately be replaced by the template code of the parent, and will be derive its template code from the parent from that point forward. You won't be able to edit the child template after the link is made (the template code is greyed-out and the field is disabled) -- instead, you will see a link to the parent template, and you can then edit the parent template.

Editing the parent template will automatically update all of its children templates. Of course, you need to rebuild the appropriate pages on each blog for template changes to be reflected on your blogs. You remove remove inheritance (break the link with the parent) at any time. When you remove inheritance from a child template, it becomes independent from that point forward, and you can now customize it independently of the parent template.

Notes:

  • Only system administrators (sometimes called superusers) can create inheritance links.

  • You must enable the plugin for each blog before you can create inheritance links (blogs to have "child" templates need to be enabled, not those containing the "parent" templates)

  • A template cannot be both a child and a parent. If you try to assign inheritance from a template that is a child of another template, it will work -- but the plugin will make the link directly the ultimate parent. This makes it easier to manage, as you won't have to trace template linkages through several generations to find the "master" template.

  • When a parent template is deleted, each of its children immediately become independent (orphaned, if you will).

  • When first assigning inheritance to a template, the child template's code is replaced by that of the new parent. BE CAREFUL, there is no undo, the child's former template code will be gone. Just to be safe, it may be a good idea to back up the old template code beforehand, in case you decide to revert back.

Requirements

  • MT 3.3+

Great for Blog Networks

While Template Inheritance can be used in many different scenarios, it is a great fit for blog networks. Networks of blogs on the same MT system often have similar (or identical) design or template code. Sometimes only certain things are the same, such as a common header / footer, stylesheet, sidebar, advertising blocks, etc. Using this plugin to link up those common template elements, you can save a lot time managing the templates of the network. If you have a blog network and this sounds interested, please contact me. I can help implement this for you, customize the plugin to meet your specific needs, etc.

Instructions

  1. Extract the contents of the zip file and upload the contents of the 'plugins' directory into the 'plugins' directory of your MT installation
  2. Login to MT (or hit Main Menu, if you are already logged in). You should now see and upgrade screen that will install a table for Template Inheritance.
  3. Browse to the blog you want, then go to the plugin settings to enable the plugin.
  4. Browse to the template you want, then click the "Click here to inherit code from another template" link.
  5. Enter the template ID of the desired parent in the prompt box, hit OK.
  6. The template is now linked to the parent. Rebuild to see the results on your site.

Get Template Inheritance

Template Inheritance is free for personal use on up to 3 blogs.

Donations are appreciated:

Download Now

,<$MTAjaxRatingVoteCount type="templateinheritancedownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="templateinheritancedownloads"$>

Commercial License (4-10 blogs): $97

Blog Network License (10+ blogs): $249

As always, feedback and suggestions are appreciated. Please reply to this entry.

Spam Firewall v1.2 is now available. Version 1.2 has two changes:

  • An updated "top 40" list of firewall rules
  • A bug fix that should address the "blank page" problem that some people experienced from time-to-time. If you still have this problem with version 1.2, please let me know.

Download Now

,<$MTAjaxRatingVoteCount type="spamfirewalldownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="spamfirewalldownloads"$> (since 2/21/07)

About Spam Firewall

Spam Firewall is a plugin for Movable Type that can help reduce this load. The goal of Spam Firewall is to block 80% of spam attempts before they reach MT's comment and trackback scripts. As the name suggests, it acts like a firewall protecting your MT scripts.

How Spam Firewall Works

Spam Firewall creates a PHP script that acts as a firewall. Once installed, when comments or trackbacks are posted, they get posted to the PHP firewall script. The firewall script will then scan the the request against a "Top 40" list of common spam patterns. If the request matches, things stop right there. If the request passes the test, it gets forwarded to MT for processing in the normal manner. Most spam is blocked quickly, without consuming large amounts of CPU and memory.

The Top 40 List

The key to Spam Firewall is a "Top 40" list of common spam patterns. The 40 spam patterns (rules) released today represent 80% of the spam that I have received in the past 8 days. Of a total of 14,405 spam attempts, this Top 40 list matches 11,541 of them (80.1%). The list is based on real spam attempts from the past week. I plan on updating the Top 40 list regularly.

Requirements:

  • MT 3.2+
  • PHP (Note: you do not need to enable MT's dynamic publishing to use Spam Firewall, but your server must support PHP scripts -- most do)

Instructions:

  1. Download the zip file and extract its contents.
  2. Within the main 'Spam Firewall' directory, there are two folders, one names 'plugins' and one named 'php'. Upload both of these folders (including sub folders and files) into the same directory as Movable Type (often /cgi-bin/mt).
  3. Go to 'Settings' on the blog you want to setup, then choose 'Plugins', then choose the 'Settings' link under "Spam Firewall". Then click the "Click here to install the Spam Firewall Template for this blog" link. This will install the Spam Firewall index template and rebuild it. Advanced users can change the Output File name if desired, but you should not change the Name of the template.
  4. (Optional, but highly recommended) Rename your comment and trackback scripts [More Info]. Because Spam Firewall hides the name of these MT scripts, now is a very good time to rename them.
  5. To setup Spam Firewall for comments, you need to change the comments submission form to point to the firewall script. Go to your Individual Archive Template and look for the following:

    action="<$MTCGIPath$><$MTCommentScript$>"

    and replace it with:

    action="<$MTBlogURL$><$MTFirewallCommentScript$>"


  6. To setup Spam Firewall for trackbacks, look for the <$MTEntryTrackbackData$> and replace it with <$MTFirewallTrackbackData$>. Also, look for the <$MTEntryTrackbackLink$> and replace it with <$MTFirewallTrackbackLink$>.

  7. Rebuild all individual archives.

Download Spam Firewall

Non-commercial use - FREE ( In exchange for the free use of this plugin, I ask that you install the MT Plugin Network plugin. Plugin Network will help keep you up to date on the latest version (and rules) of Spam Firewall and other useful plugins. [more info])

Also, donations are appreciated:

Commercial use - $97.00

Download Now

,<$MTAjaxRatingVoteCount type="spamfirewalldownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="spamfirewalldownloads"$> (since 2/21/07)

As always, suggestions and feedback are appreciated. Please reply to this entry.

Blog Janitor is a plugin for Movable Type that preforms various clean-up tasks. In version 1.0, Blog Janitor can perform the following tasks:

  • Close comments on old entries.
  • Delete duplicate comments and trackbacks

Blog Janitor does his work automatically, you don't need to edit your templates. Just tell Blog Janitor the tasks you want him to perform (by adjusting the plugin settings), and he will go to work periodically (using the scheduled tasks feature of MT 3.3+).

Here are some details on his current skills:

Close Comments and Trackbacks on Old Entries

One technique for reducing blog spam is to close comments (disable commenting) and trackbacks on entries that are older than a certain number of days. This can be a tedious process to do manually, if you remember to do it. Blog Janitor can take care of this job for you. Simply enable Close Comments in the plugin settings for a blog, and tell Blog Janitor the number of days he should wait before closing comments on an entry. That's all you have to do, Blog Janitor will routinely check for old entries and close comments on them for you.

Delete Duplicate Comments and Trackbacks

Duplicate comments and trackbacks can happen in a number of ways. For example, a commenter may hit the submit button twice, thinking that the comment did not get posted the first time. Another common occurence is duplicate junk comments and trackbacks -- since spammer often post identical spam messages, your Junk folders may be full of duplicates. Blog Janitor is skilled a scanning your recent comments and trackbacks for duplicates. If you give him the order (by enabling duplicate checking in plugin Settings), he look for recent duplicates and delete them. Just tell him how many recent items to scan, and he will go to work every hour looking for recent duplicates. (Note: there is no "undo" when Blog Janitor deletes items, but he does leave a message in the Activity Log notifying you of which items he has deleted).

Settings

The Settings is where you give Blog Janitor his orders. Go to the blog you want, then choose Settings, then the Plugins tab, and then click on Setting for Blog Janitor. The settings look like this:

Requirements

  • MT 3.3x

Instructions

  1. Download the zip file and expand it.
  2. Upload the contents of the 'plugins' directory in to the 'plugins' directory of you MT installation (usually /cgi-bin/mt/plugins/)
  3. Adjust the settings as described above

Notes:

  • If you have a large number if entries in your blog, Blog Janitor will not close comments on every old entry the first time he goes to work. He gets tired if he tries to close comments on too many entries at a time, and his union contract states that he doesn't have to close comments on more than 100 entries each hour. (Okay, the real reason is to save your MT from excess load that might slow things down) Since Blog Janitor works on up to 100 entries each hour, it may take some time before he gets 'caught up'. For example, if you have 2400 entries on your blog, it will take about 24 hours for Blog Janitor to go through all the old entries and close comments and trackbacks.
  • Blog Janitor punches his time clock when he starts and finishes a task. For each task, he posts a message to the Activity Log that explains what task was completed, and how many seconds it took him to complete. If you are concerned about system load, keep an eye on the Log to see how hard he is working.

Get Blog Janitor

Blog Janitor is free for personal use:

Download Now

,<$MTAjaxRatingVoteCount type="blogjanitordownloads" id="1"$>,0);">Download Now (Blog Janitor for Personal Use)
Downloads: <$MTAjaxRatingVoteCount id="1" type="blogjanitordownloads"$>

Commercial Use: $97

">

If you buy a commercial license, you will get priority for future features, and an advanced version of Blog Janitor that enables you to give Blog Janitor orders on a system-wide basis (so you can adjust the settings in once place for all blogs on the system).

As always, comments and suggestions are welcome - please reply to this entry.

Add Category is a simple MT Plugin that enables you to select multiple entries and add them to one or more categories at the same time. This can be a timesaver if you want to add a bunch of entries to the same category -- using this plugin you can avoid opening up each entry, adding the category, saving the entry, etc.

This screen snap says it all:

Instructions:

  1. Download the zip file and expand it.
  2. Upload the content of the 'plugins' directory into the 'plugins' directory within your MT install.
  3. Go to an Entry Listing screen for the blog you want.
  4. Select one or more entries by checking the boxes on the left-hand side.
  5. Choose "Add to Categories..." from the drop-down box on the top-right of the entry listing.
  6. Enter the names or category IDs of one or more categories. If you enter more that one category, separate each with commas. Then hit the okay button.
  7. Rebuild the entries.

Notes:

  • If you have more than one category with the same name in the same blog (rare, but it does happen), then you should use category ID numbers to make sure the entries get added to the intended category.
  • If an entry is not assigned to any categories, the plugin will assign the first category you specify as the primary category.
  • If you specify a category that does not exist, the plugin will display an error message. You should create the categories first.
  • This plugin cannot be used to change the primary category.
  • This plugin cannot be used to remove categories from entries (perhaps in a future version).

Get Add Category

Add Category is not free, but you can try before you buy. The license cost is only $7.

Download Now

,<$MTAjaxRatingVoteCount type="addcategorydownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="addcategorydownloads"$>

The Ajax Rating Pro plugin enables you to setup comment threshold viewing for Movable Type powered sites. For more information about Ajax Rating Pro, click here.

This article focuses on ways that you can use Ajax Rating Pro to setup comment thresholds for Movable Type. The concept behind comment threshold is the ability to hide or collapse comments with rating score below a certain threshold. The result is collaborative filter, readers rate each others comments, and higher ranked comments are given more prominence, while lower ranked comments are given less prominence. Popular site such as Slashdot, Digg, and Scoop-powered sites use comment threshold filtering. It is a great tool for popular sites that attract a large number of comments.

Ajax Rating Pro is very flexible and customizable -- you can decide how you want to implement comment threshold filtering. Do you want to completely hide low ranked comments? Merely collapse them? Implement a default threshold score, or let readers choose their own? Something else in mind?

Ajax Rating Pro comes with a few built-in tools to help setup some of the more common approaches to comment thresholds. Let's walk through such an example. First take a look at the test entry here. Feel free to rate some comments and set a person comment threshold - notice how the display changes (refresh the page if needed). I am going go step-by-step to setup comment thresholds in this manner.

In this scenario, reader will rate comment with a vote up or a vote down. Votes are +1 point and votes down are -1 point. The default threshold is -3. In this scenario, comments with a total score of less than -3 will appear in a collapsed state. A single-click reveals the below threshold comment. Reader can optionally choose their own threshold using the form at the bottom of the comment listing.

Step 1 - After you have installed Ajax Rating Pro, go to the plugin settings for the blog you want. Choose Thumbs Up/Down for comment mode and choose 1 for Comment Max Points. Set the default threshold as desired (in this example, we will use -3).

Step 2 - Add a thumb rater to your Individual Archive template, between the <MTComments> and </MTComments> tags. In this example, I added it after the comment date on the default MT 3.3+ template:

<$MTAjaxThumbRater type="comment" report_icon="1"$> Score: <strong><span id="ajaxrating_comment_<MTCommentID>_ttl"><MTAjaxRating></span></strong> (<span id="ajaxrating_comment_<MTCommentID>_cnt"><MTAjaxRating show="vote_count"></span> votes cast)

Then rebuild your individual archives. (Tip: make sure you have the Ajax Rating lines in the <head> section of this template, as described in step 10 here. After rebuilding, each comment should have a thumb rater -- test to make sure the ratings are working.

Step 3 - Now that our readers can rate others' comments, now we can change the display for comments that fall below the threshold. In this example, we will do this using CSS styles to show or hide things. First we want to create add a section to the Individual Archive template, that will display only when comments fall below the threshold. In this example, immediately after </MTCommentsHeader>, enter the following:

<span class="below-threshold" id="threshold-<$MTCommentID$>">
<a href="#" id="c<$MTCommentID pad="1"$>" onclick="showComment(<$MTCommentID$>); return(false);"><$MTCommentBody trim_to="30" strip_linefeeds="1" remove_html="1"$>...</a> (Below threshold)
<p class="comment-footer">
Posted by <$MTCommentAuthorLink default_name="Anonymous"$> <$MTCommentAuthorIdentity$> |
<a href="#comment-<$MTCommentID$>"><$MTCommentDate$></a> | Score: <strong><$MTAjaxRatingTotalScore$></strong>
</p>
</span>

The first and last lines above are very important. This <span> encloses the stuff that we want to display when a comment is below the threshold. We will show and hide this span depending on the score and threshold. Both the class="below-threshold" and id="threshold-<$MTCommentID$>" are required for this purpose.

Inside the the span, you can customize what you want to display when a comment is below threshold. In this example, we have included a link that will display the comment. Notice the onclick argument in the link:

onclick="showComment(<$MTCommentID$>); return(false);"

This onclick section is important, as it will cause the link to run some javascript to display the comment in the browser.

Step 4 - The next step is to include a form that readers can use to set their own threshold. (If you don't want readers to be able to set their own threshold, you can skip this step). Below the </MTComments> tag, enter the following form code:

<form id="threshold-form" name="threshold_form" action="<$MTEntryLink$>#comments" onsubmit="setThreshold(this);">
<input type="text" name="threshold" size="3">
<input type="submit" name="submit" value="Set Comment Score Threshold">
</form>

The important part of this form is the onsubmit="setThreshold(this);" section as this will set the readers threshold by storing in a cookie in their browser.

Step 5 - By default, the section that we added in Step 3 above is hidden from view, and the full comment is displayed. At this point we need to compare the score to the threshold of each comment and decide which comments should be collapsed. Add the following below the form coded added in Step 4:

<script type="text/javascript">
<!--
var comments = new Array(<MTComments>'<$MTCommentID$>',</MTComments>'');
hideComments(comments);
//-->
</script>

The above javascript will check each of the comments. If a comment is below the threshold, the comment will be hidden and the section from Step 3 above will be displayed instead.

Step 6 - Rebuild your individual archives and test it!

The customized individual archive template used in this example on the test entry can be found here.

The above example is only one way to implement comment thresholds on your site using Ajax Rating Pro. You can customize the above to meet your needs. You can even edit the javascript and CSS elements to customize things further.

Another Built-in tool is the <MTIfAjaxRatingBelowThreshold> conditional tag. You can use this tag inside an <MTComments> container. Anything between <MTIfAjaxRatingBelowThreshold> and </MTIfAjaxRatingBelowThreshold> tags will not be inlcuded in the HTML of the page. (Note that the score is checked against the default threshold when the page is rebuilt, or if you are using PHP dynamic publishing, when the page is displayed). For example, if you wanted to completely hide comments below the default threshold, you could do something like this:

<MTComments>
<MTIfAjaxRatingBelowThreshold>

.....comment template code here......

</MTIfAjaxRatingBelowThreshold>
</MTComments>

Note that if you use this tag, you won't be able to provide a link to display the comment like in the example above.

Another way to use this tag might be to apply certain filters to comments below the default threshold. For example you might want to remove HTML from comments below threshold:

<MTIfAjaxRatingBelowThreshold>
<MTCommentBody remove_html="1">
<MTElse>
<MTCommentBody>
</MTIfAjaxRatingBelowThreshold>


I hope that the example above provide a few examples of how you can implement comment threshold viewing, and perhaps inspire a few ideas for unique ways to do so.

To get Ajax Rating Pro, or for more information, click here.

In this article I will cover some of the more advanced features of the Ajax Rating plugin. Ajax Rating is rating plugin for Movable Type that makes it easy for readers to rate entries, comments, and more. If you haven't read about Ajax Rating yet, you should read this first, and then come back to read this article afterwards.

Covered in this article:

Custom images for star and thumb raters
Using custom raters
Dynamically updating numeric ratings and vote counts
Setting up comment raters
Rating non-MT objects

Custom images for star and thumb raters

Whether you are using Ajax Rating or Ajax Rating Pro, you can use alternative images for rating items. For star/point raters, the image must be named "starrating.gif". The image should be a "three state" image. For example, here is the default image that comes with Ajax Rating (design credit to Ryan Masuga):

Note that the image has 3 stars, appearing one on top of the other. As such, the height of the image should be 3 times as long as the width. The default image, above, is 30 pixels wide by 90 pixels high. The star at the top is the "empty star", the star in the middle is the "hover star" (the color of the star when you hover your mouse over it), and the bottom star is the "current rating star". Of course, the images don't have to be "stars" at all -- you could use images of hearts, checkmarks, boxes, or bananas. As an example, Ajax Rating comes with an alternative star image called 'starrating16x16.gif' that looks like this:

Note that this image is 16 pixels wide and (16 times 3 equals) 48 pixels high. if you want to use this image, you can rename it 'starrating.gif'.

After you have the image you want, make sure it is named starrating.gif and then upload into the /mt-static/plugins/AjaxRating/images/ directory on your server.

The final (but important) step is to browse to the Ajax Rating settings for your blog and enter the width on your new image into the "Star Icon Width" field. Save your settings and then rebuild the Ajax Rating javascript and styles index templates. Finally rebuild all your pages with star raters.

To use custom image with Thumb Raters (Pro feature), the process is much easier. The only rule is that you have to name your images "up.gif" (+1 point) and "down.gif" (-1 point). You make them any size that suits your needs. Upload the new images to the /mt-static/plugins/AjaxRating/images/ directory and you are done (no need to rebuild any pages).

Creating Custom Raters

The previous section explains how to customize the look of the raters that appear when you use the convenient <MTAjaxStarRater> and <MTAjaxThumbRater> tags. You are not limited to those raters, however. You can create your own custom raters.

For example, here is a simple rater that consists of a "Vote For This Entry!" text link:

<a href="#" onclick="<$MTAjaxRaterOnclickJS points="1" type="entry"$>">Vote For This Entry!</a>

The above example illustrates the key elements of rating link. Set the href equal to "#" and include an onclick= argument. The special MTAjaxRaterOnclickJS tag helps you fill the javascript required to capture the vote. They key argument here is the "points" argument -- use this to specify how many points get assigned when someone clicks that link.

To expand the above example, here is a 5 point rater using text links instead of images:

<a href="#" onclick="<$MTAjaxRaterOnclickJS points="1" type="entry"$>">1</a> <a href="#" onclick="<$MTAjaxRaterOnclickJS points="2" type="entry"$>">2</a> <a href="#" onclick="<$MTAjaxRaterOnclickJS points="3" type="entry"$>">3</a> <a href="#" onclick="<$MTAjaxRaterOnclickJS points="4" type="entry"$>">4</a> <a href="#" onclick="<$MTAjaxRaterOnclickJS points="5" type="entry"$>">5</a>

Tip: if you want your customer rater to disappear after a vote, surround in a div or span element with an "id" in the following format "thumb{type}{id}", replacing {type} and {id} with the type and id of the object being rated. For example:

<span id="thumbentry105"> ...rater goes here </span>

Dynamically updating numeric ratings and vote counts

Often you will want to display numeric representations of ratings and vote counts on your pages. Consider the following example, which shows box a star rating and the average rating and vote count:

<$MTAjaxStarRater type="entry"$>
Rating: <$MTAjaxRatingAverageScore type="entry"$>/<$MTAjaxRatingEntryMax$> (<$MTAjaxRatingVoteCount type="entry"$> votes cast)

Notice when you make a rating with the above rater, the average rating and vote count numbers get updated dynamically. The trick to doing that is to surround those numbers in "span" tags. Here the template code for the above example:

<$MTAjaxStarRater type="entry"$>
Rating: <strong><span id="ajaxrating_entry_<$MTEntryID$>_avg"><$MTAjaxRatingAverageScore type="entry"$></span></strong>/<$MTAjaxRatingEntryMax$> (<span id="ajaxrating_entry_<$MTEntryID$>_cnt"><$MTAjaxRatingVoteCount type="entry"$></span> votes cast)

First looking at MTAjaxRatingAverageScore, the "id" of the span must be in the format id="ajaxrating_{type}_{id}_avg". For an entry with an id of 105, that would be id="ajaxrating_entry_105_avg". Using MT template tags in this example, you can do it as follows:

<span id="ajaxrating_entry_<$MTEntryID$>_avg"><$MTAjaxRatingAverageScore type="entry"$></span>

For MTAjaxratingVoteCount, the process is the same, but the id ends in "_cnt" instead of "_avg". So the template code becomes:

<span id="ajaxrating_entry_<$MTEntryID$>_cnt"><$MTAjaxRatingVoteCount type="entry"$></span>

If you wanted to dynamically update MTAjaxRatingTotalScore (not shown in above example), the id should end in "_ttl":

<span id="ajaxrating_entry_<$MTEntryID$>_ttl"><$MTAjaxRatingTotalScore type="entry"$></span>

Setting up comment raters

With Ajax Rating Pro you can rate comments and other objects. Setting up comment raters is similar to entry raters. While you can use star raters or thumb raters, many people will prefer to thumb raters for rating comments, so my example will focus on these.

To add a thumb comment rater, place the following in suitable place in a <MTComments> container:

<MTAjaxThumbRater type="comment">

(Optionally, you could include a report_icon="1" argument to display a third button, that will enable readers to report comments to entry authors)

Rating non-MT objects

With Ajax Rating Pro, you can even create raters for non-MT objects. For example, suppose I have five photos in my sidebar, and I want people to be able to rate them. The rules for rating non-MT objects are as follows:

  • choose a unique "type" of object (don't use the reserved names like 'entry', 'comment', etc.)
  • create a unique numeric id for each specific object you want to rate.

In the sidebar photo example, let's choose the type "sidebarphoto" and give each photo a numberic id from 1 to 5. For the first photo, I would use the following code to display a star rater:

<$MTAjaxStarRater type="sidebarphoto" id="1" max_points="5"$>

...and the second photo would be:

<$MTAjaxStarRater type="sidebarphoto" id="2" max_points="5"$>

... and so on.

Also note that the discussion above about dynamically updating ratings and vote counts also applies to non MT objects -- just be sure to use your chose "type" and "id" values in the span ids.


The features above are just a few advanced ways to use Ajax Rating. To get Ajax Rating, or to learn more, click here.

Look forward to the next article (soon) on Ajax Rating: Setting Comment Threshold Viewing.

Update 2/11/2007: Also see these new articles on Ajax Rating:

Ajax Rating is a plugin for Movable Type that enables visitors to rate your entries or your blog.

Try it now by rating this blog:
<$MTAjaxStarRater type="blog" max_points="5" id="22"$>

The "Pro" version of Ajax Rating lets you rate comments, trackbacks, categories, authors, tags, and just about anything else. Added features include threshold viewing for comments based on rating, listing "hot" items, and comment reporting. More details on the Pro version below.

Ajax Rating is easy to setup and use. After downloading the plugin and installing the files, a few simple changes to your templates will enable you to adding Ajax Star Raters to your entries. For example, just add <MTAjaxStarRater type="entry"> to after the <MTEntryBody> tag and you are done - instant Ajax Star Ratings.

Download Now

,<$MTAjaxRatingVoteCount type="ajaxratingdownloads" id="1"$>,0);">Download Now (Ajax Rating for Personal Use)
Downloads: <$MTAjaxRatingVoteCount id="1" type="ajaxratingdownloads"$>

Ajax Rating Pro

Ajax Rating Pro has a lot more features:

  • Thumbs up /down (or plus/minus) rating modes
  • Display listings of top rated items
  • Rate comments and other objects
  • Hide comments below a certain rating threshold
  • Enable visitors to choose their own threshold
  • Include a button for reporting spam or inappropriate comments
  • Display "hot lists" based on recent voting activity

Digg-like Functionality

The "hot lists" feature mentioned above is one of the most powerful features of Ajax Rating. It can be used to enable Digg-like functionality, in which your home page can be set to display only the items that are "popular now". Used this way, the ratings become a filter for the content you feature on the home page. If you have a site or blog network with new entries be added frequently, this feature is especially useful. In a typical blog-format home page, entries get pushed lower down the page every time a new one is posted, so even popular entries can get pushed off the home page quickly on a busy site. Ajax Ratings gives you an alternative to this, displaying the hottest entries first, as determined by visitor rankings. This is automatic, and you can define the "hot" time frame (1 day, 3 days, 2 weeks, etc.). Ajax Rating hot lists can really change the dynamics of a site, and may inspire ideas for new ratings-driven sites.

Comment Viewing Threshold

Sites like Slashdot, Scoop-powered sites, and Digg have a similar feature, which hides comments if they are below a certain rating or score threshold. Referred to as a comment viewing threshold or a "collaborative filtering tool", the idea is to display top-rated comments prominently, while hiding or collapsing lower rated comments. With the Ajax Rating plugin, it is possible to do this with Movable Type comments. The plugin is very flexible in how you want to set this, but a common approach might be to enable readers to vote each comment "up" or "down" (plus or minus, thumbs up, thumbs down, etc.). A vote up would equal +1 point and a vote down would equal -1 point. You then set a default viewing threshold. For example, you might choose -10 as the default, meaning that comments with a total score of less than -10 will appear collapsed (or partially or completely hidden, you choose). Collapsed comments can be displayed with a single click. You can also include a form that enables readers to set their own threshold level. Again, this is very customizable, you decide how you want things to work on your site. Take a look at this test entry, which demonstrates both a Star Rater (for the entry) and Plus/Minus comment threshold viewing (for the comments). Set your own threshold using the form at the bottom of the comments and see how the display changes. Similar to the hot list described, above comment viewing thresholds are another way to transform the display of your content based on user ratings.

Rate Anything

Another advanced feature is the ability to rate anything at all. In addition to rating MT objects like entries, comments, categories, authors, and blogs, you can also use Ajax Ratings to rate other things. For example, if you want to create a rater for a movie or book, you can do that. (Example: <$MTAjaxStarRater type="movie" id="23" max_points="5$> -- just remember what movie you assigned the ID 23 to....)

One Vote per IP Address

To prevent people from voting multiple times on the same item, only one vote is accepted per IP address per item.

Template Tags

Template tags for Ajax Rating are available for both static and dynamic (php) publishing.

The following template tags are available in Ajax Rating (free version):

  • <MTAjaxStarRater> - This tag will output a star rater like the one shown above. To rate entries, it must be used in an Entry context (ie. between <MTEntries> and </MTEntries> tags or in the Individual Archive Template. A good spot is just after the <MTEntryBody> tag. The following arguments are supported:
    • type - Recommend (but not required) when rating entries and required when rating a blog. (Example: <MTAjaxStarRater type="entry"> or <MTAjaxStarRater type="blog"). With Ajax Rating Pro, you can also specify the following types: comment, category, author, tag, trackback, or anything else (see "rate anything" above).
    • max_points - Not required for entries and comments, but required for other types. This argument specifies the number of stars that will be displayed. (Example: <MTAjaxStarRater type="blog" max_points="5"> will create a rater with 5 stars)
    • id - For advanced use, the id argument enables you specify a specific object ID number that you want to rate. If you use the tag in the correct context, you don't need to include the 'id' argument. But if you want to place a rater outside of the relevant context, or if you want to rate a non-MT object (see "rate anything" above), then you must specify the id of the object. Normally, you don't want to use this, so forget I mentioned it. ;)
  • <MTAjaxRatingTotalScore> - This will display the total score for the item being rated (adding up the values of all of the ratings made).
  • <MTAjaxRatingAverageScore> - This will display the average score for the item being rated.
  • <MTAjaxRatingVoteCount> - This will display the number of votes or ratings that have been submitted for this item.
  • <MTAjaxRatingEntryMax> - This will display the maximum number of points (stars) for rating entries, as specified in the plugin settings for that blog.

With Ajax Rating Pro, the following tags are also available (in addition to those described above):

  • <MTAjaxRatingList> - A general purpose container tag for displaying listings of "top rated" items in the MT database. The following arguments are available:
    • type - Required. Allowed values are: entry, comment, trackback, category, blog, author, tag. Tip: do not pluralize these types.
    • sort_by - Determines which metric is use to rank the results. Allowed value are: average, votes, total. The default is sorting by total score.
    • sort_order - The sort_order defaults to 'descend' (highest rating first), but you could also specify 'ascend' to show the worst rated items first.
    • blogs - To display a list of items from all blogs on the system, specify blogs="all". Otherwise, leave this out and the list will be restricted to the current blog.
    • show_n - Use this argument to specify the number of items you want to list (the default is 10). (Example: <MTAjaxRatingList type="entry" show_n="15">)
    • hot - Set 'hot' equal to 1 to generate a list of recently "hot" items (this is the powerful feature discussed above). When the 'hot' argument is set to 0 or omitted, the listing will be based on "all time" ratings data. Adding hot="1" will based the listing on recent voting activity only.
  • <MTAjaxRatingEntries> - Same as <MTAjaxRatingList type="entry">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxRatingComments> - Same as <MTAjaxRatingList type="comment">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxRatingPings> - Same as <MTAjaxRatingList type="trackback">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxRatingCategories> - Same as <MTAjaxRatingList type="category">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxRatingBlogs> - Same as <MTAjaxRatingList type="blog">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxRatingAuthors> - Same as <MTAjaxRatingList type="author">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxRatingTags> - Same as <MTAjaxRatingList type="tag">. Same arguments as MTAjaxRatingList, but the 'type' argument is not required.
  • <MTAjaxThumbRater> - Instead of a star rater, this tag will display a thumbs up/down (or plus/minus, etc.) rater. With this type of rater, there are images for voting an item "up" or "down". A vote "up" is equal to 1 point, a vote "down" is equal -1 point. The following arguments are available:
    • type - Recommend (but not required when used in an entry or comment context). (Example: <MTAjaxThumbRater type="comment">). The same types can be used as described for <MTAjaxStarRater> above.
    • id - Same (advanced) usage as described for <MTAjaxStarRater> above.
    • report_icon - This optional argument will display a third button, a "report" button, when used with comment raters. Visitors to your site can click this button to report the comment (for abuse, spam, profanity, etc.). When a comment is reported, an email is sent to the author of that entry, along with a link to edit the comment in question.
  • <MTAjaxRaterOnclickJS> - In addition to the convenient star and thumb raters, you can create your own rater. This tag makes it easier. To enable a rating button (or text link), you need to specify a javascript onclick event. This tag fills in the details. For example suppose you wanted to create a single voting text link for each entry - you could do so as follows: <a href="#" onclick="<$MTAjaxRaterOnclickJS type="entry" points="1"$>">I like it!</a>). Arguments include:
    • type - Recommended (but not required when used in an entry or comment context).
    • id - Same (advanced) usage as described for <MTAjaxStarRater> above.
  • <MTAjaxRatingCommentMax> - This will display the maximum number of points for rating comments, as specified in the plugin settings for that blog.
  • <MTAjaxRatingDefaultThreshold> - This will display the default threshold for viewing comments, as specified in the plugin settings for that blog.
  • <MTIfAjaxRatingBelowThreshold> - This is conditional tag whose contents will be displayed if the comment is below the default threshold, as specified in the settings. Note that this tag does not apply to user-specified thresholds (more on those later).
  • <MTAjaxRatingRefreshHot> - WARNING: You should not use this tag if you have a busy site with high-volume voting activity. This a special tag, it displays no ouput. It simply triggers the process of calculating the list of "hot" items. Note that "hot" list are not tabulated when the listing tags are rebuilt. For performance reasons, this process happens separately, usually via an MT scheduled task that runs automatically (approx) once every hour. If, for some reason, you want to manually refresh to the "hot" list, you can place the <MTAjaxRatingRefreshHot> tag into an index template and rebuild it (be sure to uncheck the "rebuild this template with indexes" box!). Again, this should be used carefully on busy sites, and usually not at all. The "hot" list can also be refreshed via an included cron script (more on this later).
Ajax Rating Settings

The settings for Ajax Ratings looks like this:

The blog settings for Ajax rating Pro looks like this:

Ajax Rating Pro also has a setting that is set only at the system level (Go to System Overview > Plugins). The system setting looks like this:

One of the notable settings is the "Rebuild After a Vote" option. High traffic site with high-volume voting should be careful with this setting. Generally speaking rebuilds can consume a lot of processor cycles, and a significant rebuilding after votes could slow things down, depending on several factors. The best performance option is "No Rebuilds" -- if you choose this option, the page will get update with the reader's vote immediately, but if this refresh the page, their vote won't be reflected (because the page has not yet been rebuilt). In this mode, ratings and votes counts get recorded into the database, but are not reflected on your pages until those pages are rebuilt (such as after a comment is posted to the entry, or manually rebuilt). If you have a site with high volume voting, chances are that you also have high-volume commenting -- if this is true, use the "No Rebuilds" option here and your entries will still be rebuilt every time a comment is posted. The second option here is "Rebuild Entry Only" -- this will only rebuild the Individual Archive template(s) for that entry (or if the vote is for a category, it will only rebuild the relevant category archive page) -- performance-wise, this option is not too bad. The third option is "Rebuild Entry, Archives, Indexes" -- this is the same level of rebuilding that happens when a comment is posted. It is the worst option performance-wise, as many pages may be rebuilt (the individual archive page(s), each of the category pages for the entries categories, any date-based archives enabled, and every index template in your blog. Be careful with this one on high-traffic blogs. The final option is "Build Indexes Only", which will only rebuild your index templates. This option might be suitable if you are only using the "Rate This Blog" widget (more on this later) on your main index. Note that if you are using PHP Dynamic publishing, there is no issue with rebuilds, you can set this to "No Rebuilds" and ratings will always be reflected correctly each time the page is loaded.

Requirements

MT 3.2+

(Note: If you are running 3.3+, installation will be much easier, as the database tables will be automatically created for you. If you are running 3.2, you will need to create the tables manually - or via a utility like phpMyAdmin)

Installation Instructions

  1. Expand the zip file.
  2. Upload the contents of the 'plugins' directory to the 'plugins' directory of your MT install (usually /cgi-bin/mt/plugins)
  3. Upload the contents of the 'php' directory to the 'php' directory of your MT install (usually /cgi-bin/mt/php)
  4. Upload the contents of the 'mt-static' directory to the static directory created when you installed MT (usually called 'mt-static')
  5. Change the permissions on the mt-vote.cgi and mt-report.cgi (Pro only) files found within /plugins/AjaxRating/ to 755 (CHMOD 755)
  6. Login to Movable Type (or if already logged, click "Main Menu")
  7. If your are running MT 3.3+, you should now be redirected to an Upgrade screen that will install the tables for Ajax Rating. If you are running MT 3.2, then you need to create the tables manually, using the ajaxrating.sql file to create these tables.
  8. After the tables have been created, browse to the settings (Settings->Plugins) for the blog you want. Choose the settings that you want and then save.
  9. Return to the settings and click the "Click here to install the Ajax Rating templates for this blog" link. This will install the javascript and styles index templates and rebuild them automatically. (Note: if you change you settings in future, remember to manually rebuild this index templates afterwards)
  10. For every template for which you plan to place raters, add the following between the <head> and </head> tags:
  11. <script type="text/javascript" src="<MTStaticWebPath>prototype.lite.js"></script>
    <script type="text/javascript" src="<MTStaticWebPath>moo.ajax.js"></script>
    <script type="text/javascript" src="<MTBlogURL>ajaxrating.js"></script>
    <link rel="stylesheet" href="<$MTBlogURL$>ajaxrating.css" type="text/css" />

  12. Now you can place raters to meet your needs. Most people may want to add something like the following below the <MTEntryBody> tag:
  13. <$MTAjaxStarRater type="entry"$>
    Rating: <strong><span id="ajaxrating_entry_<$MTEntryID$>_avg"><$MTAjaxRatingAverageScore type="entry"$></span></strong>/<$MTAjaxRatingEntryMax$> (<span id="ajaxrating_entry_<$MTEntryID$>_cnt"><$MTAjaxRatingVoteCount type="entry"$></span> votes cast)

  14. Add the included Ajax Rating widget to your sidebar. This will display a "Rate this Blog" section that will enable people to rate your blog. (Optional)

  15. Test it out and tell people they can start submitting votes!

For more advanced usage, I am going to post a separate article soon, covering topics such as custom raters, comment threshold setup, customizing the star and plus/minus buttons, and more.

Get Ajax Rating

Ajax Rating is free for personal use, but you must include a link on your home page to https://mt-hacks.com/ajaxrating.html, such as:

Ratings on this site are powered by the <a href="https://mt-hacks.com/ajaxrating.html">Ajax Rating</a> plugin for Movable Type.

Download Now

,<$MTAjaxRatingVoteCount type="ajaxratingdownloads" id="1"$>,0);">Download Now (Ajax Rating for Personal Use)
Downloads: <$MTAjaxRatingVoteCount id="1" type="ajaxratingdownloads"$>

A lot of effort went into this plugin, donations are much appreciated. Suggested donation is $10:

If you wish to use Ajax Rating for commercial use, a commercial license must be purchased for $25:

Get Ajax Rating Pro

Ajax Rating Pro Regular License (1 to 10 blogs)

A regular license for Ajax Rating Pro enable you to use Ajax Rating Pro on up to 10 blogs on a single MT installation. The cost is $249:

">

Ajax Rating Pro Blog Network License (10+ blogs)

If you want to use Ajax Rating Pro on more than 10 blogs on a single MT installation, you can purchase a "Blog Network License". The blog network license is for unlimited blogs on the same install, and includes up to 2 hours of implementation consulting and a custom multi-blog installation script. The multi-blog installation script can be customized to meet your needs (subject to the 2 hours of consulting time) and includes setup of settings and installation of templates for each blog. The blog network license is $499.

">

Rater Images and CSS Styles

I did not design the default star graphic used with this plugin, and I did not craft the CSS styles that make it look and work so slick. Much credit for both of these elements goes to Ryan Masuga of Masuga Design. Ryan's Unobtrusive AJAX Star Rating Bar has been downloaded more than 12,000 times! Thank you Ryan.

The plus / minus images, on the other hand, I did design .... and it shows. Graphic design is not my forte. As mentioned above, you can swap out your own images for both types of raters (more on that soon). If anyone out there want to design some better button images, please do! Thumbs up and thumbs down images would be cool, and maybe a better plus/minus set as well. If you design some buttons you want to share, let me know I will post them here or include them with Ajax Rating (giving you credit of course).

Future Features

In the future Ajax Rating Pro will be enhanced even further. If you purchase a license for Ajax Rating Pro, you can help steer the development of new features. I see a lot of potential for this plugin with very active blog sites, and blog networks in particular -- and new features will likely be in this area. Here are a few ideas that may be worth adding if customers are interested:

  • more sophisticated "hot" list algorithms - making this more sophisticated and customizable, so you can fine tune everything to make sure that the popularity filter is promoting those items that help build community and create buzz
  • score summary for authors and commenters - look at which authors have the highest and lowesst rated entries (maybe offer prizes or compensation based on ratings), also look at summarized raters for each commenter, possibly triggering automatic or manual review when commenters have continually poor ratings (troll meter)
  • displaying rating and vote information on the MT admin screens
  • notification thresholds that will flag comments below thresholds, or even rules that automatically unpublish them pending review.

As always, comments, feedback, suggestions are welcome. Please reply to this entry.

Update 2/11/2007: Also see these new articles on Ajax Rating:

Entry Post is a plugin that enables visitors to post entries to Movable Type via an external form. To get Entry Post, or for more information, click here.

Entry Post can be used in many different ways, using the many options available. This entry provides some tips on a few usage scenarios, and may inspire a few ideas for other ways that it can be used.

Displaying Information about Entry Posters

If you want to display information about the person who submitted an entry, you can use the following template tags. (Note: these template tags are provided by the CustomFields plugin, which is a requirement for Entry Post v1.0)

<MTEntryDataName> - The Name of the poster.
<MTEntryDataEmailAddress> - The email address of the poster.
<MTEntryDataURL> - The URL provided by the poster, if any.

For example, if you wanted to display a linked name, you could use the following code:

<MTIfNonEmpty tag="EntryDataURL">
<a href="<MTEntryDataURL>"><MTEntryDataName></a>
<MTElse>
<MTEntryDataName>
</MTElse>
</MTIfNonEmpty>

But suppose you are entries that could be posted via Entry Post or posted by an Author in the system. The following code can be used to simulate the "Posted by..." line from the MT 3.3 default templates:

click here for the template code

Displaying an Image Submitted by the Poster

If you are enabling posters to submit an image, you can display the image using the following template code:

<MTIfNonEmpty tag="EntryDataImage">
<img src="<MTBlogURL><MTEntryDataImage>">
</MTIfNonEmpty>

Requiring Moderator Approval before Publishing

If you don't wanted entries to be published immediately, you can choose "Unpublished" as the "Default Status" in the settings for this plugin. In such cases, you may want to include a hidden "redirect" field on your form. Here is an example:

<input type="hidden" name="redirect" value="https://mt-hacks.com/thankyou.html">

When Entry Post finds a redirect URL in the submitted form, it will redirect the poster to that URL after the submission has been received. The redirect page can be any page, usually with some text thanking them for their submission, that it is pending moderator approval, etc. This is also very useful when using MT as a contact form (see below).

Using Entry Post as a Contact Form

An advanced usage of Entry Post is a contact form. A contact form is a form which accepts information from the poster and then sends you the results via email. In a business context, this is sometimes referred to a "lead from". To make the plugin work this way, there are two important settings. First, ensure that email notification is turned on in the settings, and make sure that an email address is entered. Second, check the "Disable Entry Creation" setting: this will prevent an entry from being created. While contrary to the primarily purpose of the plugin, this options converts the form into a contact form, only sending you the submission by email. Using a form is better than posting your email address on your site, as email address harvesters will find your email address and you will get (even more) spam in your inbox. When using Entry Post in this way, it is a good idea to add a hidden 'redirect' field, as discussed in the previous section. An example of an Entry Post contact form can be seen here (view the HTML source to seem what the form looks like, including the hidden fields at the top).

Overriding Default Settings

Depending on your needs, there may be some case where you want to override some of the default settings. One reason you might want to do this, is when you would like to include more than one EntryPost form on the same blog, each with a different purpose. For example, one for entry submissions and another as a contact form. The following settings can be overridden by fields in form:

Default Category - If a form includes a field (hidden or visible) named 'cat_id', the value of that field will be used as the Category ID for the entry to be placed in. You could include a hidden cat_id field and assign a category ID, or create a visible dropdown box so that the poster can choose a category (an example of the latter can been seen here with template code found here.)

Default Tags - Similar to above, the default tags can be overridden by including a field named 'tags' in your form. A tags example is also present on the form and code linked to above.

Disable Entry Creation - If you include a field called 'no_entry' and set its value to 1, then no entry will be created when the form is submitted. This field is useful as a hidden field when you want to create a contact form using Entry Post, but also want to have another form for submitting entries. An example on my contact form on this site.

Creating a Contact Author Form

The Contact Form technique described above is useful, but what if you have more than one Author, and you want people to be able to contact each of them? Entry Post has an advanced feature that addresses this. In addition to the above overridable fields, the Notification Email Address field can also be overridden. However, including authors' email addresses in a hidden form field does not protect their privacy, and will certain lead to more email spam. For this reason, you need to include a field called 'email_author_id' and then assign the MT Author ID of the author to send the email to. Entry Post will take the email_author_id and look up the author's email address in the MT database, and send the email to that author. Similar to categories, this can be a hidden field, but it may make more sense as a dropdown box, enabling visitors to choose the Author to contact.


I hope the above tips and tricks are useful, and perhaps inspire creative uses for Entry Post. If you have questions or suggestions, please reply to this entry. To get Entry Post, or for more information, click here.

Entry Post is a plugin for Movable Type that enables visitors to your site to submit entries using a form. Visitors do not need a user account and they do not need to login. Similar to posting a comment, they can simply fill in a form and submit.

Update 1/23/07: Entry Post now works with MT 3.2 as well as MT 3.3.

I have been using external forms and scripts to do this for several years. Examples include Mars Rover Forum and Seinfeld Forum. These MT-powered forums enable forum members to post new topics (entries) using an external form. Based on this experience, I have converted the entry posting script into a plugin -- and added a bunch of additional features.

Basic Features

  • enable visitors to post entries to your blog
  • new entries can be set to "Published" or "Unpublished" (pending admin/moderator review)
  • supports TypeKey authentication (optional)
  • entries can be scanned against MT's Junk Filters
  • entries can be previewed before posting
  • email notifications of new entry submissions
  • entries can be added to a category (set a default or allow poster to choose)
  • entries can be tagged (default list of tags, or specified by the poster)
  • included default templates include spam-protected form

Advanced Features

  • enable posters to upload an image with the entry
  • other entry fields supported (Extended Entry, Excerpt, Keywords)
  • option to disable rebuilds when an entry is posted
  • option to disable entry creation (makes the form work as a 'contact me' form with email notification turned on.)
  • xml response option

Try Entry Post Now

I have setup an Entry Post test blog that you can use to submit test entries. You can use one of two forms:

  1. Basic Form (default form installed with Entry Post)
  2. Advanced Form (and example form to demonstrate advanced features)

By using the forms above, you will quickly get an idea of the visitor experience with Entry Post. In its simplest form, it is very similar to posting a comment.

The Administrator Experience

Entry Post has been designed to be easy to install and configure. Simply upload the files, change some file permissions, then configure the plugin via the Plugin Settings for each blog. Required templates are installed with a single click (which can then be customized, if desired).

The settings area for Entry Post looks like this:


By using the above settings, you can configure most of the features of Entry Post.

Requirements

  • MT 3.2+ (Note: The tags and TypeKey login features require MT 3.3+)
  • CustomFields Plugin - Version 1.22 - To store and display information about entry posters, the CustomFields plugin (from Movalog) is required. Using this plugin, the Name, Email, URL, and IP address of the poster will be visible on the "Edit Entry" screens, and template tags can be used to display these values on your site. In the unlikely case that you don't want either of these features, then EntryPost will still work (entries will be posted, email notifications sent, etc.) A portion of all sales of Entry Post will be donated to Movalog. Note that CustomFields version 2.x is not currently supported.

Installation


  • Download the zip file and extract the contents.

  • Upload the "EntryPost" directory (and all its sub-directories and files) to your MT 'plugins' directory.

  • Change the file permissions to 755 (CHMOD 755) for the EntryPost/mt-entrypost.cgi and EntryPost/signin.cgi files.

  • Login to MT and go to the 'Settings' area of a blog and choose the 'Plugins' tab. Then click the "Settings" link for EntryPost. You should now see the available settings for EntryPost, as shown above.

  • Enable the plugin by checking the Enable checkbox, choose other settings, and the save the settings.

  • Return to the EntryPost settings and install the templates by clicking the provided link. After the templates have been created, you can customize them, if desired, to suit your needs or match your site design. The primary template is an index template called "EntryPost Submit Page" - this page includes the form to post entries.

  • You will probably now want to provide a link to the Submit Page from your main index. One way to do this is to use the provided "EntryPost Submit Link" widget (using WidgetManager). Alternatively, you can manually create a link such as <a href="<MTEntryPostSubmitPage>">Submit an Entry</a>.

Get Entry Post

Commercial License - $97

If you site or blog is for-profit, a commercial license is required. The license includes all future updates to Entry Post and priority feature requests.

Personal License - $33

For use on a personal site or blog, a personal license is required. The license includes all future updates to Entry Post.

If you would like to use Entry Post on a non-profit or charity site, please contact me.

Live Demo

If you are interested in purchasing EntryPost, but would like to try it first, that can be arranged. To experience the poster side of things, visit the Entry Post test blog using the links provided above. If you would like to login to see the admin interface, please contact me.

As always, feedback, suggestions, and product questions are appreciated. Please reply to this entry.

Two months ago I posted about the CPU load effect of Comment and Trackback spam. In short, even when most of the spam gets correctly marked as junk, it can still have a major impact on the CPU load and memory usage of the server. This can make everything else run slower, and some web hosts may threaten to disable your account for hogging CPU resources.

Spam Firewall is a plugin for Movable Type that can help reduce this load. The goal of Spam Firewall is to block 80% of spam attempts before they reach MT's comment and trackback scripts. As the name suggests, it acts like a firewall protecting your MT scripts.

How Spam Firewall Works

Spam Firewall creates a PHP script that acts as a firewall. Once installed, when comments or trackbacks are posted, they get posted to the PHP firewall script. The firewall script will then scan the the request against a "Top 40" list of common spam patterns. If the request matches, things stop right there. If the request passes the test, it gets forwarded to MT for processing in the normal manner. Most spam is blocked quickly, without consuming large amounts of CPU and memory.

The Top 40 List

The key to Spam Firewall is a "Top 40" list of common spam patterns. The 40 spam patterns (rules) released today represent 80% of the spam that I have received in the past 8 days. Of a total of 14,405 spam attempts, this Top 40 list matches 11,541 of them (80.1%). The list is based on real spam attempts from the past week. I plan on updating the Top 40 list regularly.

Requirements:

  • MT 3.2+
  • PHP (Note: you do not need to enable MT's dynamic publishing to use Spam Firewall, but your server must support PHP scripts -- most do)

Instructions:

  1. Download the zip file and extract its contents.
  2. Within the main 'Spam Firewall' directory, there are two folders, one names 'plugins' and one named 'php'. Upload both of these folders (including sub folders and files) into the same directory as Movable Type (often /cgi-bin/mt).
  3. Go to 'Settings' on the blog you want to setup, then choose 'Plugins', then choose the 'Settings' link under "Spam Firewall". Then click the "Click here to install the Spam Firewall Template for this blog" link. This will install the Spam Firewall index template and rebuild it. Advanced users can change the Output File name if desired, but you should not change the Name of the template.
  4. (Optional, but highly recommended) Rename your comment and trackback scripts [More Info]. Because Spam Firewall hides the name of these MT scripts, now is a very good time to rename them.
  5. To setup Spam Firewall for comments, you need to change the comments submission form to point to the firewall script. Go to your Individual Archive Template and look for the following:

    action="<$MTCGIPath$><$MTCommentScript$>"

    and replace it with:

    action="<$MTBlogURL$><$MTFirewallCommentScript$>"


  6. To setup Spam Firewall for trackbacks, look for the <$MTEntryTrackbackData$> and replace it with <$MTFirewallTrackbackData$>. Also, look for the <$MTEntryTrackbackLink$> and replace it with <$MTFirewallTrackbackLink$>.

  7. Rebuild all individual archives.

Download Spam Firewall

Non-commercial use - FREE ( In exchange for the free use of this plugin, I ask that you install the MT Plugin Network plugin. Plugin Network will help keep you up to date on the latest version (and rules) of Spam Firewall and other useful plugins. [more info])

Also, donations are appreciated:

Commercial use - $97.00

Download Now

SpamFirewall.zip

As always, suggestions and feedback are appreciated. Please reply to this entry.

MT Plugin Network is a plugin for Movable Type that provides links to the latest plugins and tools, from within the MT administration interface:

MT Plugin Network is collaborative effort by a growing list of plugin developers. When plugin developers release new or updated plugins or tools, they will be added to list of recent MT Plugins and Tools. This way you can quickly and easily stay on top of the latest plugins for Movable Type.

Download Now

Click here to download MT Plugin Network v1.0

Instructions

Unzip the PluginNetwork.zip file and upload the contents to your plugins directory within your Movable Type installation (often /cgi-bin/mt/plugins/). After uploading, MT Plugin Network is installed.

In the near future, many of the free plugins released by MT Hacks will have MT Plugin Network included in the download files. As a condition of the free use of the software, I ask that you also install PluginNetwork. It is a great way to keep up to date on new and updated plugins from MT Hacks, as I will be posting all future updates to the Plugin Network announcements box.

Are you a plugin developer? If you would like to join the MT Plugin Network and include your plugin announcements in the "MT Plugins and Tools" box, please send an email to plugins at mtpluginnetwork.com.

While there are many strategies for blocking, filtering, and reducing blog spam, many of them don't due much to reduce the CPU load incurred to handle all that spam. Even if you have strong MT spam filters, or close comments on your entries, spam may continue to cause increased CPU load, even if the spam is rejected or filtered.

As far as spammers are concerned, the automated ones don't care much (or even realize) that comments are closed on your entries. And they don't take the time to see if their attempts were junked or pubished. They will continue to submit comment spam and trackback spam. MT will refuse them, of course, but the entire MT application loads on every attempt -- the MT cgi scripts still incur load in process these, but likely not as much as a junked or successful comment submission. The main benefit to closing comments and using MT junk filters is to reduce / remove the clean-up effort, and to keep spam from be published on your blog. You end up with less published spam, but I am not sure how much CPU load is saved in these cases.

To address the CPU load of spam, you need to prevent/reduce spam hitting the MT cgi scripts. A temporary solution is to rename your comments and trackback scripts. Spammers will still try to hit the old URLs, but they will get 404 "not found" errors. This still incurs some load, but not as much as if MT had to handle those requests to reject or filter them. This solution is temporary because spammers will soon learn the new names of your scripts, and spam and load will increase thereafter.

A longer term solution is to attempt to block spam *before* it hits the MT scripts. mod_security is one way to do this. It is an Apache module that uses rule-based filters to block requests at an early stage. You still need a good ruleset, of course. In many, case you will need a dedicated server to use this, but some shared hosting providers support mod_sec to varying degrees. In recent days, spam attempt have increased on my server. Yesterday, mod_security blocked almost 4,000 spam attempts. Without mod_security, that would have been a lot for MT and my dedicated server to handle. My server would likely have crashed several times. But my blocking the spam before it gets to my MT scripts, I was able to weather the attack without a huge spike in CPU load.

Fast Search is a PHP plugin for Movable Type. This means that Fast Search uses Movable Type's dynamic PHP-based publishing system to display search results. However, you can continue to use static publishing for all of your indexes and archives. Fast Search is fast in part because it uses mySQL fulltext indexing -- basically this means that a search index will be created for the entries in your database, making searches much faster. Like the built-in search, Fast Search logs searches to the Movable Type Activity log.

New Features in Version 1.5

Fast Search v1.5 has several new features:

  • Search Method Options. Three methods are available which control how the searches are conducted. Most users will use the default "Fulltext" option, but some installations will beneft from the two new options. More details below.
  • Multi-Byte Language Support. Fast Search can now search entries with languages in multi-byte languages, such as Arabic and Japanese, using the "Non-Fulltext" search method.
  • Total Number of Results Found. A new tag for displaying the total number of results in the database, so you can display "showing 1 - 10 of 256 results".
  • Search Page Links. Display linked page numbers to link directly to multiple pages of search results.
  • Previous Page Link. Links to the previous page of search results.
  • Short Words Searching. Using the "Non-Fulltext" or "Fallback" search methods, you can now search for words under 4 characters in length.
  • Match Partial Words. Search for partial words using the "Non-Fulltext" or "Fallback" methods, you can now search for partial words.
  • "Mixed" Multi-blog Searching. You can now search multiple blogs in the same search. The results are "mixed" together, in one list of search results, not grouped by blog.

What Search Method is Best?

For most cases, "Fulltext" will be the fastest search method. This is the same method used in version 1.0. There are some cases in which you might two options:

  • Non-Fulltext. Technically speaking this method used a LIKE %query% syntax. If you don't know what that means, don't worry about, just read on.
  • Fallback. The Fallback method is a combination method. FastSearch will first try a fulltext search, and if that returns no results, then it will try a Non-Fulltext search.

Non-Fulltext and Fallback are capable of some types of searches that you can't do with mySQL. You might want to use Non-Fulltext or Fallback to:

  1. search multi-byte languages such as Arabic and Japanese.
  2. search words shorter than 3 characters (such as "MTV")
  3. search partial words
  4. search a mySQL database that does not support Fulltext searching

Template Tags

Version 1.5 of FastSearch is designed to easily replace the existing search functionality in Movable Type, but with added features. For example, if you are currently using customized search templates, you can use them with Fast Search, with very few changes in most cases. Many Fast Search template tags have the same names as their CGI counterparts:

  • <MTSearchString> - The search string (query) being searched.
  • <MTSearchResults> - A container tag that displays search results. Arguments include (all are optional):
    • lastn - restricts the search to n results. (example <MTSearchResults lastn="10"> ) The lastn argument, like all arguments for MTSearchResults, can also be specified in the URL (...&lastn=10) or POSTed from a search form)
    • offset - used in coordination with lastn, starts M entries from the start of the list. (example <MTSearchResults lastn="10" offset="10"> will display results 11-20)
    • order - must be either 'date' or 'relevance', the default is 'relevance'. (example $lt;MTSearchResults order="date"> will provide similar results as the CGI search)
    • category - must be a valid category ID for the current blog - restricts the search results to entries from this category.
    • google_highlight - if specified, search words will be highlighted. (example <MTSearchResults google_highlight="1"> )
    • query - the search string (text) to be searched. In normal use, you would NOT include this argument as part of the <MTSearchResults> tag, rather, it would be specified as a URL paramter (example ...query=search+phrase) or POSTed from a search form.
    • blogs - a comma-separated list of blog_ids if you want to search more than one blog. This argument is optional, if excluded, only the current blog will be searched. Example usage: <MTSearchResults blogs="1,3,8">
  • <MTBlogResultHeader> - this is container tag that displays content before the search results.
  • <MTBlogResultFooter> - this is container tag that displays content below the search results.
  • <MTNoSearchResult> - A container tag that displays its content only if zero results are found. Note that this tag must be used after a <MTSearchResults> container.
  • <MTNoSearch> - A container tag that displays its content only if no search phrase was specified.
  • <MTSearchCount> - The number of search results displayed on the current search results page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter> container.
  • <MTSearchFirst> - The number of the first search result on the current page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchLast> - The number of the last search result on the current page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchIfNextPage> - A conditional tag that displays its content if there is a subsequent page of search results. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchNextPageLink> - Output a URL to the next page of search results. This tag should be used within <MTSearchIfNextPage> tags.
  • new - <MTSearchIfPrevioustPage> - A conditional tag that displays its content if there is a previous page of search results. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • new - <MTSearchPreviousPageLink> - Output a URL to the previous page of search results. This tag should be used within <MTSearchIfNextPage> tags.
  • new - <MTSearchTotalResults> - The total number of matching results in the database.
  • new - <MTSearchPages> - A container tag that can display links to multiple pages of search results. Optional arguments include:
    • max - the maximum number of page links to display on each page. Example: <MTSearchPages max="20">
    • glue - a text string that seperates each page. For example, if you wanted to display 1 - 2 - 3 - 4, you could use <MTSearchPages glue=" - ">
  • new - <MTSearchPageNumber> - Displays the page number of each search results page. This must be used within a <MTSearchPages> container.
  • new - <MTSearchPageLink> - Displays the URL to each search results page. This must be used within a <MTSearchPages> container.
  • new - <MTSearchIfCurrentPage> - A conditional tag that only displays its contents if the page number is the same as the current page - you would normally use this is you wanted to highlight the current page in the list of page numbers, etc. This must be used within a <MTSearchPages> container.

Note: the new default Fast Search template includes pre-formatted template code that displays Google-style search results page links.

As you may have noticed, some of the tags above are identical to the ones used for the existing CGI-based search results. This is by design, so you will easily be able to cut-and-paste your existing search template code into the Fast Search template, though some minor modifications may be required.

Working Examples:

Here are some working examples you can try. Feel free to try additional search queries and note the speed that searches are performed.

  • Mars Rover Blog has over 5,000 entries. Example search: "water on mars". Note that this example shows the default FastSearch template, which is very similar to the default search results template in MT 3.2.
  • Seinfeld Blog has over 8,000 entries, 180 of which consist of the episode descriptions and scripts of all 180 episodes. Fast Search powers the Seinfeld Script Search, which is restricted to a single category containing the episodes. Example search: 'bubble boy'

Requirements:

  • Movable Type 3.2 or 3.3
  • mySQL

Instructions

  1. Download the plugin and expand the zip file.
  2. Upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation (usually something like /cgi-bin/mt/plugins).
  3. Upload the contents of the 'php' folder to the 'php' directory (usually something like /cgi-bin/mt/php)
  4. Login to the MT admin interface. If you already logged in, choose 'Main Menu'
  5. If your are running MT 3.3, you should be redirected to an 'Upgrade' screen at this point. The Fast Search upgrade process will update your database to add a fulltext index to the table in your database where entries are stored. Note that this may take some time if you have many entries, and this will add to the overall size of your database.
  6. If you are running MT 3.2, you will not see the upgrade screen (as it is a 3.3 feature), so you need to create the index by browsing to the 'Settings' of a blog where you want to use Fats Search. Choose the 'Plugins' tab then find 'Fast Search' and choose 'Settings'. Now click the link in bold that says "Click here to create or rebuild the FastSearch fulltext index". Again, this may take some time, please be patient. After the index has been created, hit the Back button.
  7. Now browse to the 'Publishing' settings tab for the blog, and scroll down to the Setting called "Dynamic Publishing". If the first option, "Build all templates statically", is selected, you should change this setting to "Set each template's Build Options separately" and click "Save Changes" at the bottom of the screen. Otherwise, you don't need to make any changes here.(Note that change this setting will create an .htaccess file in the root path of the blog. Normally you won't notice this and everything will work fine, but if you have an existing.htacces file, you may want to take a look at it to make sure everything looks okay)
  8. If you just changed your Dynamic Publishing settings in the previous step, you should now rebuild all files for this blog by choosing "Rebuild Site" from the left menu, then "Rebuild all Files". You should also ensure that you have a "Dynamic Site Bootstrapper" (mtview.php) index template and make sure that it gets built, if it hasn't been built previously.
  9. Now return to the Fast Search settings ('Plugins' tab within 'Settings') and check the box to enable Fast Search. You may also want to adjust the settings for Maximum Search Results and logging, then click "Save Changes".
  10. Open the Fast Search settings once again and choose "Click here to install the default Fast Search Template." The template will be created and then displayed. This is an dynamic Index template (which can be customized) used to display the search results. (If desired you can also skip this step and create the index template manually, use the template tags as desired, or by cutting and pasting your exisiting search template code)
  11. Upgrading from Fast Search v1.0

    Follow steps 1 to 3 above, then adjust your Fast Search plugin settings and search template, if desired.

The Search Form

If you already have search forms on your blog pages, you need to update them to point to the new Fast Search template. For each template that contains a search form, look for the following (or similar):

<form method="post" action="<$MTCGIPath$><$MTSearchScript$>"

...and change it to:

<form method="post" action="<$MTBlogURL>fastsearch"

...save the template and repeat this step for every template that has a search form.

If you want to insert a new search form on your site, or completely replace existing forms, you can use the following:

<form method="get" action="<$MTBlogURL$>fastsearch">
    <label for="query" accesskey="4">Search this blog:</label><br />
    <input id="query" name="query" size="20" />
    <input type="submit" value="Search" />
</form>

Of course you can also add optional fields to the form such as:

<input type="hidden" name="order" value="date" />

....to sort the results by date, or....

<input type="hidden" name="category" value="5" />

...to restrict the search to category_id = 5.

Once you have the search form(s) on you site, rebuild those pages and start searching. You should notice significant speed and resource improvement, especially on blogs with many entries.

Fast Search Settings

Fast Search settings are on a "per blog" basis. To access the settings, browse to the blog you want to use, then choose "Settings", then "Plugins". Look for Fast Search in the list and click the "Show Settings" button.

Download Fast Search

Non-commercial use - FREE ( although you must include a

Movable Type search results powered by 
<a href="https://mt-hacks.com/fastsearch.html">Fast Search</a>
link on your search results pages.

Also, donations are appreciated:

Commercial use - $97.00

Download Now

,<$MTAjaxRatingVoteCount type="fastsearchdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="fastsearchdownloads"$> (since 3/6/07)

As always, suggestions and feedback are appreciated. Please reply to this entry.

Note: FastSearch v1.5 is a suitable replacement for most implementations of the built-in search function in Movable Type. However, there are a few features that Fast Search v1.5 does not include. Fast Search v1.0 does not support comment searches, regexp search, case-senstive search, the use of AND and OR operators, and Edit Entry Links). Also, Fast Search v1.5 does not inlcude MT 3.3 search features such as tag search. Some of these features may be supported in future versions -- please let me know what features you would like to see.

Note: There was a major bug in v1.5 that is fixed in this version. If you are using v1.5, you must upgrade to v1.7.

Smart Rebuild v1.7 provides several new features, including:

  • rebuild "chunking" of category rebuilds. When you rebuild your categories, they will get rebuilt in chunks, similar to the way Indvidual Archives get rebuild, a certain number at a time. Of course, this includes the category rebuilding optimizations from Smart Rebuild v1.0. This new chunking feature will be especially helpful for blogs that have many categories (40 or more, in most cases).
  • background rebuilding of category and date-based archives when a new comment is posted. This reduces the amount of time that it takes to post a comment.
  • background rebuilding when items are created, edited, junked, or deleted from the Movable Type admin interface. This means less time waiting when you conduct these tasks.

Note that background tasks will not reduce the server load nor the actual time it takes for pages to be rebuilt. The benefit of background tasks is that the rebuilding is done "in the background", meaning that the process of posting a comment, saving an entry, junking comments, or other task can continue without waiting for the rebuild to complete. In short, it saves time for commenters, authors, and blog admins.

Requirements

MT 3.3x

Note: This version of Smart Rebuild is not suitable for use on MT4+.

Installation Instructions:

  • Download the plugin and upload to the 'plugins' directory in your Movable Type installation.
  • Check to see if background tasks will work on your server. To check, you can use a test script that comes with MT. Go to http://www.yourmtdomain/cgi-bin/mt/mt-tesbg.cgi (modify this address so that it points to the file in your MT directory). If you get message that says "Background tasks are available", then you can turn on this option (see the next step). If background tasks are not available, you should not enable it, as it may cause errors.
  • If you haven't done so previously, turn on background tasks by adding the following line to your mt-config.cgi file:

    LaunchBackgroundTasks 1

Download Smart Rebuild

Non-commercial use - FREE

Commercial use - $97.00

Download Now

SmartRebuild.zip

As always, suggestions and feedback are appreciated. Please reply to this entry.

Update, Oct. 9, 2006 - A newer version of Fast Search has been released. Click here for details.

The built-in search tool in Movable Type can be slow and can take a lot of processing power, especially if you have blogs with many entries. When I recently upgraded to version 3.31 of MT, I was dismayed to learn that searches became slower and more processor-intensive (at least on my server). I was forced to disable the mt-search.cgi script, as it was overloading my dedicated server. So I went looking for an alternative. I found a PHP mySQL Fulltext method that worked very fast, and without the CPU problems.

So contacted IƱaki, the creator of this PHP solution, who granted me permission modify the solution and package it up as a Movable Type plugin. I have added a number of features, and I have made significant efforts to make the plugin easy to install and use.

Fast Search is a PHP plugin for Movable Type. This means that Fast Search uses Movable Type's dynamic PHP-based publishing system to display search results. However, you can continue to use static publishing for all of your indexes and archives. Fast Search is fast in part because it uses mySQL fulltext indexing -- basically this means that a search index will be created for the entries in your database, making searches much faster.

Template Tags

Version 1.0 of FastSearch is designed to easily replace the existing search functionality in Movable Type. For example, if you are currently using customized search templates, you can use them with Fast Search, with very few changes in most cases. Many Fast Search template tags have the same names as their CGI counterparts:

  • <MTSearchString> - The search string (query) being searched.
  • <MTSearchResults> - A container tag that displays search results. Arguments include (all are optional):
    • lastn - restricts the search to n results. (example <MTSearchResults lastn="10"> ) The lastn argument, like all arguments for MTSearchResults, can also be specified in the URL (...&lastn=10) or POSTed from a search form)
    • offset - used in coordination with lastn, starts M entries from the start of the list. (example <MTSearchResults lastn="10" offset="10"> will display results 11-20)
    • order - must be either 'date' or 'relevance', the default is 'relevance'. (example $lt;MTSearchResults order="date"> will provide similar results as the CGI search)
    • category - must be a valid category ID for the current blog - restricts the search results to entries from this category.
    • google_highlight - if specified, search words will be highlighted. (example <MTSearchResults google_highlight="1"> )
    • query - the search string (text) to be searched. In normal use, you would NOT include this argument as part of the <MTSearchResults> tag, rather, it would be specified as a URL paramter (example ...query=search+phrase) or POSTed from a search form.
  • <MTBlogResultHeader> - this is container tag that displays content before the search results. (Note: in version 1.0 of Fast Search, you cannot search multiple blogs in the same search)
  • <MTBlogResultFooter> - this is container tag that displays content below the search results.
  • <MTNoSearchResult> - A container tag that displays its content only if zero results are found. Note that this tag must be used after a <MTSearchResults> container.
  • <MTNoSearch> - A container tag that displays its content only if no search phrase was specified.
  • <MTSearchCount> - The number of search results displayed. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter> container.
  • <MTSearchFirst> - The number of the first search result on the current page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchLast> - The number of the last search result on the current page. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchIfNextPage> - A conditional tag that displays its content if there is a subsequent page of search results. This tag should be used with a <MTBlogResultHeader> or <MTBlogResultFooter>container.
  • <MTSearchNextPageLink> - Output a URL to the next page of search results. This tag should be used within <MTSearchIfNextPage> tags.

As you may have noticed, most of the tags above are identical to the ones used for the existing CGI-based search results. This is by design, so you will easily be able to cut-and-paste your existing search template code into the Fast Search template, though some minor modifications may be required.

Working Examples:

Here are some working examples you can try. Feel free to try additional search queries and note the speed that searches are performed.

  • Mars Rover Blog has over 5,000 entries. Example search: "water on mars". Note that this example shows the default FastSearch template, which is very similar to the default search results template in MT 3.2.
  • Seinfeld Blog has over 8,000 entries, 180 of which consist of the episode descriptions and scripts of all 180 episodes. Fast Search powers the Seinfeld Script Search, which is restricted to a single category containing the episodes. Example search: 'bubble boy'

Requirements:

  • Movable Type 3.2 or 3.3
  • mySQL 4.0.1 or higher

Instructions

  1. Download the plugin and expand the zip file.
  2. Upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation (usually something like /cgi-bin/mt/plugins).
  3. Upload the contents of the 'php' folder to the 'php' directory (usually something like /cgi-bin/mt/php)
  4. Login to the MT admin interface. If you already logged in, choose 'Main Menu'
  5. If your are running MT 3.3, you should be redirected to an 'Upgrade' screen at this point. The Fast Search upgrade process will update your database to add a fulltext index to the table in your database where entries are stored. Note that this may take some time if you have many entries, and this will add to the overall size of your database.
  6. If you are running MT 3.2, you will not see the upgrade screen (as it is a 3.3 feature), so you need to create the index by browsing to the 'Settings' of a blog where you want to use Fats Search. Choose the 'Plugins' tab then find 'Fast Search' and choose 'Settings'. Now click the link in bold that says "Click here to create or rebuild the FastSearch fulltext index". Again, this may take some time, please be patient. After the index has been created, hit the Back button.
  7. Now browse to the 'Publishing' settings tab for the blog, and scroll down to the Setting called "Dynamic Publishing". If the first option, "Build all templates statically", is selected, you should change this setting to "Set each template's Build Options separately" and click "Save Changes" at the bottom of the screen. Otherwise, you don't need to make any changes here.(Note that change this setting will create an .htaccess file in the root path of the blog. Normally you won't notice this and everything will work fine, but if you have an existing.htacces file, you may want to take a look at it to make sure everything looks okay)
  8. If you just changed your Dynamic Publishing settings in the previous step, you should now rebuild all files for this blog by choosing "Rebuild Site" from the left menu, then "Rebuild all Files". You should also ensure that you have a "Dynamic Site Bootstrapper" (mtview.php) index template and make sure that it gets built, if it hasn't been built previously.
  9. Now return to the Fast Search settings ('Plugins' tab within 'Settings') and check the box to enable Fast Search. You may also want to adjust the settings for Maximum Search Results and logging, then click "Save Changes".
  10. Open the Fast Search settings once again and choose "Click here to install the default Fast Search Template." The template will be created and then displayed. This is an dynamic Index template (which can be customized) used to display the search results. (If desired you can also skip this step and create the index template manually, use the template tags as desired, or by cutting and pasting your exisiting search template code)
The Search Form

If you already have search forms on your blog pages, you need to update them to point to the new Fast Search template. For each template that contains a search form, look for the following (or similar):

<form method="post" action="<$MTCGIPath$><$MTSearchScript$>"

...and change it to:

<form method="post" action="<$MTBlogURL>fastsearch"

...save the template and repeat this step for every template that has a search form.

If you want to insert a new search form on your site, or completely replace existing forms, you can use the following:

<form method="get" action="<$MTBlogURL$>fastsearch">
    <label for="query" accesskey="4">Search this blog:</label><br />
    <input id="query" name="query" size="20" />
    <input type="submit" value="Search" />
</form>

Of course you can also add optional fields to the form such as:

<input type="hidden" name="order" value="date" />

....to sort the results by date, or....

<input type="hidden" name="category" value="5" />

...to restrict the search to category_id = 5.

Once you have the search form(s) on you site, rebuild those pages and start searching. You should notice significant speed and resource improvement, especially on blogs with many entries.

Download Fast Search

Non-commercial use - FREE ( although you must include a

Movable Type search results powered by 
<a href="https://mt-hacks.com/fastsearch.html">Fast Search</a>
link on your search results pages.

Also, donations are appreciated:

Commercial use - $97.00

Download Now

,<$MTAjaxRatingVoteCount type="fastsearchdownloads" id="1"$>,0);">Download Now
Downloads: <$MTAjaxRatingVoteCount id="1" type="fastsearchdownloads"$> (since 3/6/07)

As always, suggestions and feedback are appreciated. Please reply to this entry.

Note: FastSearch v1.0 is a suitable replacement for most implementations of the built-in search function in Movable Type. However, there are a few features that Fast Search v1.0 does not include. Fast Search v1.0 does not support comment searches, multi-blog searches (searching multiple blogs at the same time), regexp search, case-senstive search, the use of AND and OR operators, and Edit Entry Links). Also, Fast Search v1.0 does not inlcude MT 3.3 search features such as tag search. Some of these features may be supported in future versions -- please let me know what features you would like to see.

Updated: 8/9/06 07:39:00 - added some additonal info to the instructions based on feedback from Patrick.

This plugin enables you to trust commenters on you blog -- without requiring them to login via TypeKey or other authentication service.

The plugin enables you to trust commenters based on a combination of three things:

  1. the commenter's name
  2. the commenter's email address
  3. the IP Address(es) used by the commenter

The last item is important, as it vastly reduced the possibility of "spoofing" -- someone lese posing as the trusted commenter. For each Name/Email combination, you can trust multiple IP Addresses.

How it works

  • You can trust a commenter from a specific IP address with a single click. When viewing the comment in the MT admin interface, click the "Trust this commenter from this IP address" link that appears under "Plugin Actions" below the comment fields.
  • When you trust a commenter in this manner, the plugin will create a commenter record in your database (similar to the way this happens when someone posts a comment using TypeKey). In addition, the commenter is granted permission to post again from the same IP address.
  • If the commenter already exists in your database, their permissions are simply updated to include the new IP address, if necessary.
  • The next time the commenter posts a comment on your blog (from a listed IP address), the plugin will recognize them as trusted. Behind the scenes, a cookie is placed on the commenter's computer (again, very similar to the TypeKey cookie). Furthermore, the comment gets posted in "trusted" status, which means that the junk filters are bypassed for this commenter (for example).
  • The next time the commenter posts a comment, they will not have to enter their name and email address. Once again this is similar to TypeKey, the commenter will be greeted as if they have signed in via TypeKey. (The cookie is used to identify the commenter).
  • When recognized trusted commenters post comments, a green "check mark" icon will appear beside their name (same icon as trusted TypeKey commenters).
  • After a commenter is trusted, he or she will appear in the "Commenters" section of the MT admin interface for that blog, along with the number of comments posted, etc. You can also "untrust" or "ban" these commenters as well.
  • Commenters can continue to sign-in via TypeKey, if desired. When using this plugin, you can accept trusted comments from both types of trusted commenters.

Benefits

This plugin attempt to provide the benefit of Movable Type's trusted commenters feature, without requiring commenters to register and sign-in via TypeKey. While I think TypeKey authentication is a great idea, I have come to learn (from experience) that many people do not want to use it, for reasons that I don't fully understand. As an example, read the comments on this Pharyngula entry, in which the author announces that TypeKey is no longer required.

Another key benefit is the ability to trust commenters so that they will be able to bypass the junk filters. With spam getting worse, many of use (like me) have very aggressive spam filters False positives do happen, and it can be frustrating for commenters when their legit comments get moderated or junked. In this way, Trusted Commenters can act as part of your anti-spam portfolio (effectively a "whitelist" of commenters).

Instructions:

1. Download the plugin and expand the zip file.

2. Upload the "TrustedCommenters" folder to your "plugins" directory within your MT installation.

3. Start trusting commenters from the view/edit comment screen with MT. Click the "Trust this commenter from this IP address" link that appears under "Plugin Actions".

4. (optional) Go to your settings and enable authentication. (Go to Settings>Feeback>Authentication Status). This is not necessary but it will enable the commenter "greeting" and alleviate the need for commenters to enter their name and email address. Alternatively, this can be enabled manually without enabling authentication, as I have done on this site, by ensuring that the proper javascript and CSS elements are present.

Download Trusted Commenters

Non-commercial use - FREE

Commercial use - $97.00

Download Now

TrustedCommenters.zip

I have been using Trusted Commenters on Mars Rover Blog and Seinfeld Blog for about a month, and it is going quite well.

As always feedback is appreciated.

Introducing Smart Rebuild, a plugin for Movable Type that speeds up rebuilding. Version 1.0 of this plugin specifically addresses the speed of rebuilding category archives from the MT admin interface.

Do you need this?

  • If category rebuilds are taking a long time, you may want to try Smart Rebuild.

  • If you are getting 500 - Internal Server Errors when rebuilding, you may want to try Smart Rebuild.

  • If you have a blog with a large number of entries and/or a large number of categories (or both), you may want to try Smart Rebuild.

Download Now

SmartRebuild.zip

Installation:

1. Expand zip file and upload the "Smart Rebuild" directory to your "plugins" directory within Movable Type (this is often something like /cgi-bin/mt/plugins).

2. Try it by clicking the "rebuild site" button from the left menu and choose "Rebuild All Files" or "Rebuild Category Archives Only".

You may want to time your category rebuilds before installing the plugin, and then again after you install it. This will help give you a sense of the improvement, which will vary depending on your site.

Tested with MT 3.2 and 3.31.

Future versions of Smart Rebuild may contain further rebuild optimizations.

Previous versions of FormatList will not work with Movable Type 3.3 (or later). The new version (1.2) will only work with MT 3.3 or later.

FormatList no longer requires the BigPAPI plugin.

Download Now

FormatListv1.2.zip

If you want to use FormatList with MT 3.2, please download:

FormatList1.1forMT3.2.zip

FormatList adds list buttons to the toolbar, in the MT admin entry screens. For more information, click here.

Note: with this version, I have not updated the button images to reflect the new sizes that are used by MT 3.3, so you may notice a slight difference in size, compared to the new 3.3 toolbar buttons.

Flickr photos is a plugin that enables you to display thumbnail links of Flickr photos in your Movable Type blog. Flickr Photos focuses on displaying lists of photos, in many possible ways.

The new version, 0.80, has a few bug fixes and a few new features. The majority of these improvements were contributed by Annoying Old Guy, of Solid Wall of Code. Thanks, AOG!

New Features and Bug Fixes

Bug Fixes and Tuning:

-bug fix for MTFlickrPhotoTagURL, should now create correct links
-adjusted HTML in MTFlickrPhotoLink to be xhtml valid
-added a fix to an upgrade problem from v0.5 - if you receive errors after upgrading from v0.5, loading the plugin settings page should now fix it
-code optimizations to improve perfomance
-fixed a bug that was clearing configuration settings
-moved Expressions.pm to correct location to avoid conflicts

Features (details below):

-new tags for photo height and width
-added class elements to the FlickrPhotoLink tag for customization via CSS
-support for setting size and link arguments in MTFlickrPhotos container tag
-support for Plugin Manager (untested, as I was unsuccessful in installing Plugin Manager on my server, use with caution, feedback appreciated)

Basic Usage

You can easily list thumbnails by Filckr user and/or by Flickr tags. You can also control the number of thumbnails displayed and the size of the thumbnails. Each thumbnail can link to a larger version of the image, or to the Flickr page for that photo.

Here is an example of the easiest way to use FlickrPhotos in your templates:

<MTFlickrPhotos username="John Smith">
<MTFlickrPhotoLink> <br />
<br />
</MTFlickrPhotos>

The above template code will display thumbnail links for the 10 most recent photos for Flickr user "John Smith". (Tip: when entering the value for your 'username', you should use the name that appears after "Logged in as" on the top of each Flickr page when you are logged in. Your user name may contain spaces - if so, be sure to include those space as I have done with "John Smith" above).

Here another example that displays thumbnail links from any user tagged with "movabletype":

<MTFlickrPhotos tags="movabletype">
<MTFlickrPhotoLink> <br />
<br />
</MTFlickrPhotos>

Advanced Usage and FlickrPhotos Template Tags

FlickrPhotos includes the following template tags:

  • MTFlickrPhotos is container tag for displaying photos. arguments include:
    • username - restricts photos to a specific Flickr user.
    • tags - retricts photos to those with the specified tags. Multiple tags can be specified, separated by comma.
    • tag_mode - specifies the method for displaying photos by the tags argument. If tag_mode is set to 'any', it will display photos with at least one on the tags specified in tags. If tag_mode is set to 'all', it will only display photos tagged with each and every one of the tags specified by tags. Optional (the default value is 'any').
    • search - retricts photos to those with the specified search text
    • lastn - determines the number of photos to display. Optional (default is 10 photos).
    • sort - method to sort the photos. This must be one of date-posted-asc, date-posted-desc, date-taken-asc, date-taken-desc, interestingness-desc, interestingness-asc, or relevance (with 'asc' meaning ascending and 'desc' meaning descending). The default sort method is 'date-posted-desc', which displays the mosting recently uploaded photo first.
    • size - specified the size of the thumbnail images. For size, you can specify "s" (small square), "t" (thubmnail), "m" (small), "med" (medium), "o" (original size).
    • min_upload_date - restricts photos to those with a minimum upload date. Date should be specified as YYYY-MM-DD.
    • max_upload_date - restricts photos to those with a maximum upload date. Date should be specified as YYYY-MM-DD.
    • min_taken_date - restricts photos to those with a minimum taken date. Date should be specified as YYYY-MM-DD.
    • max_taken_date - restricts photos to those with a maximum taken date. Date should be specified as YYYY-MM-DD.
    • Note that each of the above arguments can be used together, including at least 'username' and/or 'tags'. Arguments listed below are 'special' and cannot be used with many of the arguments above:

    • group - restricts the photos to those of a specific group pool. The group argument requires the complete URL of the group page or group pool page. For example <MTFlickrPhotos group="http://www.flickr.com/groups/catchy/">. When using the special group argument, you can further filter the photos by user the lastn, tags, and username arguments - but not the others described above.

    • set - restricts the photos to those of a specific photoset. The set argument requires the complete URL of the photoset page. For example <MTFlickrPhotos set="http://www.flickr.com/photos/markcarey/sets/55064/">. When using the special set argument, you cannot use the other arguments described above.

    • contacts - restricts the photos to those of the contacts of a specific user. The contacts argument requires that you also specify a username. When using the special group argument, you can further filter the photos by user the lastn argument and with the following: just_friends shows only photos from those contacts marked as friends, single_photo displays one photo from each contact, and include_user will display photos include photos from the user specified. For example <MTFlickrPhotos contacts="1" username="John Smith" single_photo="1" include_user="1">

    • favorites - restricts the photos to those of the favorite photos of a specific user. The favorites argument requires that you also specify a username. When using the special favorites argument, you can further filter the photos by user the lastn argument. For example <MTFlickrPhotos favorites="1" username="John Smith">

    • everyone - display recent photos from all Flickr users. When using the special everyone argument, you can further filter the photos by user the lastn argument. For example <MTFlickrPhotos everyone="1" lastn="10">

    • interestingness - display recent interesting photos from all Flickr users. When using the special interestingness argument, you can further filter the photos by user the lastn argument. For example <MTFlickrPhotos interestingness="1" lastn="15">

  • MTFlickrPhotoThumb outputs the URL to the thumbnail image. The size of thumbnail is determined by the FlickrPhotos plugin settings (see below), which can be overidden by an optional size argument. For size, you can specify "s" (small square), "t" (thubmnail), "m" (small), "med" (medium), "o" (original size) Example usage: <img src="<MTFlickrPhotoThumb size="t">">
  • MTFlickrPhotoWidth outputs the width of the photo thumbnail in pixels.
  • MTFlickrPhotoHeight outputs the height of the photo thumbnail in pixels.
  • MTFlickrPhotoURL outputs the destination URL that can be used to link each thumbnail. This URL will be to either to the Flickr photo page or directly to a different size of the photo, as determined by the plugin settings. These settings can be overidden by an optional target argument specifying the size of the photo to link to (see choices above) or "page" to link to the Flickr photo page. Example usage: <a href="<MTFlickrPhotoURL target="page">">
  • MTFlickrPhotoTitle outputs the Flickr title for the photo. This can be used as "alt" text for the thumbnails, and/or used a caption for each photo.
  • MTFlickrPhotoLInk combined each of the above tags - it outputs a linked thumbnail, using the title as the 'alt' and 'title' for the link. The link will open in a new window. This tag is the easiest way to use FlickrPhotos, becuase you don't have to write any HTML for creating the link or displaying the image. This tags supports both of th optional arguments described above, size and target.
  • MTFlickrPhotoDateUploaded outputs the date that the photo was uploaded.
  • MTFlickrPhotoDateTaken outputs the date that the photo was taken.
  • MTFlickrPhotoDescription outputs the description of the photo. For this tag to work, the "Get Photo Details" setting must be turned on (see details below).
  • MTFlickrPhotoOwnerName outputs the username or real name of the owner of the photo. In order to display the real name, the "Get Photo Details" setting must be turned on (see details below).
  • MTFlickrPhotoCommentsCount outputs the number of comments that have beeb made on the photo. For this tag to work, the "Get Photo Details" setting must be turned on (see details below).
  • MTFlickrPhotoCommentsCount outputs the number of comments that have beeb made on the photo. For this tag to work, the "Get Photo Details" setting must be turned on (see details below).
  • MTFlickrPhotoTags is a container tag that displays each of the tags assigned to the photo. For this tag to work, the "Get Photo Details" setting must be turned on (see details below).
  • MTFlickrPhotoTagName displays the name of the tag. Must be used between <MTFlickrPhotoTags> and </MTFlickrPhotoTags> tags. For this tag to work, the "Get Photo Details" setting must be turned on (see details below).
  • MTFlickrPhotoTagURL displays the URL to the Flickr page for the tag for the photo's owner. Must be used between <MTFlickrPhotoTags> and </MTFlickrPhotoTags> tags. For this tag to work, the "Get Photo Details" setting must be turned on (see details below).
  • MTIfFlickrPhotoTags is a conditional tag - anything between the <MTIfFlickrPhotoTags>. and </MTIfFlickrPhotoTags> tags will only be displayed if the photo has one or more tags. For this tag to work, the "Get Photo Details" setting must be turned on (see details below). Here is an example of how these tags can be used to display the tags of a photo:

    <MTIfFlickrPhotoTags>
    Tags for this photo: <br /> <ul>
    <MTFlickrPhotoTags>
    <li><a href="<MTFlickrPhotoTagURL>"><MTFlickrPhotoTagName></a> </li>
    </MTFlickrPhotoTags>
    </ul>
    </MTIfFlickrPhotoTags>

FlickrPhotos Plugin Settings

The following settings can bet set on a per-blog basis. To access these settings, select the blog you want and then choose "Settings" from the menu. Then choose the "Plugins" tab. You should then see FlickrPhotos in the list of plugins - hit the settings link to display the settings. The settings are:

  • Thumbnail Size: This setting determines the size of the thumbnail images. Choice are Square, Thumbnail, Small, Medium, and Orginal. These sizes correspond to the sizes used by Flickr. The default is Thumbnail. This setting can be overidden by using the size argument as described above.
  • Link to: This setting determines where each thumbnail will link to. You can link directly to a different size of the photo (you can choose from the same sizes as above) OR you can link each photo to the Flickr page for that photo. The default is Flickr Page This setting can be overidden by using the target argument as described above..
  • Number of Photos: The default numbers of photos to display. The default is 10. You can override this by using the 'lastn' argument (for example, <MTFlickrPhotos username="John Smith" lastn="15"> )
  • Photo List Cache: The length of time to cache the list of photos. After the above time frame has passed, FlickPhotos will check with Flickr to see if there are any new photos. It is highly recommended that this setting be set to 1 hour or longer. Choosing 'none' may slow down your rebuilds considerably. You can override this setting on a case by case basis by specifying the number of seconds in the refresh argument (for example, to set the Photo List Cache to 1 hour you could use <MTFlickrPhotos username="John Smith" refresh="3600"> )
  • Photo Info Cache: The length of time to cache the detailed information for each photo (title, tags, description, number of comments, etc.). After the above time frame has passed, FlickPhotos will check with Flickr to see if there have been any changes to the photo information. It is highly recommended that this
    setting be set to 1 week or longer. Choosing 'none' may slow down your rebuilds considerably. You can override this setting on a case by case basis by specifying the number of seconds in the refresh_details argument (for example, to set the Photo Info Cache to 2 weeks you could use <MTFlickrPhotos username="John Smith" refresh_details="1209600"> )
  • Clear Cache Older Than: This setting will delete cache information about photo lists and photo details that are older than the time frame selected above. This is useful to remove data for older photos that you are no longer displaying, thus preventing your database from growing too large. It is recommended that this setting be set to 1 month or longer. Choosing 'Never' may cause your database to grow sigificantly larger, depending on how you use the plugin. IMPORTANT: With this setting, the cache will not be cleared automatically. To clear the cache you MUST return to this Plugin settings page. To prevent slow rebuilds, the cache-clearing function only runs when you access the Plugin settings page. Also note that this setting is global, meaning that it applies to photo cache data for all of your blogs.
  • Get Photo Details: If set to "On", FlickrPhotos will ask Flickr for some details about each photo. Photo details includes the following: description (<MTFlickrPhotoDescription> ), number of comments
    (<MTFlickrPhotoCommentsCount> ), owner location (<MTFlickrPhotoOwnerLocation> ), and tags (<MTFlickrPhotoTags> ). If you are not displaying these tags on your pages, you can change this setting to "Off" to improve perfomance and speed rebuild times. You can override this setting on a case by case basis by using the "fetchdetails" argument (for example, <MTFlickrPhotos username="John Smith" fetchdetails="1"> )
  • Install Sidebar Widget: Checking the box for this setting and entering a Flickr username will automatically install a Sidebar widget that displays 5 recent photos. You can then customize this by editing the "Sidebar: FlickrPhotos" template module, which will be created after checking this option. This setting works with the Sidebar Manager plugin: Learn more about Sidebar Manager.

Requirements:

  • MT 3.2
  • Flickr::API Perl Module (included in download for convenience)
  • XML:: Parser::Lite (included for convenience)
  • XML:: Parser::Lite::Tree (included for convenience)
  • XML:: Parser::Lite::Tree::XPath (included for convenience)

Download Now

FlickrPhotos.zip

Installation

  1. Expand the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation and the contents of the 'extlib' folder to the 'extlib' folder of your MT installation.
  2. Adjust the plugin settings if desired (see above)
  3. Start using the above template tags in your templates.

If you like this plugin, please consider making a donation:

This plugun is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5. In other words, if you use this plugin, please display a "powered by Flickr Photos" link, such as the one below:

<a href="https://mt-hacks.com/flickrphotos.html" target="_blank">Powered by Flickr Photos</a>

Update: Included with this plugin is the MT Plugin Network plugin. MT Plugin Network helps keep you up to date about new and updated plugins from MT Hacks and other plugin providers, by displaying a list of recent plugin announcements with the MT admin area. Click here to learn more.

As always, please let me know if you find any bugs, or if you have any suggestions or comments.

Update: This plugin addresses a bug seems to affect only some people who upgraded to Movable Type 3.2 from previous versions. I don't know what leads to the problem, but if you get a "You must define a Comment Pending Template" error message, this plugin can help. I previously thought (incorrectly) that the problem was due to a design flaw in Movable Type 3.2. In MT 3.2, a new feature was introduced that enabled blog authors to have comments held for moderation, or place in a junk folder, depending on settings and other criteria. In such cases, a message is shown to the commenter, notifying them that the comment is being held for moderation. This message is displayed via a new "Comment Pending Template". When you create new blogs with MT 3.2, it automatically creates this system template.

The problem, which affects only certain installations (not sure why or how many), is that the upgrade process for MT 3.2 does not create a "Comment Pending Template" for existing blogs on the system, as it should ( blogs that were created with previous versions of MT). If you are affected by this issue, when comments get held for moderation, commeters get an ugly MT error screen, with the cryptic error message "You must define a Comment Pending template". This means nothing to commenters, of course, who cannot create such a template. Another challenge, it turns out that even blog owners/admins cannot define a "Comment Pending Template" from the MT admin interface. When you browse to System templates, there are no options to create this template. Googling for a solution, a found a message from a SixAparter saying that the only way to add this template is to use the TemplateRefresh plugin on the entire blog. This is BAD IDEA if you have many customized templates! While it does back up your customized templates, it creates a mess by replacing all your templates with the default ones, making a big mess for you to clean up later.

Hence, the reason for this plugin.

What this plugin does

DefineCommentPending does exactly what it says, it defines a Comment Pending Template for a particular blog. The plugin creates a "Define Comment Pending Template" plugin action that will appear at the bottom of your template listing screens (when you click "Templates" from the MT menu). A single click of this link will create the Comment Pending Template and enable you to customize it, if desired.

Installation:

1. Download Now:

DefineCommentPending.zip

2. Expand the zip file and upload to the "plugins" directory within your MT directory.

3. In the MT admin interface, browse to the blog you want, then choose "Templates" from the menu.

4. Click the "Define Comment Pending Template" link that appears below the list of templates.

5. Repeat for each blog, as desired.

This plugin acts as a "connector" between MT-Blacklist and Movable Type 3.2. The most recent (and final) version of MT-Blacklist was not designed to work with Movable Type 3.2. The reason for this is because MT3.2 included SpamLookup, a new spam filtering plugin. While SpamLookup may be effective for many users of Movable Type, some people (including myself) found that MT-Blacklist was more effective on their systems. It is for this reason that I have created this "connector" plugin.

The connector is not for everyone -- some systems will benefit more than others. In my opinion, systems with the following characteristics may be ideal candidates:

  • systems with many blogs
  • systems with a large number of entries
  • systems that had accumulated a large Blacklist before upgrading to MT3.2

Note that this connector plugin is not an alternative to SpamLookup. With Blacklist32 installed, comments and trackbacks will be scanned by both SpamLookup and Blacklist32. In some cases, each plugin may assign a junk score to the same comment -- keep this in mind when adjusting your spam score settings.

Requirements:

  • MT-Blacklist 2.04b (may work with prior versions, but I have not tested them) - MT-Blacklist does all the heavy lifting, Blacklist32 just hooks into it to make it work nicely with MT3.2. Download MT-Blacklist 2.04b
  • Movable Type 3.2
.

Features:

Blacklist32 includes the following 'hooks':

  • New comments and trackbacks will be checked for matches against your local MT-Blacklist. If a match is found, a junk score is assigned, and a feedback log message is added.
  • A "Despam Comment(s)" action has been added to the Comment Listing screen. Simply check the comments that you want to despam, and choose this action from the dropdown. MT-Blacklist will then despam the comments, extracting any domains for optional inclusion in the blacklist. Note that items are junked, not deleted.
  • A similar plugin action has been added to the Edit Comment screen, enabling you to despam a single comment from that screen.

Download Now

Blacklist32 v0.75

Installation:

  • Upload to the 'plugins' directory of your MT installation.
  • Adjust the junk score weight via Settings > Plugins, if desired (default is 1)

As always, questions, comments, bug reports are appreciated.

New in version 1.1: I fixed a bug that was preventing the list buttons from working in the "Extended Entry" field. The features remain the same, as described below.

FormatList is a plugin for Movable Type that makes it easy to create bulleted or numbered lists when creating or editing entries.

FormatList adds the following two button to the formatting toolbar that appears just above the "Entry Body" and "Extended Entry" fields:

To create a bulleted list:

  • Enter the list of items, hitting enter after each line (you can leave blank lines in between list items if desired)
  • Select (highlight) the list
  • Click the button

To create a numbered list:

  1. Enter the list of items, hitting enter after each line (you can leave blank lines in between list items if desired)
  2. Select (highlight) the list
  3. Click the button

Requirements:

  • BigPAPI Plugin (For convenience, I have included this plugin in the FormatList download) (more about BigPAPI)
  • Movable Type 3.16 and higher (I think....currently tested with MT 3.2 only)

Download Now

FormatList.zip

Installation Instructions:

  1. Download and expand the zip file
  2. Upload the contents of the 'plugins' folder to the 'plugins' folder of you MT installation (there are two files, FormatList.pl and BigPAPI.pl)
  3. Upload the contents of the' images' folder to the 'images' folder within the 'mt-static' folder. This is the location of the images and docs for MT, for most people it will likely be in '/mt-static/images' (outside your cgi-bin).

I hope others find this as helpful as I do. I created this plugin becuase it was quite tedious to create list manually, and this plugin makes it really quick and easy.

Note: As you would expect, each of the lists above was created using FormatList ;)

Flickr photos is a plugin that enables you to display thumbnail links of Flickr photos in your Movable Type blog. The new version, 0.75, has many more features than the previous version. Flickr Photos focuses on displaying lists of photos, in many possible ways.

New Features

This version has many new features, including:

  • display photos from a specific photo set
  • display photos from a specific group pool
  • display photos of the contacts of a specific user
  • display the favorite photos of a specific user
  • display recent photos from all Flickr users
  • display photos based on search text
  • display recent interestingness photos
  • display detailed information about each photo (description, date taken, date uploaded, owner name, owner location, number of comments, and tags)
  • display photos within a specified date range
  • sort photo displays in various ways
  • caching features for photo list and photo details to speed rebuilds
  • install Sidebar Manager widget setting, displays recent photos in your sidebar

Here are few examples:

Basic Usage

You can easily list thumbnails by Filckr user and/or by Flickr tags. You can also control the number of thumbnails displayed and the size of the thumbnails. Each thumbnail can link to a larger version of the image, or to the Flickr page for that photo.

Here is an example of the easiest way to use FlickrPhotos in your templates:

<MTFlickrPhotos username="John Smith">
<MTFlickrPhotoLink> <br />
<br />
</MTFlickrPhotos>

The above template code will display thumbnail links for the 10 most recent photos for Flickr user "John Smith". (Tip: when entering the value for your 'username', you should use the name that appears after "Logged in as" on the top of each Flick page when you are logged in. Your user name may contain spaces - if so, be sure to include those space as I have done with "John Smith" above).

Here another example that displays thumbnail links from any user tagged with "movabletype":

<MTFlickrPhotos tags="movabletype">
<MTFlickrPhotoLink> <br />
<br />
</MTFlickrPhotos>

Advanced Usage and FlickrPhotos Template Tags

FlickrPhotos includes the following template tags:

  • MTFlickrPhotos is container tag for displaying photos. arguments include:
    • username - restricts photos to a specific Flickr user.
    • tags - retricts photos to those with the specified tags. Multiple tags can be specified, separated by comma.
    • tag_mode - specifies the method for displaying photos by the tags argument. If tag_mode is set to 'any', it will display photos with at least one on the tags specified in tags. If tag_mode is set to 'all', it will only display photos tagged with each and every one of the tags specified by tags. Optional (the default value is 'any').
    • search - retricts photos to those with the specified search text
    • lastn - determines the number of photos to display. Optional (default is 10 photos).
    • sort - method to sort the photos. This must be one of date-posted-asc, date-posted-desc, date-taken-asc, date-taken-desc, interestingness-desc, interestingness-asc, or relevance (with 'asc' meaning ascending and 'desc' meaning descending). The default sort method is 'date-posted-desc', which displays the mosting recently uploaded photo first.
    • min_upload_date - restricts photos to those with a minimum upload date. Date should be specified as YYYY-MM-DD.
    • max_upload_date - restricts photos to those with a maximum upload date. Date should be specified as YYYY-MM-DD.
    • min_taken_date - restricts photos to those with a minimum taken date. Date should be specified as YYYY-MM-DD.
    • max_taken_date - restricts photos to those with a maximum taken date. Date should be specified as YYYY-MM-DD.
    • Note that each of the above arguments can be used together, including at least 'username' and/or 'tags'. Arguments listed below are 'special' and cannot be used with many of the arguments above:

    • group - restricts the photos to those of a specific group pool. The group argument requires the complete URL of the group page or group pool page. For example <MTFlickrPhotos group="http://www.flickr.com/groups/catchy/">. When using the special group argument, you can further filter the photos by user the lastn, tags, and username arguments - but not the others described above.

    • set - restricts the photos to those of a specific photoset. The set argument requires the complete URL of the photoset page. For example <MTFlickrPhotos set="http://www.flickr.com/photos/markcarey/sets/55064/">. When using the special set argument, you cannot use the other arguments described above.

    • contacts - restricts the photos to those of the contacts of a specific user. The contacts argument requires that you also specify a username. When using the special group argument, you can further filter the photos by user the lastn argument and with the following: just_friends shows only photos from those contacts marked as friends, single_photo displays one photo from each contact, and include_user will display photos include photos from the user specified. For example <MTFlickrPhotos contacts="1" username="John Smith" single_photo="1" include_user="1">

    • favorites - restricts the photos to those of the favorite photos of a specific user. The favorites argument requires that you also specify a username. When using the special favorites argument, you can further filter the photos by user the lastn argument. For example <MTFlickrPhotos favorites="1" username="John Smith">

    • everyone - display recent photos from all Flickr users. When using the special everyone argument, you can further filter the photos by user the lastn argument. For example <MTFlickrPhotos everyone="1" lastn="10">

    • interestingness - display recent interesting photos from all Flickr users. When using the special interestingness argument, you can further filter the photos by user the lastn argument. For example <MTFlickrPhotos interestingness="1" lastn="15">

  • MTFlickrPhotoThumb outputs the URL to the thumbnail image. The size of thumbnail is determined by the FlickrPhotos plugin settings (see below), which can be overidden by an optional size argument. For size, you can specify "s" (small square), "t" (thubmnail), "m" (small), "med" (medium), "o" (original size) Example usage: <img src="<MTFlickrPhotoThumb size="t">">
  • MTFlickrPhotoURL outputs the destination URL that can be used to link each thumbnail. This URL will be to either to the Flickr photo page or directly to a different size of the photo, as determined by the plugin settings. These settings can be overidden by an optional target argument specifying the size of the photo to link to (see choices above) or "page" to link to the Flickr photo page. Example usage: <a href="<MTFlickrPhotoURL target="page">">
  • MTFlickrPhotoTitle outputs the Flickr title for the photo. This can be used as "alt" text for the thumbnails, and/or used a caption for each photo.
  • MTFlickrPhotoLInk combined each of the above tags - it outputs a linked thumbnail, using the title as the 'alt' and 'title' for the link. The link will open in a new window. This tag is the easiest way to use FlickrPhotos, becuase you don't have to write any HTML for creating the link or displaying the image. This tags supports both of th optional arguments described above, size and target.
  • MTFlickrPhotoDateUploaded outputs the date that the photo was uploaded.
  • MTFlickrPhotoDateTaken outputs the date that the photo was taken.
  • MTFlickrPhotoDescription outputs the description of the photo. For this tag to work, the "Get Photo Details" setting must be turned on (see details below).
  • MTFlickrPhotoOwnerName outputs the username or real name of the owner of the photo. In order to display the real name, the "Get Photo Details" setting must be turned on (see details below).
  • MTFlickrPhotoCommentsCount outputs the number of comments that have beeb made on the photo. For this tag to work, the "Get Photo Details" setting must be turned on (see details below).
  • MTFlickrPhotoCommentsCount outputs the number of comments that have beeb made on the photo. For this tag to work, the "Get Photo Details" setting must be turned on (see details below).
  • MTFlickrPhotoTags is a container tag that displays each of the tags assigned to the photo. For this tag to work, the "Get Photo Details" setting must be turned on (see details below).
  • MTFlickrPhotoTagName displays the name of the tag. Must be used between <MTFlickrPhotoTags> and </MTFlickrPhotoTags> tags. For this tag to work, the "Get Photo Details" setting must be turned on (see details below).
  • MTFlickrPhotoTagURL displays the URL to the Flickr page for the tag for the photo's owner. Must be used between <MTFlickrPhotoTags> and </MTFlickrPhotoTags> tags. For this tag to work, the "Get Photo Details" setting must be turned on (see details below).
  • MTIfFlickrPhotoTags is a conditional tag - anything between the <MTIfFlickrPhotoTags>. and </MTIfFlickrPhotoTags> tags will only be displayed if the photo has one or more tags. For this tag to work, the "Get Photo Details" setting must be turned on (see details below). Here is an example of how these tags can be used to display the tags of a photo:

    <MTIfFlickrPhotoTags>
    Tags for this photo: <br /> <ul>
    <MTFlickrPhotoTags>
    <li><a href="<MTFlickrPhotoTagURL>"><MTFlickrPhotoTagName></a> </li>
    </MTFlickrPhotoTags>
    </ul>
    </MTIfFlickrPhotoTags>

FlickrPhotos Plugin Settings

The following settings can bet set on a per-blog basis. To access these settings, select the blog you want and then choose "Settings" from the menu. Then choose the "Plugins" tab. You should then see FlickrPhotos in the list of plugins - hit the settings link to display the settings. The settings are:

  • Thumbnail Size: This setting determines the size of the thumbnail images. Choice are Square, Thumbnail, Small, Medium, and Orginal. These sizes correspond to the sizes used by Flickr. The default is Thumbnail. This setting can be overidden by using the size argument as described above.
  • Link to: This setting determines where each thumbnail will link to. You can link directly to a different size of the photo (you can choose from the same sizes as above) OR you can link each photo to the Flickr page for that photo. The default is Flickr Page This setting can be overidden by using the target argument as described above..
  • Number of Photos: The default numbers of photos to display. The default is 10. You can override this by using the 'lastn' argument (for example, <MTFlickrPhotos username="John Smith" lastn="15"> )
  • Photo List Cache: The length of time to cache the list of photos. After the above time frame has passed, FlickPhotos will check with Flickr to see if there are any new photos. It is highly recommended that this setting be set to 1 hour or longer. Choosing 'none' may slow down your rebuilds considerably. You can override this setting on a case by case basis by specifying the number of seconds in the refresh argument (for example, to set the Photo List Cache to 1 hour you could use <MTFlickrPhotos username="John Smith" refresh="3600"> )
  • Photo Info Cache: The length of time to cache the detailed information for each photo (title, tags, description, number of comments, etc.). After the above time frame has passed, FlickPhotos will check with Flickr to see if there have been any changes to the photo information. It is highly recommended that this
    setting be set to 1 week or longer. Choosing 'none' may slow down your rebuilds considerably. You can override this setting on a case by case basis by specifying the number of seconds in the refresh_details argument (for example, to set the Photo Info Cache to 2 weeks you could use <MTFlickrPhotos username="John Smith" refresh_details="1209600"> )
  • Clear Cache Older Than: This setting will delete cache information about photo lists and photo details that are older than the time frame selected above. This is useful to remove data for older photos that you are no longer displaying, thus preventing your database from growing too large. It is recommended that this setting be set to 1 month or longer. Choosing 'Never' may cause your database to grow sigificantly larger, depending on how you use the plugin. IMPORTANT: With this setting, the cache will not be cleared automatically. To clear the cache you MUST return to this Plugin settings page. To prevent slow rebuilds, the cache-clearing function only runs when you access the Plugin settings page. Also note that this setting is global, meaning that it applies to photo cache data for all of your blogs.
  • Get Photo Details: If set to "On", FlickrPhotos will ask Flickr for some details about each photo. Photo details includes the following: description (<MTFlickrPhotoDescription> ), number of comments
    (<MTFlickrPhotoCommentsCount> ), owner location (<MTFlickrPhotoOwnerLocation> ), and tags (<MTFlickrPhotoTags> ). If you are not displaying these tags on your pages, you can change this setting to "Off" to improve perfomance and speed rebuild times. You can override this setting on a case by case basis by using the "fetchdetails" argument (for example, <MTFlickrPhotos username="John Smith" fetchdetails="1"> )
  • Install Sidebar Widget: Checking the box for this setting and entering a Flickr username will automatically install a Sidebar widget that displays 5 recent photos. You can then customize this by editing the "Sidebar: FlickrPhotos" template module, which will be created after checking this option. This setting works with the Sidebar Manager plugin: Learn more about Sidebar Manager.

Requirements:

  • MT 3.2
  • Flickr::API Perl Module (included in download for convenience)
  • XML:: Parser::Lite (included for convenience)
  • XML:: Parser::Lite::Tree (included for convenience)
  • XML:: Parser::Lite::Tree::XPath (included for convenience)

Download Now

Download the plugin by clicking here.

Installation

  1. Expand the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation and the contents of the 'extlib' folder to the 'extlib' folder of your MT installation.
  2. Adjust the plugin settings if desired (see above)
  3. Start using the above template tags in your templates.

If you like this plugin, please consider making a donation:

This plugun is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5. In other words, if you use this plugin, please display a "powered by Flickr Photos" link, such as the one below:

<a href="https://mt-hacks.com/flickrphotos.html" target="_blank">Powered by Flickr Photos</a>

As always, please let me know if you find any bugs, or if you have any suggestions or comments.

Flickr photos is a plugin that enables you to display thumbnail links of Flickr photos in your Movable Type blog.

You can list thumbnails by Filckr user and/or by Flickr tags. You can also control the number of thumbnails displayed and the size of the thumbnails. Each thumbnail can link to a larger version of the image, or to the Flickr page for that photo.

Here is an example of the easiest way to use FlickrPhotos in your templates:

<MTFlickrPhotos username="John Smith">
<MTFlickrPhotoLink> <br />
<br />
</MTFlickrPhotos>

The above template code will display thumbnail links for the 10 most recent photos for Flickr user "John Smith". (Tip: when entering the value for your 'username', you should use the name that appears after "Logged in as" on the top of each Flick page when you are logged in. Your user name may contain spaces - if so, be sure to include those space as I have done with "John Smith" above).

Here another example that displays thumbnail links from any user tagged with "movabletype":

<MTFlickrPhotos tags="movabletype">
<MTFlickrPhotoLink> <br />
<br />
</MTFlickrPhotos>

FlickrPhotos Template Tags

FlickrPhotos includes the following template tags:

  • MTFlickrPhotos is container tag for displaying photos. Arguments include:
    • username - restricts photos to a specific Flickr user. Required if a tags argument is not included.
    • tags - retricts photos to those with the specified tags. Multiple tags can be specified, separated by comma. Required if a username argument is not included.
    • tag_mode - specifies the method for displaying photos by the tags argument. If tag_mode is set to 'any', it will display photos with at least one on the tags specified in tags. If tag_mode is set to 'all', it will only display photos tagged with each and every one of the tags specified by tags. Optional (the default value is 'any').
    • lastn - determines the number of photos to display. Optional (default is 10 photos).
    Example tag with all arguments included: <MTFlickrPhotos username="John Smith" tags="movabletype,hacks" tag_mode="all" lastn="5">
  • MTFlickrPhotoThumb outputs the URL to the thumbnail image. The size of thumbnail is determined by the FlickrPhotos plugin settings (see below). Example usage: <img src="<MTFlickrPhotoThumb>">
  • MTFlickrPhotoURL outputs the destination URL that can be used to link each thumbnail. This URL will be to either to the Flickr photo page or directly to a different size of the photo (as determined by the plugin settings). Example usage: <a href="<MTFlickrPhotoURL>">
  • MTFlickrPhotoTitle outputs the Flickr title for the photo. This can be used as "alt" text for the thumbnails, and/or used a caption for each photo.
  • MTFlickrPhotoLInk combined each of the above tags - it outputs a linked thumbnail, using the title as the 'alt' and 'title' for the link. The link will open in a new window. This tag is the easiest way to use FlickrPhotos, becuase you don't have to write any HTML for creating the link or displaying the image.

FlickrPhotos Plugin Settings

There are two settings which you can set on a pe-blog basis. To access these settings, select the blog you want and then choose "Settings" from the menu. Then choose the "Plugins" tab. You should then see FlickrPhotos in the list of plugins - hit the settings link to display the settings. The two settings are:

  • Thumbnail Size: This setting determines the size of the thumbnail images. Choice are Square, Thumbnail, Small, Medium, and Orginal. These sizes correspond to the sizes used by Flickr. The default is Thumbnail.
  • Link to: This setting determines where each thumbnail will link to. You can link directly to a different size of the photo (you can choose from the same sizes as above) OR you can link each photo to the Flickr page for that photo. The default is Flickr Page.

Requirements:

  • MT 3.2 (it may work with earlier versions, but I have not tried)
  • Flickr::API Perl Module (included in download for convenience)
  • XML:: Parser::Lite and XML:: Parser::Lite::Tree (included for convenience)

Download Now

Download the plugin by clicking here.

Installation

  1. Expand the zip file and upload the contents of the 'plugins' folder to the 'plugins' directory of your MT installation and the contents of the 'extlib' folder to the 'extlib' folder of your MT installation.
  2. Adjust the plugun settings if desired (see above)
  3. Start using the above template tags in your templates.

As always, please let me know if you find any bugs, or if you have any suggestions or comments.

FormatList is a plugin for Movable Type that makes it easy to create bulleted or numbered lists when creating or editing entries.

FormatList adds the following two button to the formatting toolbar that appears just above the "Entry Body" and "Extended Entry" fields:

To create a bulleted list:

  • Enter the list of items, hitting enter after each line (you can leave blank lines in between list items if desired)
  • Select (highlight) the list
  • Click the button

To create a numbered list:

  1. Enter the list of items, hitting enter after each line (you can leave blank lines in between list items if desired)
  2. Select (highlight) the list
  3. Click the button

Requirements:

  • BigPAPI Plugin (For convenience, I have included this plugin in the FormatList download) (more about BigPAPI)
  • Movable Type 3.16 and higher (I think....currently tested with MT 3.2 only)

Download Now

FormatList.zip

Installation Instructions:

  1. Download and expand the zip file
  2. Upload the contents of the 'plugins' folder to the 'plugins' folder of you MT installation (there are two files, FormatList.pl and BigPAPI.pl)
  3. Upload the contents of the' images' folder to the 'images' folder within the 'mt-static' folder. This is the location of the images and docs for MT, for most people it will likely be in '/mt-static/images' (outside your cgi-bin).

I hope others find this as helpful as I do. I created this plugin becuase it was quite tedious to create list manually, and this plugin makes it really quick and easy.

Note: As you would expect, each of the lists above was created using FormatList ;)

Finally, Six Apart has launched an affiliate program for Movable Type and other products. Details about the program can be found here. Unfortunately, the program using Commission Junction, which is unfortunate, since they don't make it easy for affiliates to promote their programs and earn money. People are already having problems signing up with CJ. The Movable Type affiliate program could be a lot better, but at least its here. It has been a long time coming.

And if you would like to order Movable Type, please click here. ;)

This plugin uses Javascript to hide the true location of you comments script, making it difficult for spammers to find it in order to bombard you with spam.

It is important to note that if you use this plugin, commenters must be using a Javascript-enabled brower in order to post comments.

I have been testing this plugin on one of my blogs for about 12 hours, and I have received zero spam in that time period on that blog. I will be installing it on all my blogs today.

Installation:

1. Download Now:

DisguiseCommentURL.zip

2. Extract and upload MTDisguiseCommentURL.pl to your 'plugins' directory within your 'mt' directory.

3. Open your Individual Entry Archive template and find the following line:

<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)">

Delete <$MTCGIPath$> and <$MTCommentScript$> and replace with a fake comment URL. An example might be http://www.mydomain.com/postcomments.cgi -- but don't use this example! Make up something unique. Remember, the URL should point to a non-existent file.

2. In the same template, after the </form> tag, enter:

<$MTDisguiseCommentURL$>

3. Rebuild your Individual Archives, and you are done. Post a test comment to make sure it works.

Update (12/17/04 08:57 EST): I have just received a report that this trick does NOT work using the Safari web browser. This is likely becuase this is not the "proper" way to use BASE HREF. I will be posting a javascript version soon.

I tried this about 5 hours ago, and it works. I have received ZERO spam since I implemented this -- and I usually get hundreds a day.

The trick requires a simple template edit and works by tricking the spambots into think that your comment script is somewhere else. So when they try to spam you, they get 404 errors. Everyone else can post fine as usual.

Steps:

1. In your Individual Entry Archive, look for the following:

<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)">

and replace it with:

<base href="<$MTCGIPath$>">
<form method="post" action="<$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)">

2. Further down the page, after the </form> tag, enter:

<base href="<$MTBlogURL$>">

3. Rebuild your Indivdual Archives, and you are done.

This tricks spammers into thinking that your comment script is in the same folder as your entry. Since I starting using this, I have received zero spam and about 50 'Page Not Found' 404 errors in my web stats, presumably spambots trying to look for my comments script in the wrong places.

In combination with this, you may want to rename your comments script, just to be safe. I have not done so, but it may help.

This trick -- like many others -- is easy for the spammers to work around. If enough people start doing this, they will make adjustments to defeat it. For now, however, it is working extremely well. :D

This is a hack I began using recently, in an emergency situation. Blog comment spam was creating a huge CPU load on my web server, to the point that it was causing server crashes and CPU restrcitions from my (now former) web host. I have heard increasing report of web hosting banning the use of Movable Type on their hosting plans for the same reason.

This an MT-Blacklist hack that automatically blocks the IP address of someone trying to post commnent that matches your blacklist. It does this using htaccess, so repeated POSTs from that IP will never reach the MT scripts, thus saving your CPU.

First, let me be clear that I agree with Jay Allen and Adam Kalsey's comments about the drawbacks of IP blocking. And I recommend that you read those posts linked to in the previous sentence, before using this hack. I do disagree with the general notion that "IP banning is useless", because it can reduce the CPU load, and that it the only benefit of this hack. This hack will not reduce your blog spam. It may, however, reduce the CPU burden of MT and MT-Blacklist while spam is being checked against the (ever growing) blacklist and blocked accordingly.

Requirements:

MT 3.1+
MT-Blacklist 2.0+
Apache Web Server

Installation:

1. If you haven't done so already, read the 2 posts that I linked to in the previous paragraph. This hack is not perfect, and those posts do a job explaining some of the reasons why.

2. Open Submission.pm for editing, found in /mt/plugins/Blacklist/lib/Blacklist/App/.

3. Look for the following line:

$message = $app->translate("MT-Blacklist comment denial on '[_1]'.<br />Author: [_2]; Email: [_3]<br />[_4] matched: [_5]", MT::Util::encode_html($blog->name), $com_author, $com_email, $item_type, '<a href="'.$item_url.'">'.$matches->[0]->{item}->text.'</a>');

For me this is on line 552. After this line, add:

### AutoIPBlock
my $remote_ip = $app->remote_ip;
my $htaccess = ".htaccess";
open(DAT,">>$htaccess") || die("Cannot Open File");
print DAT "deny from $remote_ip\n";
close(DAT);
###

4. A few lines lower (now on line 561), find the following line:

$message = $app->translate("MT-Blacklist comment denial on '[_1]'.<br />Author: [_2]; Email: [_3]<br />[_4] blacklist items matched.", MT::Util::encode_html($blog->name), $com_author, $com_email, scalar(@$matches));

After this line, add:

### AutoIPBlock
my $remote_ip = $app->remote_ip;
my $htaccess = ".htaccess";
open(DAT,">>$htaccess") || die("Cannot Open File");
print DAT "deny from $remote_ip\n";
close(DAT);
###

5. Another few lines down (now at line 579), find:

$message = $app->translate("MT-Blacklist ping denial on '[_1]'.<br />Blog: [_2]; URL: [_3]<br />[_4] matched: [_5]", MT::Util::encode_html($blog->name), MT::Util::encode_html($remote_blog), MT::Util::encode_html($remote_url), $item_type, '<a href="'.$item_url.'">'.$matches->[0]->{item}->text.'</a>');

After this line, add:

### AutoIPBlock
my $remote_ip = $app->remote_ip;
my $htaccess = ".htaccess";
open(DAT,">>$htaccess") || die("Cannot Open File");
print DAT "deny from $remote_ip\n";
close(DAT);
###

6. Another few lines down (now at line 588 ) find:

$message = $app->translate("MT-Blacklist ping denial on '[_1]'.<br />Blog: [_2]; URL: [_3]<br />[_4] blacklist items matched.", MT::Util::encode_html($blog->name), MT::Util::encode_html($remote_blog), MT::Util::encode_html($remote_url), scalar(@$matches));

After this line, add:

### AutoIPBlock
my $remote_ip = $app->remote_ip;
my $htaccess = ".htaccess";
open(DAT,">>$htaccess") || die("Cannot Open File");
print DAT "deny from $remote_ip\n";
close(DAT);
###

Note: Steps 3 and 4 above are for comments, and steps 5 and 6 are for trackbacks. If you nwat to enable this hack for only comments or trackbacks, you can skip steps accordingly.

7. In your 'mt' directory (directory where your mt.cgi file lives), upload a blank file with the name of '.htaccess' (note the preceding '.')

8. Test it by posting a comment with a string known to be on your blacklist. If it works, you will be banned from posting. It will also ban your IP from accessing the MT admin area, so you need to go in via FTP and remove your IP from the .htaccess file.

That's it. This is a simple, very rudimentary hack, that should only be used in mergency situations, where CPU load has become an issue due to repeated spamming by spambots.

Note: I am not an expert when in comes to CPU load and such. I don't know how much CPU cycles are saved by this hack. I do know that it seems to help a lot when my old server was crashing frequently due to CPU load.

You may have been recently hit by several waves of Trackback spam, including a major assault over the last 24 hours. These attacks are clearly automated, sending many pings in a short period of time. Even if MT-Blacklist is effecting repelling these attacks, it can still cause problems for some. In the past few weeks, MT-Blacklist was working so hard to block all the spam that it contributed to a heavy CPU load on the server, resulting in several crashes (I have since moved to a dedicated server). So I have been looking for ways to ease the burden of MT-Blacklist. For trackback spam, one of the first things I tried was to rename my Trackback script from the default 'mt-tb.cgi', thinking maybe that's how these spammers were finding and attaching my sites. It didn't work. Within minutes, they were hitting the newly renamed script. Based on this, it seems that there must be Spam Spiders at play here, crawling the web and sending trackback spam as soon as they find trackback URLs. And since they seem to have adapted to the new name, perhaps these spiders are looking for some other pattern, perhaps the text " The Trackback URL for this entry is". I have tried changed that text on all of my blogs, but I think it might help. Instead, I decided to disguise the Trackback URL so that it would be difficult for spiders to parse and attach my sites.

MTDisguiseTrackbackURL is a mini-plugin that replaces the MT function for the <MTEntryTrackbackURL> tag that is displayed in the Trackback Listing template. MTDisguiseTrackbackURL outputs the URL using a few javascript commands, breaking up the full URL in the underlying HTML code. But as long as your visitors are using a JavaScript-enabled browser, the URL will appear the exact same way that it does now, and they can easily copy and paste the URL manually.

If you want to seem an example, view the Trackbacks page for this entry, and view source to see the JavaScript code.

Installation:

Installation is very easy:

1. Download Now:

DisguiseTrackbackURL.zip.

2. Extract the DisguiseTrackURL.pl and upload it to the 'plugins' directory within your 'mt' directory.

3. That's all. Since Trackback listing pages are dynamically displayed, you don't need to rebuild anything.

As always, feedback is appreciated.


By the way, if you haven't heard yet, a critical bug has been found in the latest version of MT-Blacklist. Don't delete any blogs! Click here for more information.

Anil Dash has posted about my forums powered by Movable Type. I started doing this more than a year ago, and I have evolved it on some sites into active forums with additional features. For example, take a look at Seinfeld Forum. As you can see, this Movable Type-powered forum has over 4,000 topics (entries) and over 15,000 replies (comments). Features include a "post count" (using the CommentLeaders plugin) and an associated status level based on post count. I recently added automication pagination of threads using my MTDynamic plugin (although I don't think I have released that version of the plugin yet). I have also added a search function that searches only the forum section of the site (using a source-modified version of MT search). Another active forum example is Mars Forum -- over 20,000 replies (comments) on that one.

I have not yet posted this to MT hacks yet, mainly because it would take a long time to document all of the steps to get this set up. I do plan to do that, but I have been very busy. Let me know if you are interested (extra motivation may help me find the time :) )

For a complete list of the new features in v0.6, click here.

MTTrackbackEntry is a Movable Type plugin and hack that enables you to create new entries from the Trackbacks that you receive. In other words, it enables other people to post new entries in your blog, simply by pinging an entry or category on your blog. The title of this plugin/hack could just as easily be called TrackbackCrosspost, since it can act as a trackback-based cross-posting tool.

Currently, entries are created AND pings are received and recorded by default. In v0.6, actual ping entries can be optionally turned off. So if you turn off pings, TrackbackEntry will only record a new entry. Personally, I can't think of many practical cases for record the ping as well - it just clutters up your database.

TrackbackEntry is especially useful when used to ping Categories rather than entries. When a category is pinged, the new entry is added to that category. This provides more control over the display of Trackback-Entries (display in sidebar, sub-page, etc.)

New: Category Creation

In v0.6, you can enable a new category creation feature. This powerful feature enables people to create entries in categories that don't yet exist on your blog. For example, ping the following:

...mt-tbentry.cgi/books

would create a new category in your blog called "books" and add the entry to that category. If your blog already has a category called "books", the entry is simply added to that category. One of the benefits of this approach is that people don't need to remember the trackback id of the category.

MT-Blacklist Support

Version 0.6 includes optional support for MT-Blacklist. I have only tested this with v 1.63rc2 with MT 2.661. When this option is turned on, incoming pings are scanned against your blacklist just like a real trackback. This option is off by default.

Template Tags

There are only two new tags provided (because most of functionality lies in the scripts, not in the plugin itself). The following tags enable you to output the TrackbackEntry URLs for entries and categories:

<MTEntryTrackbackEntryLink> - Similar to <MTEntryTrackbackLink>, this tag will display the TrackbackEntry URL for a particular entry. Others can use this URL to to send a TrackbackEntry ping, which will create a Trackback record for the entry and create a new entry in the blog.

<MTCategoryTrackbackEntryLink> - Similar to <MTCategoryTrackbackLink>, this tag will display the TrackbackEntry URL for a particular category. Others can use this URL to to send a TrackbackEntry ping, which will create a Trackback record for the category and create a new entry in the category.

Requirements

Net::Blogger - Sorry, I neglected to mention this is the first release.

Installation

1. Download Now:

MTTrackbackEntry.zip and extract the files.

2. Place "mt-tbentry.cgi" in your MT directory (same directory as mt.cgi). Then CHMOD to 755.

3. Place "TrackbackEntry.pl" in your "plugins" directory within your MT directory.

4. Create a new user to be be used for Trackback-Entries. Make note of the username and password. Give the user permisions to post and rebuild files on each of the blogs that you want to enable TrackbackEntry.

5. Open "TrackbackEntry.pm" and find the line that reads:

my $mt_username = 'tbentriesusername';

Replace 'tbentriesusername' with the user name chosen in Step 4 (the username should be enclosed in single quotes). (remember that MT usernames are case-sensitive)

6. Just below this line, you should find the following line:

my $mt_password = 'tbentriespassword';

Replace 'tbentriespassword' with the password chosen in Step 4 (the password should be enclosed in single quotes).

7. Search for "OPTIONS" and choose the options that you want by setting them to 1 or 0. Options include: create new category, default blog, default category, use MT-Blacklist, and create trackback.

8. Save the file and upload to '/lib/MT/App/' within your MT directory (same directory as "Trackback.pm")

9. Begin using the tags described above to inform your visitors of the TrackbackEntry URLs for your entries and categories.

10. Test it out be asking someone to send you a TrackbackEntry ping. (If you want me to send you a test ping, let me know)

Displaying TrackbackEntries

For displaying TrackbackEntries, it is important to understand what data gets stored in which entry fields:

-the Ping Excerpt gets stored in the Entry Body field.
-the Ping Blog Name gets stored in the Extended Entry field.
-the Ping Source URL gets stored in the Excerpt field.
-the Ping Remote IP gets stored in the Keyworda field.

As such you can use the associated MT template tags to display the entries. If you want to display a list of entries that are mixed between your own entries and TrackbackEntries, you may want to make use of the Compare plugin like this:

<MTIfNotEqual a="[MTEntryAuthor]" b="tbentriesusername">
<a href="<$MTEntryAuthorURL$>"><$MTEntryAuthor$></a>
</MTIfNotEqual>
<MTIfEqual a="[MTEntryAuthor]" b="tbentriesusername">
<MTIfEqual a="[MTEntryExcerpt no_generate='1']" b="">
<$MTEntryMore convert_breaks="0"$>
</MTIfEqual>
<MTIfNotEqual a="[MTEntryExcerpt no_generate='1']" b="">
<a href="<$MTEntryExcerpt no_generate="1"$>"><$MTEntryMore convert_breaks="0"$></a>
</MTIfNotEqual>
</MTIfEqual>

The above template snippet displays a linked version of the author's. In the case of TrackbackEntries, the blog name is used as the author name and the source URL is used as the author URL.

Please let me know what you think.

Version History

0.5
-Initial release
0.6
-recording of trackback is now optional
-category creation
-MT-Blacklist support

MTTrackbackEntry is a Movable Type plugin and hack that enables you to create new entries from the Trackbacks that you receive. In other words, it enables other people to post new entries in your blog, simply by pinging an entry or category on your blog. The title of this plugin/hack could just as easily be called TrackbackCrosspost, since it can act as a trackback-based cross-posting tool.

Currently, entries are created AND pings are received and recorded. This means that TrackbackEntry will receive and record pings the same as usual, but it will also add a new entry. Perhaps a future version will only add new entries, or at least provide an option in this area.

TrackbackEntry is especially useful when used to ping Categories rather than entries. When a category is pinged, the new entry is added to that category. This provides more control over the display of Trackback-Entries (display in sidebar, sub-page, etc.)

Template Tags

There are only two new tags provided (because most of functionality lies in the scripts, not in the plugin itself). The following tags enable you to output the TrackbackEntry URLs for entries and categories:

<MTEntryTrackbackEntryLink> - Similar to <MTEntryTrackbackLink>, this tag will display the TrackbackEntry URL for a particular entry. Others can use this URL to to send a TrackbackEntry ping, which will create a Trackback record for the entry and create a new entry in the blog.

<MTCategoryTrackbackEntryLink> - Similar to <MTCategoryTrackbackLink>, this tag will display the TrackbackEntry URL for a particular category. Others can use this URL to to send a TrackbackEntry ping, which will create a Trackback record for the category and create a new entry in the category.

Installation

1. Download Now:

MTTrackbackEntry.zip and extract the files.

2. Place "mt-tbentry.cgi" in your MT directory (same directory as mt.cgi). Then CHMOD to 755.

3. Place "TrackbackEntry.pl" in your "plugins" directory within your MT directory.

4. Create a new user to be be used for Trackback-Entries. Make note of the username and password. Give the user permisions to post and rebuild files on each of the blogs that you want to enable TrackbackEntry.

5. Open "TrackbackEntry.pm" and find the line that reads:

my $mt_username = 'tbentriesusername';

Replace 'tbentriesusername' with the user name chosen in Step 4 (the username should be enclosed in single quotes). (remember that MT usernames are case-sensitive)

6. Just below this line, you should find the following line:

my $mt_password = 'tbentriespassword';

Replace 'tbentriespassword' with the password chosen in Step 4 (the password should be enclosed in single quotes).

7. Save the file and upload to '/lib/MT/App/' within your MT directory (same directory as "Trackback.pm")

8. Begin using the tags described above to inform your visitors of the TrackbackEntry URLs for your entries and categories.

9. Test it out be asking someone to send you a TrackbackEntry ping. (If you want me to send you a test ping, let me know)

Displaying TrackbackEntries

For displaying TrackbackEntries, it is important to understand what data gets stored in which entry fields:

-the Ping Excerpt gets stored in the Entry Body field.
-the Ping Blog Name gets stored in the Extended Entry field.
-the Ping Source URL gets stored in the Excerpt field.
-the Ping Remote IP gets stored in the Keyworda field.

As such you can use the associated MT template tags to display the entries. If you want to display a list of entries that are mixed between your own entries and TrackbackEntries, you may want to make use of the Compare plugin like this:

<MTIfNotEqual a="[MTEntryAuthor]" b="tbentriesusername">
<a href="<$MTEntryAuthorURL$>"><$MTEntryAuthor$></a>
</MTIfNotEqual>
<MTIfEqual a="[MTEntryAuthor]" b="tbentriesusername">
<MTIfEqual a="[MTEntryExcerpt no_generate='1']" b="">
<$MTEntryMore convert_breaks="0"$>
</MTIfEqual>
<MTIfNotEqual a="[MTEntryExcerpt no_generate='1']" b="">
<a href="<$MTEntryExcerpt no_generate="1"$>"><$MTEntryMore convert_breaks="0"$></a>
</MTIfNotEqual>
</MTIfEqual>

The above template snippet displays a linked version of the author's. In the case of TrackbackEntries, the blog name is used as the author name and the source URL is used as the author URL.

Please let me know what you think.

Movable Type includes templates for the total number of comments in a blog (MTBlogCommentCount) and the total number of comments on an entry (MTEntryCommentCount). But there is no similar template tag for the total number of comments in a category. This template provides this tag: MTCategoryCommentCount.

Installation

1. Download Now:

MTCategoryCommentCount.zip.

2. Start using the <MTCategoryCommentCount> tag in a Category context, to output the total number of comments in a Category.

Example

On my Google Forum page, the tables list both "Topics" and "Replies". Topics are Entries and Replies are Comments. I used the <MTCategoryCommentCount> to generate the number of replies in each Forum (Category).

1. Start with one of your blogs (any blog, it doesn't matter)

2. Create a new Template Module.

3. In the "Link this template to a file" field, enter a file system path and file name to save the template text. For shared template modules, I save them all to a "shared" directory and give each file a "txt" extension.

4. Save the template module.

5. Go to another blog that you also want to use the shared template and create a new template module.

6. Don't put anything in the body of the template module.

7. Give the template module a name and specifiy the *same* path and file name in the "Link this template to a file" field.

8. Save the template. You will see the template module code from the first blog appear in the body.

9. At this point you can modify the template code from any of your blogs and it will be updated across all blog using the module.

This plugin is designed to be used with MT-BlackList. The plugin gives you the ability easily see stats about what is being blocked by your blacklist, including the ability to summarize and rank blacklist entries.

BlacklistStats is an adaptation of the Searches plugin by David Raynes. 99.9% of the credit goes to David, as I modified only a very small portion of the code to create this plugin.

Instructions

1. Download the plugin:

blackliststats.zip

2. Upload the "blackliststats.pl" file to the plugins directory in your MT installation.

3. Begin using the template tags described below

Template Tags

MTBlacklistStats - A container tag used for displaying statistics about your blacklist activity. The tags below must be used within an MTBlacklistStats container.

arguments:

days: to include blocks from only the last n days (e.g. <MTBlacklistStats days="7">)
lastn: to include n searches in the list (e.g. <MTBlacklistStats lastn="5">)
unique: to include only the latest instance of a particular blacklist entry (e.g. <MTBlacklistStats unique="1">)
rank: orders the blacklist entries by rank, the most common being the first (e.g. <MTBlacklistStats rank="1">), implies unique

MTBlacklistValue - The blacklist entry that caused the comment/trackback to be blocked (ie. viagra.com).

MTBlacklistDate - The date that the comment was blocked. This tag takes a "format" argument, which works the same as MT Date formats.

MTBlacklistIP - The IP address of the person (or server) of the blocked comment/trackback.

MTBlacklistBlog - The name of the blog on which the blog occured. This is useful if you have more than one blog.

MTBlacklistType - The type of block: 'comment' or 'trackback'

MTBlacklistRank - The rank of the blacklist entry. For example, the blacklist entry that resulted in the highest number of blocks would be ranked #1.

MTBlacklistTotal - The total number of blocks for a blacklist entry. For example if 5 comments were blocked containing "viagra.com", this tag would have a value of 5.

Also included in the zip file is a sample template. The template creates two tables:

Blacklist Stats - lists each block by date, most recent listed first.

Rankings - lists each blacklist entry, ranked from the most blocks to the least.

You may need to adjust the stylesheet and image paths. I used the stylesheet used by the MT admin interface.

Notes:

1. If you want keep your stats private, be sure to build the stats file in a protected area.

2. It may be a good idea to uncheck "Rebuild this template automatically..." and just manually rebuild the stats from time to time (especially if you have a large activity log).

3. The plugin pulls data from the activity log. If you reset the activity log, your BlacklistStats will also be reset.


There are a number of different implementations of Smileys :) for Movable Type. Here's mine.

The smilieys that I use on most of my sites display in both the entries and comments. The smileys images and javascript are borrowed from phpBB. For comments, the smileys are displayed above the comment form, enabled the comment author to click on a smiley to include with their comments.

Instructions

1. The MTMacro plugin is required for the smileys to work. If you don't already have it, click here to get it.

2. Download the smiley images and templates: mt-smiley.zip

3. Upload the smiley images to a folder called "images". This folder should reside within the local site path of your blog.

4. Create a Template Module called "smiley javascript". (If you have never created a Template Module before, go to your Templates page, and scroll all the way to the bottom, below the Miscellaneous Templates). In the body of the "smiley javascript" Template Module, cut and paste the text from the "smiley-javascript.txt" file.

5. Create a Template Module called "smiley macros". Cut and paste the text from the "smiley-macros.txt" file into the new template module.

Note: If you want to place the smiley images in location other than an "images" subfolder of your blog, you need to edit the path of each "img" tag in this module.

6. If you want to display "clickable smileys" above your comment submission form, create a Template Module called "smileys". In it, cut and paste the text from the "smileys.txt" file.

Note: If you want to place the smiley images in location other than an "images" subfolder of your blog, you need to edit the path of each "img" tag in this module.

7. To make the clickable smileys appear on the comment submission form, open your comment listing template. Within the <HEAD> tags, cut and paste the following:

<$MTInclude module="smiley javascript"$>

Now find the line that reads:

<label for="forget">No</label>

After that line, cut and paste the following and save the template:

<br /><br />

<$MTInclude module="smileys"$>

8. To make the smileys appear in entries and comments, add the following line to the top of every template where you want smileys to show (ie. Main Index, Comment Listings, Comment Preview, Individual Archives, etc.):

<$MTInclude module="smiley macros"$>

9. To apply the Smiley Macros to your entries and comments you need to enclose them with MTMacroApply tags. For example, for entry text you would edit your templates as follows:

<MTMacroApply><MTEntryBody></MTMacroApply>

And for comment text:

<MTMacroApply><MTCommentBody></MTMacroApply>

10. Rebuild your site.

And that's it - 10 steps to MT Smileys. Let me know if any of that didn't make any sense. :) :) :)

MTDynamic is a Movable Type plugin that is designed to facilitate the dynamic rendering of Movable Type blogs, using URL parmaters to control the display of entries and comments.

Download (v0.6)

Installation

1. Movable Type ships with a dynamic viewer (mt-view.cgi), which is described as an "experimental feature". To use to the viewer, you must turn "SafeMode" off. To do this, edit your "mt.cfg" file such that it includes the following:

SafeMode 0

There should already be a SafeMode section near the bottom of the cfg file.

2. Download and extract Dynamic.pl to your hard drive.

3. Upload Dynamic.pl to the "plugins" directory in your MT Installation.

Template Tags

MTDynamic creates two new tags, <MTDynamicEntries> and <MTDynamicComments>. These tags can be used in the same manner as MTEntries and MTComments - the tags will work in both static and dynamic views.

To use with the MT dynamic viewer, you need to use a path like:

http://www.yourdomain.com/path_to_mt/mt-view.cgi/1/index.html

where the number is the Blog ID of the blog. Index templates can be accessed using this format.

Now you can use URL paramters in the format of ?argument=value to control the entries that are displayed. Any of the MTEntries arguments can be used*. For example:

mt-view.cgi/1/index.html?lastn=10&category=Links

will display the last 10 entries posted by John.

*Note: to specify an author argument in the URL, you need to use a parameter called "entry_author". This is to avoid conflicts with the comment "author" parameter used with comment submissions.

Update (v0.6): To specify an "offset" argument in the URL, you need to use a paramter called "dyn_offset". This is to avoid conflicts with the "offset" parameter used with "rebuild files" tool.

To access individual entry pages using the dynamic viewer, use a path like:

http://www.yourdomain.com/path_to_mt/mt-view.cgi/1/entry/123

where "1" is the blog ID and "123" is the Entry ID.

MTDynamicComments includes two new arguments: start and show. I found that the "lastn" and "offset" approach can get confusing when listing comments, because usually you want to show them in ascending order. The "start" and "show" simplifies this:

start - the first comment to be displayed (chronologically)

show - the total number of comments to be displayed

Using this logic, ?start=11&show=10 will display comments 11 through 20. This can be useful for displaying blog entries with a lot of comments.

What if an argument is defined in the template AND in an URL parameter? In this case, the URL parameter value will override the value defined in the template. This enables you to create templates that can be used in both static and dynamic formats. For example, your home page might be presented in a static format, but you could provide filtered views of the home page using dynamic paths with parameters.

Examples

Using my Mars Rover Blog as an example, see that the home page contains blog entries and photos by two authors: Spirit and Opportunity. You can use MTDynamic to offer filtered views of the home page (note the path and URL parameters):

Only Spirit's blog entries and photos
Only Opportunity's blog entries and photos


This is my first plugin. I am sure there are bugs, please report any strange behaviour. Any and all comments, feedback, and suggestions are welcome.

MTDynamic is a Movable Type plugin that is designed to facilitate the dynamic rendering of Movable Type blogs, using URL parmaters to control the display of entries and comments.

Download (v0.5)

Installation

1. Movable Type ships with a dynamic viewer (mt-view.cgi), which is described as an "experimental feature". To use to the viewer, you must turn "SafeMode" off. To do this, edit your "mt.cfg" file such that it includes the following:

SafeMode 0

There should already be a SafeMode section near the bottom of the cfg file.

2. Download and extract Dynamic.pl to your hard drive.

3. Upload Dynamic.pl to the "plugins" directory in your MT Installation.

Template Tags

MTDynamic creates two new tags, <MTDynamicEntries> and <MTDynamicComments>. These tags can be used in the same manner as MTEntries and MTComments - the tags will work in both static and dynamic views.

To use with the MT dynamic viewer, you need to use a path like:

http://www.yourdomain.com/path_to_mt/mt-view.cgi/1/index.html

where the number is the Blog ID of the blog. Index templates can be accessed using this format.

Now you can use URL paramters in the format of ?argument=value to control the entries that are displayed. Any of the MTEntries arguments can be used*. For example:

mt-view.cgi/1/index.html?lastn=10&category=Links

will display the last 10 entries posted by John.

*Note: to specify an author argument in the URL, you need to use a parameter called "entry_author". This is to avoid conflicts with the comment "author" parameter used with comment submissions.

To access individual entry pages using the dynamic viewer, use a path like:

http://www.yourdomain.com/path_to_mt/mt-view.cgi/1/entry/123

where "1" is the blog ID and "123" is the Entry ID.

MTDynamicComments includes two new arguments: start and show. I found that the "lastn" and "offset" approach can get confusing when listing comments, because usually you want to show them in ascending order. The "start" and "show" simplifies this:

start - the first comment to be displayed (chronologically)

show - the total number of comments to be displayed

Using this logic, ?start=11&show=10 will display comments 11 through 20. This can be useful for displaying blog entries with a lot of comments.

What if an argument is defined in the template AND in an URL parameter? In this case, the URL parameter value will override the value defined in the template. This enables you to create templates that can be used in both static and dynamic formats. For example, your home page might be presented in a static format, but you could provide filtered views of the home page using dynamic paths with parameters.

Examples

Using my Mars Rover Blog as an example, see that the home page contains blog entries and photos by two authors: Spirit and Opportunity. You can use MTDynamic to offer filtered views of the home page (note the path and URL parameters):

Only Spirit's blog entries and photos
Only Opportunity's blog entries and photos


This is my first plugin. I am sure there are bugs, please report any strange behaviour. Any and all comments, feedback, and suggestions are welcome.


This is a new site where I plan post some of the "MT Hacks" that I use on my sites. For this purpose, I define hacks very broadly: to mean any type of non-standard use of Movable Type. This will include some template designs, scripts, plugins, and ideas. I am not that well versed in Perl - though I am learning. For this reason, some of the plugins that I will post here will be adaptations of other plugins or existing MT functions -- and I am sure that much of the code written by me will be far from perfect. I hope to post my first plugin very soon...