無料ブログ「rentafree.net」の管理人ブログ

記事ループ

&&EntryLoop;
&/EntryLoop;
の間の部分が、
そのページに表示すべき記事の数だけ繰り返し埋め込まれます。


ループ内では以下の変数が有効です。
&$EntryLoopCount;
記事ループ中のループカウント。0から。
&$EntryLoopId;
記事ループ中の記事ID。記事ページのアドレスは「http://ドメイン/entry/記事ID」です。
&$EntryLoopTitle;
記事ループ中のその記事のタイトル。
&$EntryLoopBody;
記事ループ中のその記事の本文。
&$EntryLoopMore;
記事ループ中のその記事の追記。
&$EntryLoopTrackbackUrl;
記事ループ中のその記事へのトラックバック送信先アドレス。
&$EntryLoopTrackbackCount;
記事ループ中のその記事のトラックバック数。
&$EntryLoopCommentCount;
記事ループ中のその記事のコメント数。
&$EntryLoopCategoryId;
記事ループ中のその記事のカテゴリID。
&$EntryLoopCategoryName;
記事ループ中のその記事のカテゴリ名。
&$EntryLoopDateYear;
記事ループ中のその記事の年。
&$EntryLoopDateMonth;
記事ループ中のその記事の月。
&$EntryLoopDateDay;
記事ループ中のその記事の日。
&$EntryLoopDateHour;
記事ループ中のその記事の時。
&$EntryLoopDateMinute;
記事ループ中のその記事の分。
&$EntryLoopDateSecond;
記事ループ中のその記事の秒。
&$EntryLoopEntryUrl;
記事ループ中のその記事の記事ページURL。
&$EntryLoopCategoryUrl;記事ループ中のその記事のカテゴリページURL。

プラグイン出力を埋め込む

&&PluginLoop1:1;
  &&if:PluginLoopTitle;<div class="PluginTitle" id="PluginTitle_&$SidebarId;_&$PluginLoopCount;">&$PluginLoopTitle;</div>&/if;
   <div class="PluginBody" id="PluginBody_&$SidebarId;_&$PluginLoopCount;">&$PluginLoopBody;</div>
&/PluginLoop1:1;
標準テンプレートはこんな感じになってます。

&&PluginLoop1:1;
から
&/PluginLoop1:1;
までの間をループ処理します。
左の数値がサイドバーIDです。
右の数値は特殊構文用のIDですが、
プラグインをネストするようなことは無いでしょうから、
&&PluginLoop1;

&/PluginLoop1;
でもいいかも。

サイドバーIDは、ブログのプラグイン設定の「位置」って項目の値です。
同じIDで設定されているプラグインが順番にループします。

サイドバーIDには0から255までの数値が有効ですが、
他のテンプレートとの互換性を考えて、以下のルールで配置することが好ましいです。

0=<head>
1=左サイドバー(2カラムで左がない場合は右)
2=右サイドバー(2カラムで右がない場合は左)
3=中央上部
4=記事下(追記とフッタの間。一番目の記事のみ)
5=記事下(追記とフッタの間。すべての記事)
6=中央下部
7=右上
8=左下
9=記事上(記事タイトル下)


&&if:PluginLoopTitle;<div class="PluginTitle" id="PluginTitle_&$SidebarId;_&$PluginLoopCount;">&$PluginLoopTitle;</div>&/if;
プラグイン見出し部分の出力ですが、
「if」構文で囲まれていますので、
見出しが空文字の場合はこの部分は出力されないようにできています。
id属性にはプラグイン固有の値を入れて重複しないようにしています。
&$PluginLoopTitle;
の部分に見出しが出力されます。


<div class="PluginBody" id="PluginBody_&$SidebarId;_&$PluginLoopCount;">&$PluginLoopBody;</div>
こっちはプラグイン本文。
&$PluginLoopBody;
の部分に埋め込まれます。
本文が空のプラグインはプラグインループが出力されないので常に値ありです。

テンプレート変数

