カスタムフィールド

カスタムフィールドで改行を反映させる

<$カスタムフィールド名  nl2br="xhtml"$>

で、カスタムフィールドに入力した改行が反映されます。
この作業は、MT構築の最初のほうに行ったほうがいいですよね。

グループでMTを触って作業していると、担当者のクセで<br />を多用したりする人なんかいたりすることもあり、

途中で設定すると、えらくスカスカで縦のエントリーになってしまうので。
ケンカのもとです。

カスタムフィールドに入力があったら表示

すごく、今さらな感じのエントリーですが、
あれ、どうだっけ。。。となることが多いので覚書

カスタムフィールドに入力があったら表示
なければブロックごと非表示

<mt:If tag="Entrymarumaru">
<img src="./img/marumaru.gif" alt="まるまる" />
<p><$mt:Entrymarumaru$></p></mt:If>

MultiBlog駆使!その1

今、データ集計をMTでやってます。

Aというデータの中に、複数の個別のデータが入っています。
Bというデータの中にも、複数の個別データが入っています。
Cというデータの中にも、複数の個別データが入っています。

A、B、C...Zまでの属性の一覧表示。
それぞれのデータを一番上の、システムのカスタムフィールドで分けて仲間ごとに表示。
などなど。。。

ポータルサイトの要領ですね。
kaisouimg.gif

困った点がいくつかあります。

<1>検索機能に、システムのカスタムフィールドが引っかかってくれない。
<2>ブログをカスタムフィールドでそれぞれの性格を分けて、それを集計して該当するデータの個数を表示する。ってのが出来ない。
まだまだありますが。。。順番に


<1>については、MTタグでやるには結構大変だったので、フリーの検索CGIのを設置しました。

お薦めCGIこちら。
SYNCKGRAPHICA|札幌ホームページ制作と無料メールフォームCGI

すごく面白いから、一度使ってみてください。
MTとも相性が良いです。(*^^)v


MTはMTで構築して、別のプログラムをかませてあげるってとこが、我ながらいい考え♪

再構築エラーに続く、サインインできない状態を脱出

MTOSでカスタムフィールドのプラグインいじってたら、突然エラーが出てにっちもさっちもいかない状態に。
サインアウトして入りなおそうとしたら、サインインもエラーが出る始末。
青くなりました。。。

Statement has no result columns to bind (perhaps you need to successfully call execute first)

エラーを検索したら、以下のサイトにお助けいただけました。



カテゴリ名を変更した後に、テンプレ内に旧カテゴリ名が入っていた場合に、再構築がエラーメッセージとともにはじかれて再構築不能になってました。


私の場合は、プラグイン中のカスタムフィールド名をコピペで増やして改名したのが、改名のし忘れあり、フィールド名のバッティングによって起こったらしいです。
FTPでファイルを変更前に戻したら、直りました。

何にせよ。バックアップ。
それが一番大事。

検索結果ページを分割するプラグイン「DivPages」

「SearchEntries」でできた検索結果ページには、「PageBute」プラグインでのページ分割が効きません。
そこで検索結果ページ用のページ分割プラグインをインストールして設定します。

DivPages 
http://www.h-fj.com/blog/archives/2005/07/08-130132.php 

詳しくは上記制作者のサイトを参照ください。

これも優れたプラグインです!
使いやすい。

カスタムフィールドを検索するプラグイン「SearchEntries」

MT標準の検索プログラム、<$mt:SearchScript$>では、カスタムフィールドの検索はできません。
プラグインが必要になります。

検索するとまず上がってくるのは、ToI企画さんの「CustomFieldsSearchだと思います。結構有名ですね。
しかし、MTOSでカスタムフィールドをプラグインで作った場合、上記プラグインは使えないようです。
エラーが出ます。

私は藤本 壱さんの「MTOS活用テクニック」を参考にカスタムフィールドを作っています。
mtosbook.jpg

