MTの記事一覧ページで画像表示する際の画像指定の仕方について

()
久々のエントリー。

MTに愛想を尽かせて、WPを趣味で始めようとしています。

さて、表題の件、

MTのアーカイブページにおいて、

各記事の内容を
記事の中の画像1枚とタイトルと概要と詳細を見るボタンなんかでレイアウトしている場合の話。

例えば
http://www.cyzo.com/cat15/
のページのような感じ。

画像表示に関しては、

<MTEntryAssets type="image">

このタグを使うかと思いますが、

これだけだと記事の中で複数枚画像があるとき、最後に登録した画像が勝手に表示されてしまうんですよね。

アーカイブページで意図した画像を表示させる場合には画像登録時のファイルオプションで、
例えば@一覧表示なんていうタグを入力しておいて、

<MTEntryAssets type="image" tag="@一覧表示">

とさせたりすればよいですが、

毎回記事の登録時にどれか1枚アーカイブページで表示させる画像を選択するのも面倒なので、特にタグがつけられていない場合は自動的に最初に登録した画像を表示させたかったりします。

これが意外に面倒でしたよ。

以下解決策のソース例。
※SyntaxHighlighterの調子が悪いんで、MTのエディターに入れて確認してみてください。

<mt:SetVarBlock name="ichiranImg">0</mt:SetVarBlock>
<mt:ignore>まず変数ichiranImgに0を格納しておく</mt:ignore>

<mt:EntryAssets type="image" tag="@一覧表示">
    <mt:SetVarBlock name="ichiranImg"><mt:AssetProperty property="image_width"></mt:SetVarBlock>
    <mt:ignore>@一覧表示タグがある画像があればichiranImgに1以上の数字が入る</mt:ignore>
</mt:EntryAssets>

<mt:if name="ichiranImg" gt="1">
    <mt:ignore>ichiranImgに1以上あれば@一覧表示タグのある画像があるということなので、それを表示</mt:ignore>
   
    <mt:EntryAssets type="image" tag="@一覧表示">
        <mt:SetVarBlock name="tmpImgW1"><mt:AssetProperty property="image_width"></mt:SetVarBlock>
        <mt:SetVarBlock name="tmpImgH1"><mt:AssetProperty property="image_height"></mt:SetVarBlock>
            <mt:if name="tmpImgW1" gt="$tmpImgH1">
                <mt:ignore>横幅の方が大きい画像の場合の内容をここに入れる</mt:ignore>
            <mt:elseif name="tmpImgH1" gt="$tmpImgW1">
                <mt:ignore>縦幅の方が大きい画像の場合の内容をここに入れる</mt:ignore>
            <mt:else>
                <mt:ignore>正方形画像の場合の内容をここに入れる</mt:ignore>
            </mt:if>
    </mt:EntryAssets>

<mt:else>

    <mt:ignore>0だった場合、@一覧表示タグのある画像がないので、記事の中で最初に登録された画像を表示</mt:ignore>
    <mt:EntryAssets type="image" sort_order="ascend" lastn="1">
        <mt:SetVarBlock name="tmpImgW1"><mt:AssetProperty property="image_width"></mt:SetVarBlock>
        <mt:SetVarBlock name="tmpImgH1"><mt:AssetProperty property="image_height"></mt:SetVarBlock>
            <mt:if name="tmpImgW1" gt="$tmpImgH1">
                <mt:ignore>横幅の方が大きい画像の場合の内容をここに入れる</mt:ignore>
            <mt:elseif name="tmpImgH1" gt="$tmpImgW1">
                <mt:ignore>縦幅の方が大きい画像の場合の内容をここに入れる</mt:ignore>
            <mt:else>
                <mt:ignore>正方形画像の場合の内容をここに入れる</mt:ignore>
            </mt:if>
    </mt:EntryAssets>
   
</mt:if>

1、2行目が結構重要だったり。
ここで0を入れておかないと、<mt:if name="ichiranImg" gt="1">の条件分岐において、elseの方が効いてくれないのですよ。

<MTEntryAssets type="image" tag="@一覧表示">
    <MTSetVarBlock name="ichiranImg"><MTAssetProperty property="image_width"></MTSetVarBlock>
    <mt:ignore>@一覧表示タグがある画像があればichiranImgに1以上の数字が入る</mt:ignore>
</MTEntryAssets>

この部分で@一覧表示タグのついた画像があれば
ichiranImgに1以上の数字が入るわけですが、特になかった場合、ichiranImgには何も値が入らないようなのです。だから最初に0を入れておかないと、1以上か0かで条件分岐したい場合、うまく機能してくれなくなる。


mtmlがAS3くらい自由奔放に書けたらもっと楽なのに。

この戦意ブログはWordPressへの移行を考えています。リアルに。

いや、WordPressがいいかどうかは別にして、MTに不便を感じることが多いから、どんなもんなのかなと。

戦意

© 2012 戦意