&$変数名;
で変数の値を出力します。
変数名
説明
&$OHP;
サービストップページへのリンクを出力します。必須。
&$AD;テキスト広告を出力します。必須。
&$Contact;
公式サイトの問い合わせフォームへ誘導する、連絡方法を記載したページのURLを出力します。
&$HEAD;
公式JavaScriptを埋め込みます。必須ではありませんが、<head>内に設置してください。詳細機能はこちらを確認してください。
&$CSS;
そのテンプレートのCSSファイルアドレス。
&$BlogTop;ブログトップページのアドレス。(スマートフォン用アドレス接続時はスマートフォン用トップ)
&$Canonical;
ページの正しいアドレス。(スマートフォン用アドレス接続時もPC用アドレスが返ります)
&$FeedAtom;
Atomのアドレス
&$FeedRss1;RSS1.0のアドレス
&$FeedRss2;RSS2.0のアドレス
&$SmartPhone;スマートフォン用アドレス接続時は1。それ以外は空。
&$PageType;現在のページのタイプが取得できます。0=トップページ又は通常リスト、1=記事ページ、2=日別ページ、3=月別ページ、4=カテゴリページ、5=検索結果、6=掲示板
&$PageNumber;リストのページ番号が取得できます。1ページ目は0か空で2ページ目が1です。記事ページの場合は記事IDです。
&$PageMax;
ページ番号の最大値が取得できます。
&$PageLinks;
現在のページ前後の最大10ページのページリンクを出力します。ページ番号は0からですが、表示は1からとなります。
&$EntryCount;
ブログの総記事数。
&$BbsType;
掲示板ページのみ有効。0=ノーマル掲示板、2=スレッド掲示板
&$Day;日別ページの場合「YYYYMMDD」。日別ページアドレスは「http://ドメイン/day/YYYYMMDD」か「http://ドメイン/day/YYYYMMDD/ページ番号」です。
&$DayFirst;
記事ループ中に同一日付の記事が複数ある場合、その日付の最初の記事のみ1でそうでない場合は空。
&$DayLast;
記事ループ中に同一日付の記事が複数ある場合、その日付の最後の記事のみ1でそうでない場合は空。
&$Month;月別ページの場合「YYYYMM」。月別ページアドレスは「http://ドメイン/month/YYYYMM」か「http://ドメイン/month/YYYYMM/ページ番号」です。
&$CategoryId;カテゴリID。カテゴリページのアドレスは「http://ドメイン/category/カテゴリID」か「http://ドメイン/category/カテゴリID/ページ番号」です。
&$CategoryName;
カテゴリ名。カテゴリページのみ。
&$EntryPage;記事ページなら1。それ以外のページだと空。
&$EntryTitle;
記事タイトル。記事ページのみ。
&$TopPage;トップページなら1。それ以外のページだと空。
&$SearchString;検索文字列。
&$SearchResults;
検索結果ページの検索結果リストの件数。
&$StartNumber;
ページの最初の記事のリスト中の位置。(記事ページは空)
&$LastNumber;
ページの最後の記事のリスト中の位置。(記事ページは空)
&$BlogName;ブログ名。
&$Description;ブログの説明。
&$Keywords;キーワード。
&$TopEntry;トップページで、トップ記事が設定されている場合は記事番号。それ以外は空。
&$NextUrl;次のページのアドレス。次のページが古い記事です。
&$NextName;次のページの記事名。記事ページのみ。
&$PrevUrl;前のページのアドレス。前のページが新しい記事です。
&$PrevName;前のページの記事名。記事ページのみ。
&$BlogId;ブログID。コメントやトラックバックのCGIへのパラメータを設定する場合に使う。
&$SidebarId;サイドバーID。特殊構文「&&PluginLoop1;」の1の部分。
&$PluginLoopId;プラグインID。プラグイン出力結果にid属性をつけたい場合に重複しないようにする場合に使う。
同一プラグインが2回呼び出された場合(同一サイドバーの複数設置時)は重複します。
&$PluginLoopCount;プラグインの呼び出し毎に+1される1からの連番。同一プラグインの複数回呼び出しでも加算されるので確実に重複しません。
&$PluginLoopTitle;
プラグインの出力する見出し。
&$PluginLoopBody;プラグインの出力する本文。
&$FirstEntry;記事ループ中の1番目の記事の場合1。それ以外は空。
&$EntryLoopCount;記事ループ中のループカウント。0から。
&$EntryLoopId;記事ループ中の記事ID。記事ページのアドレスは「http://ドメイン/entry/記事ID」です。
&$EntryLoopTitle;記事ループ中のその記事のタイトル。
&$EntryLoopBody;記事ループ中のその記事の本文。
&$EntryLoopMore;記事ループ中のその記事の追記。
&$EntryLoopSummary;
記事ループ中のその記事の要約(最大255byteで切り詰められた本文テキスト)。
&$EntryLoopTrackbackUrl;記事ループ中のその記事へのトラックバック送信先アドレス。アンパサンドを含むURLですが、文字参照での出力となります。
&$EntryLoopTrackbackCount;記事ループ中のその記事のトラックバック数。
&$EntryLoopTrackbackReceive;
トラックバック受信可能なら1、不可なら空。
&$EntryLoopCommentCount;記事ループ中のその記事のコメント数。
&$EntryLoopCommentReceive;
コメント受信可能なら1、不可なら空。
&$EntryLoopCategoryId;記事ループ中のその記事のカテゴリID。
&$EntryLoopCategoryName;記事ループ中のその記事のカテゴリ名。
&$EntryLoopDateYear;記事ループ中のその記事の年。
&$EntryLoopDateMonth;記事ループ中のその記事の月。
&$EntryLoopDateDay;記事ループ中のその記事の日。
&$EntryLoopDateHour;記事ループ中のその記事の時。
&$EntryLoopDateMinute;記事ループ中のその記事の分。
&$EntryLoopDateSecond;記事ループ中のその記事の秒。
&$EntryLoopDateWday1;曜日(Sun,Mon,Tue,Wed,Thu,Fri,Sat)
&$EntryLoopDateWday2;曜日(日,月,火,水,木,金,土)
&$EntryLoopEntryUrl;記事ループ中のその記事の記事ページURL。
&$EntryLoopCategoryUrl;記事ループ中のその記事のカテゴリページURL。
&$EntryLoopTag;
記事ループ中のその記事に設定されているタグ。(分割されていない文字列)
&$EntryLoopAuthor;
記事ループ中のその記事に設定されている著者名。
&$TagLoopName;
タグループ中の個別タグ名
&$TagLoopUrl;
タグループ中の個別タグのタグページURL
&$CommentLoopCount;コメントループ中のループカウント。0から。
&$CommentLoopId;コメントループ中のそのコメントのコメントID。
&$CommentLoopName;コメントループ中のそのコメントの投稿者名。
&$CommentLoopUrl;コメントループ中のそのコメントのURL。
&$CommentLoopBody;コメントループ中のそのコメントの本文。
&$CommentLoopDateSecond;秒。
&$CommentLoopDateMinute;分。
&$CommentLoopDateHour;時。
&$CommentLoopDateDay;日。
&$CommentLoopDateMonth;月。
&$CommentLoopDateYear;年。
&$CommentLoopDateWday1;曜日(Sun,Mon,Tue,Wed,Thu,Fri,Sat)
&$CommentLoopDateWday2;曜日(日,月,火,水,木,金,土)
&$TrackbackLoopCount;トラックバックループのループカウント。0から。
&$TrackbackLoopId;トラックバックID。
&$TrackbackLoopBlogName;トラックバック送信元のブログ名。
&$TrackbackLoopUrl;トラックバックURL。
&$TrackbackLoopExcerpt;トラックバック要約。
&$TrackbackLoopTitle;トラックバックのタイトル
&$TrackbackLoopDateSecond;秒。
&$TrackbackLoopDateMinute;分。
&$TrackbackLoopDateHour;時。
&$TrackbackLoopDateDay;日。
&$TrackbackLoopDateMonth;月。
&$TrackbackLoopDateYear;年。
&$TrackbackLoopDateWday1;曜日(Sun,Mon,Tue,Wed,Thu,Fri,Sat)
&$TrackbackLoopDateWday2;曜日(日,月,火,水,木,金,土)