この本の中に、この本を参考に作ったカスタムフィールドを検索するプラグインを紹介しています。
それが「SearchEntries」です。

ダウンロードは以下からできます。
http://www.h-fj.com/blog/archives/2010/04/03-102819.php

ただし、サイトに載っている情報は、MT標準のカスタムフィールドにしか対応していません。
「MTOS活用テクニック」を使っている人は、この本に出てくるタグを使わないとエラーが出ます。

素晴らしいプラグインです!
そして素晴らしい参考書です!!
激お薦め。

PostTweetでハッシュタグを入れる

ツイッターに連動させたので、ツイートにハッシュタグを入れたいというご要望にお応えし、方法を考えてみました。

新しくハッシュタグ用の<$mt:entryhash$>というカスタムフィールドを作ります。そこに前のつぶやき通り、大文字で#を入れた後にタグを入力してPostTweetを再投稿します。

これだけでは反映されないので、pluginsフォルダ内、「PostTweet/tmpl/message_format.tmpl」をエディタで開いて修正します。

---------
<mt:setvar name="title_len" value="100" />

<mt:setvarblock name="title"><mt:entrytitle remove_html="1" /></mt:setvarblock>

<mt:setvar name="category_len" value="100" />

<mt:setvarblock name="category"><$mt:CategoryLabel cutfirstchar="3"$></mt:setvarblock>

<mt:setvarblock name="link"> | <mt:entryshortenedpermalink /></mt:setvarblock>

<mt:setvarblock name="link_len"><mt:var name="link" count_characters="1" /></mt:setvarblock>

<mt:setvar name="entryBody_len" value="50" />

<mt:setvarblock name="entryBody"> | <$mt:EntryBody$></mt:setvarblock>

<!--これを追加-->
<mt:setvar name="entryhash_len" value="20" />

<mt:setvarblock name="entryhash"><$mt:Entryhash$></mt:setvarblock>
<!--これを追加 おわり-->

<mt:setvar name="title_len" op="|" value="$link_len" />

<!--ここもentryhashを入れて修正-->
<mt:var name="title" trim_to="$title_len" /><mt:var name="category" />&nbsp;<mt:var name="entryhash" /><mt:var name="link" /><mt:var name="entryBody" trim_to="38"$>...
<!--ここも修正 おわり-->

----------


最後の一文で<mt:var name="entryhash" />の前に&nbsp;を入れないと、ハッシュタグは機能しません。ご注意を。

プラグイン「PostTweet」でtwitter連動

PostTweetの導入方法はこちらをご覧ください。
http://m-logic.co.jp/mt-plugins/posttweet/docs/1.0.3/posttweet.html

結構簡単に、組み込めるプラグインです。

ディフォルトだと、ツイッターにはタイトルとURLしか表示されません。
そこに、カテゴリと、カスタムフィールドのテキストを表示するよう、カスタマイズしてみました。

FTPで、mtルートのpluginsフォルダ内、「PostTweet/tmpl/message_format.tmpl」をエディタで開きます。

**デフォルトでは、以下です。**

------------------------
<mt:setvar name="title_len" value="140" />

<mt:setvarblock name="title"><mt:entrytitle remove_html="1" /></mt:setvarblock>

<mt:setvarblock name="link"> - <mt:entryshortenedpermalink /></mt:setvarblock>

<mt:setvarblock name="link_len"><mt:var name="link" count_characters="1" />
</mt:setvarblock>

<mt:setvar name="title_len" op="-" value="$link_len" />

<mt:var name="title" trim_to="$title_len" /><mt:var name="link" />
------------------------



**カテゴリと<$mt:Entry006$>を表示できるようにしたのが以下です。
<$mt:Entry006$>は40文字以降は...で省略します。**

------------------------
<mt:setvar name="title_len" value="100" />

<mt:setvarblock name="title"><mt:entrytitle remove_html="1" /></mt:setvarblock>

<mt:setvar name="category_len" value="100" />

