Home > Internet > Movabletype > ハッシュに目覚めてしまいました・・・

ハッシュに目覚めてしまいました・・・

最近MTMLでハッシュ使うのが大好きになってます。
何が便利かというと、「重複削除が簡単」「要素の個数が不明な時に条件判断を組み合わせやすい」「MTUnlessで条件除外している時の最初と最後の判断をし易い」などいろんな事が出来たりするからですね。

例えば、とあるテーマで使ったサイトマップの例。プラグインで並べ替え対応になっている。
サイトマップと設定用は出したくないので除外。でもその2つのうち一方が順番で最後の時には、普通にコンテナタグで処理するとLIタグに付けたい「tree_end」というクラスが付かなくなっちゃう。

<mt:SortedTopLevelFolders>
<mt:FolderLabel setvar="FolderName">
<mt:unless name="FolderName" like="サイトマップ|設定用">
<mt:SetVarBlock name="sitemap_html" function="push">
<a href="<$mt:var name="website_url"$><$mt:FolderPath$>" title="<$mt:FolderLabel$>"><$mt:FolderLabel$></a>
</mt:SetVarBlock>
</mt:unless>
</mt:SortedTopLevelFolders>
<ul>
    <li class="home"><a href="<$mt:Link template="メインページ"$>">トップ</a>
        <ul class="tree">
<mt:Loop name="sitemap_html">
            <li class="tree<mt:If name="__last__">_end</mt:If>"><MTGetVar name="__value__">
            </li>
</mt:Loop>
        </ul>
    </li>
</ul>

こんな感じで一旦ハッシュに格納してやり、吐き出し時に最後かどうか判断させれば、すっきりと処理される。

後、関連エントリーのから自エントリーを削除する場合に、lastn="6"とするやり方で悩んでる方がいたような・・・
そういう時も、ハッシュにぶち込んでループ出力で件数制限すれば大丈夫。

<MTEntryID setvar="this_entry_id" />
<MTBlogID setvar="blog_id" />
<MTSetVar name="counter" value="0" />
<MTEntryIfTagged>
    <MTRelatedEntries lastn="5" weight="idf">
        <MTEntryID setvar="entry_id" />
        <MTUnless name="entry_id" eq="$this_entry_id">
            <MTSetVarBlock name="related_htmls{$entry_id}"><li class="relRank1"><a href="<$MTEntryPermalink escape="url"$>"><$MTEntryTitle escape="html"$></a></li></MTSetVarBlock>
            <MTSetVar name="counter" op="++" />
        </MTUnless>
    </MTRelatedEntries>
    <MTSetVarBlock name="etag"><MTEntryTags glue=" OR "><$MTTagName$></MTEntryTags></MTSetVarBlock>
    <MTBlogs include_blogs="$blog_id" ignore_archive_context="1">
        <MTEntries include_blogs="$blog_id" lastn="8" tags="$etag">
            <MTIf name="counter" lt="10">
                <MTEntryID setvar="entry_id" />
                <MTUnless name="entry_id" eq="$this_entry_id">
                    <MTUnless name="related_htmls{$entry_id}">
                        <MTSetVar name="counter" op="++" />
                        <MTSetVarBlock name="related_htmls{$entry_id}"><li class="relRank2"><a href="<$MTEntryPermalink escape="url"$>"><$MTEntryTitle escape="html"$></a></li></MTSetVarBlock>
                    </MTUnless>
                </MTUnless>
            </MTIf>
        </MTEntries>
    </MTBlogs>