テンプレート特殊構文

どの構文も、不要なスペースは入れられません。


if構文
&&if:条件;
間の文章。
&/if;
if文もどきです。
条件には変数名を入れて値の有無を判別するか、
「変数名=文字列」で変数と文字列の一致を判別できます。
変数の値の有無の判別は、完全な値なしかその他の判別です。数値の0は値ありとなります。
演算子は使えません。



&&if:NextUrl;
「次のページがあります!」
&/if;

変数の値が空の場合は表示されません。


AND
&&if:NextUrl&PrevUrl;
「次のページがあります。前のページもあります!」
&/if;

&で区切ると左辺が不一致なら不一致、左辺が一致なら右辺を確認します。


OR
&&if:NextUrl|PrevUrl;
「次のページ又は前のページがあります!」
&/if;

|で区切ると左辺が一致なら一致、左辺が不一致なら右辺を確認します。

ANDとORは複数連結できます。
その際はANDとORに優先順位はありません。
左から処理していきます。


NOT
&&if:NextUrl&!PrevUrl;
「次のページがあります。前のページはありません!」
&/if;

頭に!つけると逆になります。


文字列比較
&&if:EntryLoopCount=1;
「2番目の記事です!」
&/if;

変数名=文字列
で、一致が条件となります。
文字列には、「:」「;」「&」「|」は使えません。