<mt:setvarblock name="category"><$mt:CategoryLabel></mt:setvarblock>

<mt:setvarblock name="link"> | <mt:entryshortenedpermalink /></mt:setvarblock>

<mt:setvarblock name="link_len"><mt:var name="link" count_characters="1" /></mt:setvarblock>

<mt:setvar name="entry006_len" value="50" />

<mt:setvarblock name="entry006"> | <$mt:Entry006$></mt:setvarblock>

<mt:setvar name="title_len" op="|" value="$link_len" />

<mt:var name="title" trim_to="$title_len" /><mt:var name="category" /><mt:var name="link" /><mt:var name="entry006" trim_to="40"$>...
------------------------



**カテゴリと<$mt:Entry006$>か<$mt:Entry001$>を表示できるようにしたのが以下です。
<$mt:Entry00n$>は40文字以降は...で省略します。
カテゴリは頭に3けたの連番をつけてソートしているので、その番号を消して表示します。**

------------------------
<mt:setvar name="title_len" value="100" />

<mt:setvarblock name="title"><mt:entrytitle remove_html="1" /></mt:setvarblock>

<mt:setvar name="category_len" value="100" />

<mt:setvarblock name="category"><$mt:CategoryLabel cutfirstchar="3"$></mt:setvarblock>

<mt:setvarblock name="link"> | <mt:entryshortenedpermalink /></mt:setvarblock>

<mt:setvarblock name="link_len"><mt:var name="link" count_characters="1" /></mt:setvarblock>

<mt:setvar name="entry006_len" value="50" />

<mt:setvarblock name="entry006"> | <$mt:Entry006 blog_id="6"$></mt:setvarblock>

<mt:setvar name="entry001_len" value="50" />

<mt:setvarblock name="entry001"><$mt:Entry001 blog_id="5"$></mt:setvarblock>

<mt:setvar name="title_len" op="|" value="$link_len" />

<mt:var name="title" trim_to="$title_len" /><mt:var name="category" /><mt:var name="link" /><mt:var name="entry006" trim_to="40"$><mt:var name="entry001" trim_to="40"$>...
------------------------
上記は、MTの中に複数のブログが入っていて、同じツイッターに連動させる時にこのような設定をします。

ツイッターに記事が現れると、最初めっちゃ感動します。


MTOSで、カテゴリに画像を割り当てる

カテゴリごとに画像を割り当てます。
正確に言うと、カテゴリの管理画面に、カスタムフィールドを追加します。
カテゴリと対になるもので、テキスト入力出来るものを作ります。ここに画像のファイル名を入力して、テンプレート側で画像が表示できるHTMLタグを設定しておきます。

参照ページはこちらです。(感謝)
Under the Bridge
MT4.1:プラグイン作成におけるDBへのフィールド追加について(カテゴリ編)
http://www.apstars.com/blog/215/mt41db_1.php


具体的には以下です。

<1>プラグイン作成
---------------------------
package MT::Plugin::SubitemCat;
use base 'MT::Plugin';

use strict;

use MT;
use MT::Plugin;
use MT::Template::Context;
use MT::Entry;

# register plugin
my $plugin = __PACKAGE__->new({
    name => 'SubitemCat',
    key => 'SubitemCat',
    version => '1.00',
    author_name => 'your name',
    description => 'Sub item of Cat',
    schema_version => '1.00',
});
MT->add_plugin($plugin);

# initialize registry
sub init_registry
{
    my $plugin = shift;
    $plugin->registry({
        object_types => {
           'category' => {
              'sort_index_custom' => 'string(255)',
           },
        },
        tags => {
            function => {
                'CategorySortIndex' => sub{&_hdlr_sort_index_custom;},
            },
        },
    });
    
}

sub _hdlr_sort_index_custom {
    my ($ctx, $args) = @_;
    my $tag = 'CategoryIndexAdd';
    (my $category = $ctx->stash('category')) || return $ctx->_no_category_error('MT' . $tag);
    return $category->sort_index_custom || '';
}