</MTEntryIfTagged>
<MTIf tag="EntryCategory">
    <MTSetVarBlock name="ecat"><MTEntryCategories glue=" OR "><$MTCategoryLabel$></MTEntryCategories></MTSetVarBlock>
    <MTBlogs include_blogs="$blog_id" ignore_archive_context="1">
        <MTEntries include_blogs="$blog_id" lastn="10" categories="$ecat">
            <MTIf name="counter" lt="10">
                <MTEntryID setvar="entry_id" />
                <MTUnless name="entry_id" eq="$this_entry_id">
                    <MTUnless name="related_htmls{$entry_id}">
                        <MTSetVar name="counter" op="++" />
                        <MTSetVarBlock name="related_htmls{$entry_id}"><li class="relRank3"><a href="<$MTEntryPermalink escape="url"$>"><$MTEntryTitle escape="html"$></a></li></MTSetVarBlock>
                    </MTUnless>
                </MTUnless>
            </MTIf>
        </MTEntries>
    </MTBlogs>
<MTElse>
    <MTSetVarBlock name="ecat">NOT (<MTCategories glue=" OR "><$MTCategoryLabel$></MTCategories>)</MTSetVarBlock>
    <MTBlogs include_blogs="$blog_id" ignore_archive_context="1">
        <MTEntries include_blogs="$blog_id" lastn="5" categories="$ecat">
            <MTIf name="counter" lt="10">
                <MTEntryID setvar="entry_id" />
                <MTUnless name="entry_id" eq="$this_entry_id">
                    <MTUnless name="related_htmls{$entry_id}">
                        <MTSetVar name="counter" op="++" />
                        <MTSetVarBlock name="related_htmls{$entry_id}"><li><a href="<$MTEntryPermalink escape="url"$>"><$MTEntryTitle escape="html"$></a></li></MTSetVarBlock>
                    </MTUnless>
                </MTUnless>
            </MTIf>
        </MTEntries>
    </MTBlogs>
</MTIf>
<MTLoop name="related_htmls">
    <MTIf name="__first__">
	        <div class="relatedEntries">
	            <h2>わりと新しめの関連してる<em>かも</em>しれないエントリー達(<$MTVar name="counter"$>件)</h2>
	            <ul>
    </MTIf>
	                <$mt:var name="__value__"$>
    <MTIf name="__last__">
	            </ul>
	        </div>
    </MTIf>
<MTElse>
	        <div class="relatedEntries"><p>関係ないエントリーが多いみたいですね・・・<em>orz</em></p></div>
</MTLoop>

「TagSupplementalsのRelatedEntriesで抽出・普通にタグで抽出・同一カテゴリーで抽出・カテゴリーが無い場合はカテゴリーに属さないエントリーを抽出」と順番に処理していって、最後にまとめて出力。このケースは10件以降はハッシュに入れないようにしている。だから必ず10件以下で出力される。
条件によってはMTLoop内で<MTIf name="__counter__" le="10">を使っても大丈夫。
絶対覚えた方がいいよ。ハッシュの使い方。

ping a Trackback

TrackBack URL for this entry.(1)

Please! leave a Comment.

スクリプトの読み込みが完了していません。

Sign in Sign in Sign in

メールフォーム(Javascriptを使用していません)や、twitter.pngTwitter経由のCommentでもReplyいたします。ただし返信はブログのコメントとして行う事もあります。

Comment Form

QuickTagsHere

EmoticonHere

(入力しない場合「Anonymous」で代替されます)
(公開はされませんが、Gravatarアイコンの取得や、Comment Subscribeの送信先アドレスとして使われます)
(入力すると、コメント表示でユーザー名にリンクが貼られます)
(この情報は、JavascriptによりCookieに保存されます。)

NotifyMail Powered by Comment Subscribe

はてブコメント:

Home > Internet > Movabletype > ハッシュに目覚めてしまいました・・・

MT5Techniques

MT5Techniques

2冊目の共著「Movable Type 5 実践テクニック」(シックスアパート監修)が出版されました。(ソフトバンク クリエイティブ刊)

検索
(5)
(6)

別ページに遷移します。

Powered by Hyper Estraier

Feeds
Link Status
In One

なかのひと

位置情報ブログパーツ「なかのひと」

Links
Powered By

Return to page top