fc2ブログ

タグ: 変数

投稿日
2008-11-09
カテゴリー
FC2BLOG
タグ
変数

前回から半年も経ってしまってスポンサー広告もすっかり板についてきた感じなんですが、ここでまさかの更新です。

さすがに久々なだけあって、親子カテゴリ、ブログ書籍化、アプリケーション、バトン等色々な機能が増えているFC2ブログですが、どうやらそれ以外にもアナウンスされていない新変数の追加があるようですね。

個人的に嬉しかったのが、<%comment_url+name>が使えるようになっていたこと。何の気なしに試してみたら機能していてびっくりしました。この変数については、みりばーるさんが3年も前に書いた、こんな変数があるといいなという妄想(リンク先の下のほうです)を参照してください。これは地味ですが便利ですよ。

それともうひとつ、なんと<!--page_area-->~<!--/page_area-->まで使えるではないですか(モバイル用ではこのエリア変数が既に存在していたようですが) 。この変数は、これまたみりばーるさんが3年以上前に書いた記事追記:リンク先が間違っていたのを修正しました。)で言及されていたほか、結構多くの方々から追加の要望があったものです。しかしどうやらこのpage_area、現時点で確認した限りではindex_areaも含むみたいなので、トップページと区別するためには<!--not_index_area-->~<!--/not_index_area-->で囲む必要がありそうです(あとで試してみます)。まあ<!--not_edit_area-->~<!--/not_edit_area-->がサポートされた時点で、エリア変数を入れ子にすることでpage_areaの代用とすることができるようになっていたわけですけど。とはいえpage_areaのサポートによってテンプレートのソースを簡潔にすることができるのは良いですね。

ただし上記で紹介した変数は公式には未アナウンス状態のようなので、今後どうなるかはわかりません。あと今回の記事はものすごく急いで書いたため色々間違っているかもしれませんがご勘弁を。というか、FC2浦島太郎状態の私が知らないだけでみんなとうの昔に知ってるとかだったらかなり恥ずかしいです。

あ、テンプレートは全然進んでないです……。

投稿日
2008-02-17
カテゴリー
WebDesign
タグ
(X)HTML
CSS
変数

FC2ブログの新管理画面統合のアナウンス(今度こそ延期しないよね)も出たわけだし、いい加減そろそろテンプレを共有登録申請したいところです。もうひと息という感じではあるんですが、しかしFC2ブログにはすでに膨大な数の共有テンプレが存在しているため、今さら下手な作品を登録したところで、それはテンプレ探しの邪魔にしかならないんじゃないかと思うんです。それでだいぶ慎重になっています。

とりあえず申請予定のテンプレの特徴を簡単に整理しておきます。

文章を書くのが面倒でリストにしてしまいました。しかも全然整理できてない。まあいいか。

投稿日
2008-01-17
カテゴリー
FC2BLOG
タグ
変数

今作っているテンプレートは、基本1カラムで、上部メニュー(グローバルナビゲーション)からアーカイブ等のページに移動する、というタイプのものです。ギョさんのtabboxや、みりばーるさんのchameleonに近い感じです(かなり見劣りはしますが……)。

で、メニューにタグエリアへのリンクを追加しようと思ったんですが、ちょっとした壁にぶち当たりました。カテゴリー別ならば最初にblog-category-0(必ず存在する)に飛べばいいし、月別ならばとりあえずblog-date-<%now_year><%now_month>に飛べばいいんですが(ちなみに今は月別とカテゴリー別をまとめて"Archives"として、最初にtitlelist_areaへ移動して全記事一覧を表示するようにしています。chameleonとほぼ同じです。)、タグエリアは最初に移動すべきページが指定できないのです(自分のブログだけで使うなら、任意のタグのURLを直接書き込めば済むのですが)。一応、<%url>?tagとだけ指定する(こうすると、該当記事無しの状態のタグエリアに移動する)という手もありますが、最初のページの記事領域が空白というのは、なんとなく抵抗があります(個人的に)。あるいは、いっそのことタグも"Archives"にまとめてしまうこともできますが、タグはアーカイブというよりは検索の性質を持っていると思うので(これも個人的に)、一緒にすべきではないような気がします。