1;
-----------------------------

これで CategorySortIndex というMTタグが存在するようになります。
SubitemCat.plとして、mtフォルダ直下「plugins」ディレクトリに入れます。
任意で「SubitemCat」などの名前のフォルダに入れます。

次に管理画面にカスタムフィールドを表示させるためのファイルを作ります。
mt直下「tmpl」内「cms」内の「edit_category.tmpl」をダウンロード、以下ソースを追加します。


------------------------------
(省略)
    <fieldset>
        <h3><__trans phrase="Outbound TrackBacks"></h3>
<mtapp:setting
    id="ping_urls"
    label="<__trans phrase="Trackback URLs">"
    hint="<__trans phrase="Enter the URL(s) of the websites that you would like to send a TrackBack to each time you create an entry in this category. (Separate URLs with a carriage return.)">"
    help_page="categories"
    help_section="categories_urls_to_ping">
    <textarea name="ping_urls" id="ping_urls" cols="" rows="" class="full-width short"><mt:var name="ping_urls" escape="html"></textarea>
</mtapp:setting>
    </fieldset>



<!-- ここから追加部所 Category Sort Add -->
    <fieldset>
    <h3>Input Category Sort Index</h3>
<mtapp:setting
    id="sort_index_custom"
    label="Category Sort Index Input">
    <div class="textarea-wrapper">
        <input name="sort_index_custom" id="sort_index_custom" class="full-width" maxlength="100" value="<mt:var name="sort_index_custom" escape="html">" class="wide" />
    </div>
</mtapp:setting>
    </fieldset>
<!-- ここまで追加部所 Category Sort Add -->







<mt:setvarblock name="action_buttons">
    <button
        type="submit"
        accesskey="s"
        title="<__trans phrase="Save changes to this category (s)">"
        class="save action primary-button"
        ><__trans phrase="Save Changes"></button>
</mt:setvarblock>
<mt:include name="include/actions_bar.tmpl" bar_position="bottom" hide_pager="1" settings_bar="1">
</form>

</div>
<mt:include name="include/footer.tmpl">

------------------------------

保存したら、mt直下「alt-tmpl」内「cms」内にアップします。そうすると、MTが優先的にそちらを読みに行きます。

管理画面「.../mt/mt.cgi」に再度サインインすると、バージョンアップを知らせる画面が現れると思います。そうしたらまずは成功。
カテゴリの管理画面を見てみると「Category Sort Index Input」というタイトルのカスタムフィールドが新しくあると思います。

テキストも入力できますが、今回は画像のファイル名を入力しておきます。
画像もアイテムやFTPを使ってアップしておきます。

最後にテンプレートのカテゴリ表示に以下のようなHTMLタグを追加します。。
--------------------------------

<mt:Entries>

<mt:IfNonEmpty tag="EntryCategories">
<mt:EntryCategories>

<img src="<$mt:BlogURL$>/img/<$mt:CategorySortIndex$>" alt="<$mt:CategoryLabel$>" />

</mt:EntryCategories>
</mt:IfNonEmpty>
                            
</mt:Entries>

--------------------------------

上記で、指定した画像にカテゴリ名のaltが入って表示されます。

利用方法としては、カテゴリのリスト表示などで個別のアイコン画像を頭につけたりとか、リスト自体を画像で組んだり出来ますね。

長くなってすみません。

別ブログの特定のカテゴリをインクルード

別のブログの、あるカテゴリだけ表示したい。

以下の要領で組みます。
-------
<mt:Entries include_blogs="ブログID" category="表示したいカテゴリ">

<$mt:EntryTitle$>
<$mt:EntryBody$>
などの内容

</mt:Entries>
--------
大元のページでは</mt:Entries>をh2にしてたけど、インクルードのページでは別のカスタムフィールドをh2で表示、なんてこともできますね。