&&if:!EntryLoopCount=1;
と式の前に「!」を付ければ結果は反転します。


if構文の条件式は最大200byteです。
日本語は基本的に1文字3byteです。


set構文
&&set:ユーザー変数=値;
ユーザー定義の変数に値を代入できます。
set構文は開始構文のみで終了構文は不要です。
ユーザー変数は、_(半角アンダーバー)から始まる半角英数字で、合計2文字から11文字までの文字列限定です。
値として代入できるのは正の整数のみで、
数値以外が代入されようとした場合は0が代入されます。
0から始まる数値が代入されようとした場合は数値として不要な0は省かれます。

そのページに表示する記事のいずれかにユーザー変数で使用可能な文字列のタグが設定されている場合、
テンプレート処理前にユーザー変数が設定されます。(値=1)


&&set:_var=1;
ユーザー変数の値は&$_var;です。

&&set:ユーザー変数=演算式;
+ 加算
- 減算
* 乗算
/ 除算(少数切り捨て)
% 剰余算
の演算が可能です。

演算子に優先順位はなく、
演算子が複数の式の場合は全て左から演算されます。

=に数値が続く場合はまずユーザー変数にその値が代入され初期化されます。
=に変数名が続く場合はユーザー変数の初期値はその変数になります。(変数が数値以外の場合は0)
=に演算子が続く場合はユーザー変数は初期化されずに演算されます。(ユーザー変数が存在しない場合は0)

以降、
演算子+値
の組み合わせでユーザー変数に対して左から順に演算が行われていきます。
算数的には、
[ユーザー変数]=[ユーザー変数][演算子][値]
の様な感じで処理されます。
(=は算数的には等価ですが、等価ではなく代入です。)

値には変数名が利用できます。
値には正の整数しか使えません。

*数値以外の変数で演算しようとした場合。
*9999を超える値で演算しようとした場合。
*ユーザー変数が9999を超えた場合。
*ユーザー変数が0未満の場合。
*ゼロで割ろうとした場合。
は、その時点で演算は終了します。

割り算の結果、少数が発生する場合は切り捨てられます。

簡単な例
&&set:_var=1+1*3;
ユーザー変数の値は&$_var;です。
この場合、
=に続く1でユーザー変数の初期値が1となり、
続く+1でユーザー変数に1が加算され、
続く*3でユーザー変数が3倍されます。
ですので、答えは「6」です。
演算子に優先順位がなく、常に左からなので注意です。