そこで前回の記事の出番です。タグエリアへのリンクを以下のようにします。

<!--ctag-->
<a href="<%ctag_url>">Tags</a>
<!--not_edit_area--><!--/ctag--><!--ctag--><!--/not_edit_area-->
<!--/ctag-->

ここではctagを使用したので、設定回数の一番多いタグのページにリンクされます。rtagを使えば一番最近追加されたタグ、stagを使えばランダムで決定されたタグのページへリンクされます。

ちなみに、前々回の記事の手法を使って、

<!--ctag--><!--not_edit_area--><!--/ctag-->
<!--ctag-->
<a href="<%ctag_url>">Tags</a>
<!--not_edit_area--><!--/ctag--><!--ctag--><!--/not_edit_area-->
<!--/ctag-->
<!--ctag--><!--/not_edit_area--><!--/ctag-->

という具合にすれば、タグを全く使用していない場合に、タグエリアへのリンクをメニューから消すことができます。

まあしかし、やっぱり得体の知れない技なので、共有登録するテンプレートに使うのはちょっと躊躇われます……。

投稿日
2008-01-14
カテゴリー
FC2BLOG
タグ
変数

今回も、FC2ブログの独自変数を利用した小技についてです。前回の記事を踏まえたうえで読んでください。そうでないとわけがわからんかもしれません。

いわゆるリスト型変数(前回勝手に名付けた)は、その内容を繰り返して表示するものです。何回繰り返すかは、該当する値の数によります。たとえば<!--archive-->~<!--/archive-->は、記事が投稿された月の数だけその内容を繰り返します。

しかし今回紹介する方法を使えば、リスト型変数の1つ目の項目だけを表示することが可能となります。リスト型変数に分類される変数であれば、どの変数にも応用できます。つまり、たとえば<!--topentry-->~<!--/topentry-->にも使えるので、最新の記事だけを表示する(もちろん環境設定の記事の表示件数をいじらずに!)ということも可能になります。……これはもしかしたら小技じゃなく大技かもわからんね。

では、topentryを使用した場合を例にとって解説します。通常下記のようになっている部分に

<!--topentry-->
内容(<%topentry_body>等)
<!--/topentry-->

