【freo】【freoTips】【freo変数一覧】エントリーの情報を一覧で表示する方法(デフォルト・エントリー・カテゴリー画面)
- 2016/03/18 13:29
- エントリー
- 3
freoにはエントリーを登録・表示する機能があります。
デフォルト・エントリー画面では管理画面で設定した件数分のエントリーを一覧表示できます。
また、カテゴリー画面では特定カテゴリーのエントリーを一覧表示できます。
上記画面でエントリーを一覧で表示する方法及び変数は以下のとおりです。
エントリーを一覧表示する
デフォルト画面(freo/index.php画面)のテンプレートは、[freo/templates/internals/default/default.html]です。
エントリー画面・カテゴリー画面には、独自のテンプレートがない場合(freoをダウンロードして解凍しただけのデフォルトの状態の場合)、[freo/templates/internals/default/default.html]が利用されます。
エントリー画面・カテゴリー画面用に独自のテンプレートを用意した場合、
エントリー画面(freo/index.php/entry画面)のテンプレートは、[freo/templates/internals/entry/default.html]です。
カテゴリー画面(freo/index.php/category/カテゴリーID画面)のテンプレートは、[freo/templates/internals/category/default.html]です。
エントリーを一覧表示しているのは、[freo/templates/internals/default/default.html]の79~150行目
<!--{foreach from=$entries|smarty:nodefaults item='entry'}--> <div class="entry"> <h3><a href="{$freo.core.http_file}/view/{if $entry.code}{$entry.code}{else}{$entry.id}{/if}">{$entry.title}</a></h3> <ul class="information"> <li>{$entry.datetime|date_format:'%Y/%m/%d %H:%M'}</li> <!--{if $entry_associates[$entry.id].category}--> <li>カテゴリー:<!--{foreach from=$entry_associates[$entry.id].category|smarty:nodefaults key='entry_category' item='entry_category' name='loop'}--><a href="{$freo.core.http_file}/category/{$entry_category}">{$freo.refer.categories[$entry_category].name}</a><!--{if !$smarty.foreach.loop.last}-->, <!--{/if}--><!--{/foreach}--></li> <!--{/if}--> <!--{if $entry_tags[$entry.id]}--> <li>タグ:<!--{foreach from=$entry_tags[$entry.id]|smarty:nodefaults item='entry_tag' name='loop'}--><a href="{$freo.core.http_file}/entry?tag={$entry_tag|smarty:nodefaults|escape:'url'}">{$entry_tag}</a><!--{if !$smarty.foreach.loop.last}-->, <!--{/if}--><!--{/foreach}--></li> <!--{/if}--> </ul> <div class="content"> <!--{if $entry.restriction == 'user' and !$entry_securities[$entry.id]}--> <p class="attention">このエントリーは、登録ユーザーのみに公開されています。</p> <!--{elseif $entry.restriction == 'group' and !$entry_securities[$entry.id]}--> <p class="attention">このエントリーは、一部のグループのみに公開されています。</p> <!--{elseif $entry.restriction == 'password' and !$entry_securities[$entry.id]}--> <p class="attention">このエントリーは、パスワードで認証した人のみに公開されています。</p> <!--{/if}--> <!--{if $entry.file and $entry.image}--> <p><a href="{$freo.core.http_url}{$smarty.const.FREO_FILE_DIR}entry_files/{$entry.id}/{$entry.file}"><img src="{$freo.core.http_url}{$smarty.const.FREO_FILE_DIR}entry_images/{$entry.id}/{$entry.image}" alt="{$entry.memo|default:$entry.file}" title="{$entry.memo|default:$entry.file}" width="{$entry_images[$entry.id].width}" height="{$entry_images[$entry.id].height}" /></a></p> <!--{elseif $entry_thumbnails[$entry.id]}--> <p><a href="{$freo.core.http_url}{$smarty.const.FREO_FILE_DIR}entry_files/{$entry.id}/{$entry.file}"><img src="{$freo.core.http_url}{$smarty.const.FREO_FILE_DIR}entry_thumbnails/{$entry.id}/{$entry.file}" alt="{$entry.memo|default:$entry.file}" title="{$entry.memo|default:$entry.file}" width="{$entry_thumbnails[$entry.id].width}" height="{$entry_thumbnails[$entry.id].height}" /></a></p> <!--{elseif $entry.file and $entry_files[$entry.id].width and $entry_files[$entry.id].height}--> <p><img src="{$freo.core.http_url}{$smarty.const.FREO_FILE_DIR}entry_files/{$entry.id}/{$entry.file}" alt="{$entry.memo|default:$entry.file}" title="{$entry.memo|default:$entry.file}" width="{$entry_files[$entry.id].width}" height="{$entry_files[$entry.id].height}" /></p> <!--{elseif $entry.file}--> <p><a href="{$freo.core.http_url}{$smarty.const.FREO_FILE_DIR}entry_files/{$entry.id}/{$entry.file}">{$entry.memo|default:$entry.file}</a></p> <!--{/if}--> <!--{if $entry_texts[$entry.id].excerpt}--> {$entry_texts[$entry.id].excerpt|smarty:nodefaults} <!--{/if}--> <!--{if $entry_texts[$entry.id].more}--> <p><a href="{$freo.core.http_file}/view/{if $entry.code}{$entry.code}{else}{$entry.id}{/if}?continue=1#continue" title="No.{$entry.id}の続き">続きを読む</a></p> <!--{/if}--> <!--{if $entry.restriction == 'password' and !$smarty.session.security.entry[$entry.id] and $freo.user.authority != 'root' and $freo.user.authority != 'author'}--> <form action="{$freo.core.http_file}/view/{if $entry.code}{$entry.code}{else}{$entry.id}{/if}" method="post"> <fieldset> <legend>認証フォーム</legend> <dl> <dt>パスワード</dt> <dd><input type="text" name="entry[password]" size="30" value="" /></dd> </dl> <p><input type="submit" value="認証する" /></p> </fieldset> </form> <!--{/if}--> <!--{if $entry_associates[$entry.id].option}--> <dl> <!--{foreach from=$freo.refer.options|smarty:nodefaults item='option'}--> <!--{if $entry_associates[$entry.id].option[$option.id] != ''}--> <dt>{$option.name}</dt> <dd><!--{if $option.type == 'file'}--><a href="{$freo.core.http_url}{$smarty.const.FREO_FILE_DIR}entry_options/{$entry.id}/{$option.id}/{$entry_associates[$entry.id].option[$option.id]}">{$entry_associates[$entry.id].option[$option.id]}</a><!--{else}-->{$entry_associates[$entry.id].option[$option.id]|nl2br}<!--{/if}--></dd> <!--{/if}--> <!--{/foreach}--> </dl> <!--{/if}--> </div> <ul class="link"> <li><a href="{$freo.core.http_file}/view/{if $entry.code}{$entry.code}{else}{$entry.id}{/if}" title="No.{$entry.id}の固定URL">この記事のURL</a></li> <!--{if $entry.comment != 'closed'}--> <li><a href="{$freo.core.http_file}/view/{if $entry.code}{$entry.code}{else}{$entry.id}{/if}#comment" title="No.{$entry.id}のコメント">コメント({$plugin_comment_counts[$entry.id]})</a></li> <!--{/if}--> <!--{if $entry.trackback != 'closed'}--> <li><a href="{$freo.core.http_file}/view/{if $entry.code}{$entry.code}{else}{$entry.id}{/if}#trackback" title="No.{$entry.id}のトラックバック">トラックバック({$plugin_trackback_counts[$entry.id]})</a></li> <!--{/if}--> <!--{if $freo.user.authority == 'root' or $freo.user.id == $entry.user_id}--> <li><a href="{$freo.core.http_file}/admin/entry_form?id={$entry.id}"><img src="{$freo.core.http_url}images/icons/edit.png" alt="編集" title="編集" width="16" height="16" /></a></li> <!--{/if}--> </ul> </div> <!--{/foreach}-->
の部分です。
上記を解説すると
<!--{$entries配列を'entry'として繰り返して表示するここから}--> <div class="entry"> <h3><a href="{$freo設置URL}/view/{もしエントリーコードがあったらここから}{エントリーコード}{そうじゃなければ}{エントリーID}{もしエントリーコードがあったらここまで}">{エントリータイトル}</a></h3> <ul class="information"> <li>{エントリー日時|日付を'%Y/%m/%d %H:%M'に整形する}</li> <!--{もしカテゴリーがあったらここから}--> <li>カテゴリー:<!--{$entry_associates[$entry.id].category配列を'entry_category'として繰り返して表示するここから}--><a href="{$freo設置URL}/category/{エントリーに登録されているカテゴリーID}">{エントリーに登録されているカテゴリー名}</a><!--{もし最後のループじゃなかったらここから}-->, <!--{もし最後のループじゃなかったらここまで}--><!--{$entry_associates[$entry.id].category配列を'entry_category'として繰り返して表示するここまで}--></li> <!--{もしカテゴリーがあったらここまで}--> <!--{もしタグがあったらここから}--> <li>タグ:<!--{$entry_tags[$entry.id]配列を'entry_tag'として繰り返して表示するここから}--><a href="{$freo設置URL}/entry?tag={エントリータグ}">{エントリータグ}</a><!--{もし最後のループじゃなかったらここから}-->, <!--{もし最後のループじゃなかったらここまで}--><!--{$entry_tags[$entry.id]配列を'entry_tag'として繰り返して表示するここまで}--></li> <!--{もしタグがあったらここから}--> </ul> <div class="content"> <!--{もしエントリーの閲覧制限が'user'でエントリー保護データが入っていなかったらここから}--> <p class="attention">このエントリーは、登録ユーザーのみに公開されています。</p> <!--{もしエントリーの閲覧制限が'group'でエントリー保護データが入っていなかったら}--> <p class="attention">このエントリーは、一部のグループのみに公開されています。</p> <!--{もしエントリーの閲覧制限が'password'でエントリー保護データが入っていなかったら}--> <p class="attention">このエントリーは、パスワードで認証した人のみに公開されています。</p> <!--{もしエントリーの閲覧制限が'user'でエントリー保護データが入っていなかったらここまで}--> <!--{もしエントリーファイルとエントリーイメージがあったらここから}--> <p><a href="{freo設置URL}{ファイルディレクトリのURL}entry_files/{エントリーID}/{エントリーファイル名}"><img src="{freo設置URL}{ファイルディレクトリのURL}entry_images/{エントリーID}/{エントリーイメージ名}" alt="{エントリーファイルの説明|デフォルトはエントリーファイル名}" title="{エントリーファイルの説明|デフォルトはエントリーファイル名}" width="{エントリーイメージの横幅}" height="{エントリーイメージの高さ}" /></a></p> <!--{もしエントリーファイルのサムネイルがあったら}--> <p><a href="{freo設置URL}{ファイルディレクトリのURL}entry_files/{エントリーID}/{エントリーファイル名}"><img src="{freo設置URL}{ファイルディレクトリのURL}entry_thumbnails/{エントリーID}/{エントリーファイル名}" alt="{エントリーファイルの説明|デフォルトはエントリーファイル名}" title="{エントリーファイルの説明|デフォルトはエントリーファイル名}" width="{エントリーファイルのサムネイルの横幅}" height="{エントリーファイルのサムネイルの高さ}" /></a></p> <!--{もしエントリーファイルが}--あってエントリーファイルの横幅があったら(画像だったら)}--> <p><img src="{freo設置URL}{ファイルディレクトリのURL}entry_files/{エントリーID}/{エントリーファイル名}" alt="{エントリーファイルの説明|デフォルトはエントリーファイル名}" title="{エントリーファイルの説明|デフォルトはエントリーファイル名}" width="エントリーファイルの横幅" height="エントリーファイルの高さ" /></p> <!--{もしエントリーファイルがあったら}--> <p><a href="{freo設置URL}{ファイルディレクトリのURL}entry_files/{エントリーID}/{エントリーファイル名}">{エントリーファイルの説明|デフォルトはエントリーファイル名}</a></p> <!--{もしエントリーファイルとエントリーイメージがあったらここまで}--> <!--{もしエントリー本文があったらここから}--> {$entry_texts[$entry.id].excerpt|smarty:nodefaults} <!--{もしエントリー本文があったらここから}--> <!--{もしエントリー本文(続き)があったらここから}--> <p><a href="{freo設置ULR}/view/{もしエントリーコードがあったらここから}{エントリーコード}{そうじゃなければ}{エントリーID}{もしエントリーコードがあったらここまで}?continue=1#continue" title="No.{エントリーIDd}の続き">続きを読む</a></p> <!--{もしエントリー本文(続き)があったらここまで}--> <!--{もしエントリーの閲覧制限が'password'でこのエントリーの閲覧制限でパスワード認証が済んでなくてユーザーの権限が'root'でなくてユーザーの権限が'author'でなかったらここから}--> <form action="{freo設置ULR}/view/{もしエントリーコードがあったらここから}{エントリーコード}{そうじゃなければ}{エントリーID}{もしエントリーコードがあったらここまで}" method="post"> <fieldset> <legend>認証フォーム</legend> <dl> <dt>パスワード</dt> <dd><input type="text" name="entry[password]" size="30" value="" /></dd> </dl> <p><input type="submit" value="認証する" /></p> </fieldset> </form> <!--{もしエントリーの閲覧制限が'password'でこのエントリーの閲覧制限でパスワード認証が済んでなくてユーザーの権限が'root'でなくてユーザーの権限が'author'でなかったらここまで}--> <!--{もしエントリーオプションがあったらここから}--> <dl> <!--{$freo.refer.options配列を'option'として繰り返して表示するここから}--> <!--{もしエントリーオプションとして値が登録されているオプションであればここから}--> <dt>{オプション名}</dt> <dd><!--{もしオプションの種類が'file'だったらここから}--><a href="{freo設置URL}{ファイルディレクトリのURL}entry_options/{エントリーID}/{オプションID}/{エントリーオプションとして登録されている内容}">{エントリーオプションとして登録されている内容}</a><!--{そうじゃなければ}-->{エントリーオプションとして登録されている内容|改行は改行として表示する}<!--{もしオプションの種類が'file'だったらここまで}--></dd> <!--{もしエントリーオプションとして値が登録されているオプションであればここまで}--> <!--{$freo.refer.options配列を'option'として繰り返して表示するここまで}--> </dl> <!--{もしエントリーオプションがあったらここから}--> </div> <ul class="link"> <li><a href="{freo設置URL}/view/{もしエントリーコードがあったらここから}{エントリーコード}{そうじゃなければ}{エントリーID}{もしエントリーコードがあったらここまで}" title="No.{エントリーID}の固定URL">この記事のURL</a></li> <!--{もしエントリーコメントが'closed'じゃなかったらここから}--> <li><a href="{freo設置URL}/view/{もしエントリーコードがあったらここから}{エントリーコード}{そうじゃなければ}{エントリーID}{もしエントリーコードがあったらここまで}#comment" title="No.{エントリーID}のコメント">コメント({エントリーのコメント数})</a></li> <!--{もしエントリーコメントが'closed'じゃなかったらここまで}--> <!--{もしエントリートラックバックが'closed'じゃなかったらここから}--> <li><a href="{freo設置URL}/view/{もしエントリーコードがあったらここから}{エントリーコード}{そうじゃなければ}{エントリーID}{もしエントリーコードがあったらここまで}#trackback" title="No.{エントリーID}のトラックバック">トラックバック({エントリーのトラックバック数})</a></li> <!--{もしエントリートラックバックが'closed'じゃなかったらここまで}--> <!--{もしユーザーの権限が'root'またはユーザーIDがエントリーの投稿者ユーザーID同じだったらここから}--> <li><a href="{freo設置URL}/admin/entry_form?id={エントリーID}"><img src="{freo設置URL}images/icons/edit.png" alt="編集" title="編集" width="16" height="16" /></a></li> <!--{もしユーザーの権限が'root'またはユーザーIDがエントリーの投稿者ユーザーID同じだったらここまで}--> </ul> </div> <!--{$entries配列を'entry'として繰り返して表示するここから}-->
以上のように、エントリー一覧としてエントリーの様々な情報を一件ずつ繰り返して表示しています。
エントリーの情報を取得する方法
$entriesテーブルの情報をforeachする。
エントリーの情報は、「$entries」というテーブルに格納されています。
「$entries」テーブルの情報を表示したいときは、「foreach」しなければなりません。
とにかく、エントリーの情報を一覧表示したいなら、下記の通りにしなければならないってことです。
<!--{foreach from=$entries|smarty:nodefaults item='entry'}--> エントリーの情報を表示したい部分 <!--{/foreach}-->
上記のように、エントリーの情報の内一覧表示したい内容は、<!--{foreach from=$entries|smarty:nodefaults ~中略}-->と<!--{/foreach}-->で挟みます。
foreachの中に入れないで変数だけ書いても、エントリーの情報は表示されませんので注意して下さい。
エントリーの基本的な情報を表示するための変数
変数 | 値 |
---|---|
{$entry.id} | エントリーID |
{$entry.user_id} | エントリーの投稿者ユーザーID |
{$entry.created} | エントリーの投稿日時 |
{$entry.modified} | エントリーの更新日時 |
{$entry.approved} | エントリーの承認状況(yesまたはno) |
{$entry.restriction} | エントリーの閲覧制限(userまたはgroupまたはpasswordまたは無し) |
{$entry.password} | エントリーのパスワード |
{$entry.title} | エントリーのタイトル |
{$entry.status} | エントリーの状態(publishまたはprivateまたはfuture) |
{$entry.display} | エントリーの表示(pub;ishまたはprivate) |
{$entry.comment} | エントリーのコメントの受付(openまたはclosedまたはviewまたはuser) |
{$entry.trackback} | エントリーのトラックバックの受付(openまたはclosedまたはview) |
{$entry.title} | エントリーのタイトル |
{$entry.tag} | エントリーのタグ |
{$entry.datetime} | エントリーの日付 |
{$entry.close} | エントリーの公開終了日時 |
{$entry.file} | エントリーファイルのファイル名 |
{$entry.image} | エントリーイメージのファイル名 |
{$entry.memo} | エントリーファイルの説明 |
{$entry.text} | エントリー本文 |
エントリーの添付ファイルの情報を表示する
エントリーファイルの情報を表示する
エントリーファイルの情報は$entry_files[$entry.id]配列に格納されています。
変数 | 値 |
---|---|
{$entry.file} | エントリーファイルのファイル名 |
{$entry_files[$entry.id].height} | エントリーファイルの高さ |
{$entry_files[$entry.id].width} | エントリーファイルの横幅 |
{$entry_files[$entry.id].size} | エントリーファイルのサイズ |
{$freo.core.http_url}{$smarty.const.FREO_FILE_DIR}entry_files/{$entry.id}/{$entry.file} | エントリーファイルのURL |
エントリーファイルのサムネイルの情報を表示する
エントリーファイルのサムネイルの情報は$entry_thumbnails[$entry.id]配列に格納されています。
変数 | 値 |
---|---|
{$entry.file} | エントリーファイルのサムネイルのファイル名 |
{$entry_thumbnails[$entry.id].height} | エントリーファイルの高さ |
{$entry_thumbnails[$entry.id].width} | エントリーファイルの横幅 |
{$entry_thumbnails[$entry.id].size} | エントリーファイルのサイズ |
{$freo.core.http_url}{$smarty.const.FREO_FILE_DIR}entry_thumbnails/{$entry.id}/{$entry.file} | エントリーファイルのURL |
エントリーイメージの情報を表示する
エントリーイメージの情報は$entry_images[$entry.id]配列に格納されています。
変数 | 値 |
---|---|
{$entry.image} | エントリーイメージのファイル名 |
{$entry_images[$entry.id].height} | エントリーイメージの高さ |
{$entry_images[$entry.id].width} | エントリーイメージの横幅 |
{$entry_images[$entry.id].size} | エントリーイメージのサイズ |
{$freo.core.http_url}{$smarty.const.FREO_FILE_DIR}entry_images/{$entry.id}/{$entry.image} | エントリーイメージのURL |
エントリーのタグの情報を表示する
エントリーのタグは、「$entry_tags[$entry.id]」という配列に格納されています。
$entry_tags[$entry.id]に格納されているタグを表示するには、「foreach」しなければなりません。
<!--{foreach from=$entry_tags[$entry.id]|smarty:nodefaults item='entry_tag' name='loop'}--><a href="{$freo.core.http_file}/entry?tag={$entry_tag|smarty:nodefaults|escape:'url'}">{$entry_tag}</a><!--{if !$smarty.foreach.loop.last}-->, <!--{/if}--><!--{/foreach}-->
エントリーのカテゴリーの情報を表示する
エントリーのカテゴリーについての情報は、「$entry_associates[$entry.id].category」という配列に格納されています。
$entry_associates[$entry.id].categoryに格納されているカテゴリーを表示するには、「foreach」しなければなりません。
<!--{foreach from=$entry_associates[$entry.id].category|smarty:nodefaults key='entry_category' item='entry_category' name='loop'}--><a href="{$freo.core.http_file}/category/{$entry_category}">{$freo.refer.categories[$entry_category].name}</a><!--{if !$smarty.foreach.loop.last}-->, <!--{/if}--><!--{/foreach}-->
上記~ 内
変数 | 値 |
---|---|
{$entry_category} | エントリーに紐付けられているカテゴリーID |
{$freo.refer.categories[$entry_category].name} | エントリーに紐付けられているカテゴリーIDのカテゴリー名 |
エントリーのオプションを表示する
オプションの表示方法には、二種類あります。
一括で表示するか、個別に表示するかです。
上記をふまえて、ページのオプションを取得するときに使用する変数は以下のとおりです。
変数 | 値 |
---|---|
オプションを一括で表示する場合 | |
{$entry_associates[$entry.id].option.[$option.id]} | エントリーのオプションIDが[$option.id]のオプションに登録されている内容 |
オプションを個別に表示する場合 | |
{$entry_associates[$entry.id].option.取得したいオプションID} ※「取得したいオプションID」部分にはオプションIDを代入してください。 例)取得したいオプションIDが「test1」の場合は{$entry_associates[$entry.id].option.test1} |
エントリーのオプションIDが「取得したいオプションID」のオプションに登録されている内容 |
説明すると、
{$entry_associates[$entry.id].option.[$option.id]}
こんな感じです。
つまり、
{$エントリーIDのエントリーのオプションのテーブルを指定して.オプションが.[$どのIDのオプションなのかを指定する]}
こういうことです。
オプションを個別に表示する場合は、[$option.id]部分に、[取得したいオプションID]を書き込みます。
たとえば、オプションID「test1」のオプションを取得したいなら、
{$entry_associates[$entry.id].option.test1}
のようになります。
オプションを一括で表示する場合は、[$option.id]部分を取得するために、オプション格納テーブルの情報を取得する必要があります。
オプション格納テーブルには、そのfreoに登録されているオプションのID、名前などが格納されています。
詳細は、freo公式サイトの機能解説→本体のテーブル構成→オプション格納テーブルのページをご覧下さい。
オプション格納テーブルの情報を取得するには、foreachを使います。
つまり、
<!--{foreach from=$freo.refer.options|smarty:nodefaults item='option'}--> オプションの情報を表示する部分 <!--{/foreach}-->
このようにします。
よって、ページのオプションを取得する場合は、
<!--{foreach from=$freo.refer.options|smarty:nodefaults item='option'}--> {$entry_associates[$entry.id].option.[$option.id]} <!--{/foreach}-->
このようになります。
エントリーのオプションを一括で表示しているのは、[freo/templates/internals/default/default.html]の126~135行目の部分です。
オプションを個別で表示するときのテンプレート編集例はfreo公式サイトの各機能の解説から「オプションを個別に表示する」を参考にしてください。