実用例
記事ループにおいてループ偶数回目と奇数回目を判別したい場合に、
&&set:_var=EntryLoopCount%2;
&&if:_var=0;奇数&/if;
&&if:_var=1;偶数&/if;
とすれば、
奇数,偶数,奇数,偶数,奇数,偶数....
となります。
(EntryLoopCountは1回目が0です。)

常にユーザー変数に対して演算が行われ、変数の初期化も省略できるので、
&&set:_var=+1;
のようにすると加算代入のようなこともできます。
(一般的な加算代入とは演算子が逆になるので注意)
足し算以外もできます。


set構文の式は最大200byteです。


EntryLoop構文
&&EntryLoop;
間の文章。
&/EntryLoop;
そのページに表示すべき記事の分だけループします。

EntryLoop構文のネストは無効です。


CommentLoop構文
&&CommentLoop;
間の文章。
&/CommentLoop;
EntryLoop中で使います。
EntryLoop中の現在の記事へのコメントの分だけループします。

この構文は、同じ記事に対しては一度しか実行されません。


TrackbackLoop構文
&&TrackbackLoop;
間の文章。
&/TrackbackLoop;
EntryLoop中で使います。
EntryLoop中の現在の記事へのトラックバックの分だけループします。

この構文は、同じ記事に対しては一度しか実行されません。


TagLoop構文
&&TagLoop;
間の文章。
&/TagLoop;
EntryLoop中で使います。
EntryLoop中の現在の記事に設定されているタグの分だけループします。

set構文でユーザー変数として使用できる文字列のタグ(アンダースコアから始まる2から11文字の半角英数字)はスキップされます。

TagLoop構文のネストは無効です。


PluginLoop構文
&&PluginLoop数字;
間の文章。
&/PluginLoop数字;
数字で指定されたIDのサイドバーに設定されたプラグインの分だけループします。

PluginLoop構文のネストは無効です。


特殊構文のネスト
&&if:条件;
  &&if:条件;
    間の文章。
  &/if;
&/if;
こんな感じはできません。

&&if:数値:条件;
  &&if:条件;
    間の文章。
  &/if;
&/if:数値;
こんな感じで:を一個はさんで数値を入れると、
構文IDを設定できます。
IDなし又は違うIDの終了文では終了しません。


&&if:1:NextUrl;
  「次のページがあります!」
  &&if:PrevUrl;
    「前のページもあります!」
  &/if;
&/if:1;

使い道はないと思いますが、if以外の構文でも指定できます。

現在考えている更新計画

割り当て後のドメイン変更の機能が今ついてないんですが、
それが最優先かなーって感じです。
機能実装前にドメイン変更したかったら、
こちらで手動でやりますんで連絡してください。

あと、サービストップページに「サポート掲示板」ってあるけど、未実装。
それも優先課題。
ユーザーへのお知らせ表示機能もつけたい感じ。
メールで通知もできるけど、
メール送信は負荷が大きいかなーと。。。

他には、
非公開ブログや非公開記事を作れるように。
ってのをやってもいいかなー。考えてます。

アクセス解析も実装したい。
が、アクセス解析は負荷大きいし容量も大きくなるよな・・・
サーバーログ使う仕組みはちと難しい。


まあ、今は現機能の安定が重要と思うんで、
当面このままかもです。
ブログがうまく行ったら、
「wiki」「掲示板」なんかのサービスもやろうかと思ってる。

レンタルブログサービス作りました

レンタルブログサービス作りました。

http://www.rentafree.net/


まだ作ったばかりで不具合があったりするかもしれませんが、
テスターも欲しいところですので、
お試しにでもぜひ利用してみてください。


  • 1アカウントで複数ブログ作成可能
  • サブドメインレンタル
  • 独自ドメイン割り当て可能
  • リッチエディタ搭載
  • 共有テンプレート機能
  • トラックバック送信機能
  • 更新ping送信機能
  • 各種Feed配信(sitemap,sitemapindex,atom,rss1,rss2)
  • XML-RPC編集機能
  • インポート・エクスポート
  • メール投稿機能
  • Twitter自動投稿
と、機能的には大手のレンタルブログサービスにも劣らないと思います。