次のように強調部分を書き加えるだけです。(追記:FCafeのDanielさんにコメント欄で指摘を頂き、タグの挿入位置を修正しました。

<!--topentry-->
内容(<%topentry_body>等)
<!--not_edit_area--><!--/topentry--><!--topentry--><!--/not_edit_area-->
<!--/topentry-->

以上で完了。どういう仕組みなのかは謎ですが、これでtopentryの内容が最初の1つだけ出力されます。2つ目以降は出力されないので、もちろんソースにも全く現れません。

ここではnot_edit_areaを用いましたが、いわゆるフラグ型変数であれば他のものでも問題ないです。詳しくは前回の記事を参照してください。

他にどういう便利な使い方があるかなぁと考えてみました。そこで思い出したのが、FCafeさんの空リンク非表示 2という記事。もう3年近く前の記事ですが、今回紹介した手法を使えば、環境設定の「最新記事一覧」の表示件数を1件にすることなく同じことが実現できます。

やることはさっきの例と全く同じですが、一応書いておきます。リンク先の【方法】の項の一番下、head領域の部分の既述を以下のように書き換えるだけです。(追記:こちらもDanielさんのコメントの通り修正しました。

<style type="text/css">
        <!--recent-->
        .nxt<%recent_year><%recent_month> {display: none;}
        <!--not_edit_area--><!--/recent--><!--recent--><!--/not_edit_area-->
        <!--/recent-->
</style>

強調部分が追加されました。空リンクを非表示にしたいけど、最新記事一覧を犠牲にしたくない、という人にはおすすめです。(追記:別の方法があるので、Danielさんのコメントを参照してください。

今回紹介した小技、まだまだ使い道があると思います。Danielさんならもっとナイスな使い方を思いつきそうです。あとこの技のカラクリも解き明かしてくれそうな気が……というわけで時空を超えたトラバを送ってみました。

投稿日
2008-01-10
カテゴリー
FC2BLOG
タグ
(X)HTML
変数

FC2ブログで使用できる、ほんの少し便利かもしれないテクニックを発見しました。ただ、このテクニックには謎が多いので、まだまだ検証が必要かと思われます。一応、現時点でわかっていることを(主に自分のために)メモしておきます。

説明しやすくするため、FC2ブログ用の独自変数を以下のように(勝手に)分類することにします。

フラグ型変数
条件によって出力/非出力を分岐するタイプの変数。たとえば以下のようなもの。
リスト型変数
内容を繰り返し出力するタイプの変数。たとえば以下のようなもの。
単変数
1つの数値や文字列等を出力する変数。<%hogehoge>という形のもの。

まず、テンプレートの中に以下のようなソースがあるとします。

<dl id="sidebar">
        <dt>カテゴリー</dt>
        <dd>
                <ul>
                        <!--category--><li><a href="<%category_link>" ><%category_name> (<%category_count>)</a></li><!--/category-->
                </ul>
        </dd>

        <dt>最近のコメント</dt>
        <dd>
                <ul>
                        <!--rcomment--><li><a href="<%rcomment_link>" ><%rcomment_name> → <%rcomment_title></a></li><!--/rcomment-->
                </ul>
        </dd>

        <dt>最近のトラックバック</dt>
        <dd>
                <ul>
                        <!--rtrackback--><li><a href="<%rtrackback_url>" ><%rtrackback_title>(<%rtrackback_blog_name>)</a> → <a href="<%rtrackback_link>" ><%rtrackback_etitle></a></li><!--/rtrackback-->
                </ul>
        </dd>
</dl>

まあよくあるサイドバーのようなものです。全体を<dl>で囲み、<dt>に項目名、<dd>内にその内容を<ul><li>で並べています。

こういう場合、カテゴリーは必ず1つは存在しているので問題ありませんが、コメントやトラックバックがまだ1件もないときは、空の<ul></ul>ができてしまうという問題が起こります。空のリストなんて気にする人はほとんどいないと思いますが、そのほかに、コメントやトラックバックがないのに「最近のコメント」「最近のトラックバック」といった項目名が表示されるのも、少し気になったりすると思います。

そこで、以下のようにすると、コメントやトラックバックがない場合に「最近のコメント」「最近のトラックバック」の項目をまるごと消し去ることができます。単に非表示にするだけではなく、ソースから完全に消せます。

<dl id="sidebar">
        <dt>カテゴリー</dt>
        <dd>
                <ul>
                        <!--category--><li><a href="<%category_link>" ><%category_name> (<%category_count>)</a></li><!--/category-->
                </ul>
        </dd>

        <!--rcomment--><!--not_edit_area--><!--/rcomment-->
        <dt>最近のコメント</dt>
        <dd>
                <ul>
                        <!--rcomment--><li><a href="<%rcomment_link>" ><%rcomment_name> → <%rcomment_title></a></li><!--/rcomment-->
                </ul>
        </dd>
        <!--rcomment--><!--/not_edit_area--><!--/rcomment-->

        <!--rtrackback--><!--not_edit_area--><!--/rtrackback-->
        <dt>最近のトラックバック</dt>
        <dd>
                <ul>
                        <!--rtrackback--><li><a href="<%rtrackback_url>" ><%rtrackback_title>(<%rtrackback_blog_name>)</a> → <a href="<%rtrackback_link>" ><%rtrackback_etitle></a></li><!--/rtrackback-->
                </ul>
        </dd>
        <!--rtrackback--><!--/not_edit_area--><!--/rtrackback-->
</dl>

強調部分が追加されました。これだけで完了です。コメントやトラックバックが1件もないときは、強調部分に挟まれた内容がきれいさっぱり消え失せます。コメントやトラックバックがあれば、何の問題もなく通常通り表示されます。

これを一般化すると、以下のようになります。

<!--リスト型変数--><!--フラグ型変数--><!--/リスト型変数-->
(リスト型変数が空のときに消える内容)
<!--リスト型変数--><!--/フラグ型変数--><!--/リスト型変数-->

このとき、リスト型変数はすべて共通のものにする必要があります。しかしフラグ型変数に関しては、共通のものにする必要はありません。たとえば<!--category_area-->~<!--/not_search_area-->のように、前後のタグが対応関係になくても問題ありません。とにかくいずれかのフラグ型変数で開始し、いずれかのフラグ型変数で閉じれば、正常に機能するようです(<!--not_edit_area-->~<!--not_edit_area-->のように閉じなかった場合、エラーでページ自体が表示されません)。また、これはどのページでも関係なく、たとえばトップページ(index_area)において<!--not_index_area-->~<!--/not_index_area-->という組み合わせを使用しても、同様の結果が得られます。

これが、このテクニックの謎の部分です。そもそも、一体どういう仕組みでこのようなテクニックが可能となっているのか……?

たとえば<!--rcomment-->~<!--/rcomment-->は、最近のコメントの数だけその中身を繰り返して表示します。環境設定で最近のコメントの表示件数を5件に設定して、ブログにコメントが5件以上寄せられている状態では、<!--rcomment-->あ<!--/rcomment-->は「あああああ」と表示されます。同様に、3件ならば「あああ」、1件ならば「あ」とだけ表示されます。そして、コメントが1件も寄せられていない状態では、「あ」を0回繰り返して表示、つまり何も表示されません。

同様に考えれば、<!--rcomment--><!--not_edit_area--><!--/rcomment--><!--rcomment--><!--/not_edit_area--><!--/rcomment-->も、コメントが0件のときには何の意味も持たなくなるはずです。ところが、なぜか上記のようなことが起こるのです。しかも、単純に<!--rcomment-->~<!--/rcomment-->の中身が出力されるわけではないようです(もしそうであれば、前述のようにindex_areaにおいて<!--not_index_area-->~<!--/not_index_area-->を使用したり、対応関係にないタグを組み合わせたりはできないはずです)。

さらに、なぜコメントやトラックバックがある場合に問題が生じないのか、という点も謎です。すなわち、最近のコメントが5件あれば、<!--rcomment--><!--not_edit_area--><!--/rcomment-->は一見<!--not_edit_area-->を5回繰り返しそうに思えます。そうであれば、たとえば<!--rcomment--><!--category_area--><!--/rcomment-->~<!--rcomment--><!--/not_search_area--><!--/rcomment-->

<!--category_area--><!--category_area--><!--category_area--><!--category_area--><!--category_area-->
内容
<!--/not_search_area--><!--/not_search_area--><!--/not_search_area--><!--/not_search_area--><!--/not_search_area-->

という具合になり、閉じられるべきものが正しく閉じられていないため、当然ながらエラーでページが表示できなくなるはずです。ところが実際は、このような問題は生じず、通常どおり項目が表示されます。とはいえ、ここで<!--/not_search_area-->を省略するとエラーになるため、このことから、<!--rcomment-->~<!--/rcomment-->内が完全に無視されているわけではないということが推測できます。

……書いていてわけがわからなくなってきたので、謎解きはひとまずこの辺まで。

どういう仕組みかはさておき、これは地味に使えるテクニックではないかと思います。コメントとトラックバックを例にとりましたが、もちろんほかの変数でも同様で、たとえば、

<!--topentry--><!--not_edit_area--><!--/topentry-->
(エントリーが存在しないときに消える内容)
<!--topentry--><!--/not_edit_area--><!--/topentry-->

のようにすれば、エントリーが1つもない場合(ブログ内検索で1件もヒットしなかった場合等)に、エントリーを内包しているブロック自体を消したりできます。工夫次第では、何かもっと面白いことができるかもしれません。

奥付