多言語サイトや外部出力の仕組みを整えていく中で、「ProcessWireの情報を /site/templates/
ディレクトリ外から取得したい」というニーズが発生します。
今回は、NEWS一覧ページを独自のPHPファイルで構築する方法を、コード付きでご紹介します。
多言語サイトや外部出力の仕組みを整えていく中で、「ProcessWireの情報を /site/templates/
ディレクトリ外から取得したい」というニーズが発生します。
今回は、NEWS一覧ページを独自のPHPファイルで構築する方法を、コード付きでご紹介します。
フルスタックサイト構築
/site/templates/
の外に設置された独立した news.php
などのファイルで、NEWS一覧を表示したい
表示件数・ページネーション対応
news-detail
テンプレートを対象に取得
<?php
// ProcessWire を読み込む
include('./processwire/index.php');
ProcessWireのインスタンスを使うためには、明示的に index.php
を読み込む必要があります。
表示用のHTML部分は簡略化しています。
テンプレート名= TemplateName
日時フィールド名=news_date
// 1ページに表示する記事数
$limit = 10;
// URLパラメータから `page` を取得(デフォルト: 1)
$currentPage = isset($_GET['page']) ? (int) $_GET['page'] : 1;
// 取得開始位置を計算
$start = ($currentPage - 1) * $limit;
// NEWSデータを取得
$newsPages = $pages->find("template=TemplateName
, limit=$limit, start=$start, sort=-news_date");
// 総ページ数を算出
$totalPages = ceil($newsPages->getTotal() / $limit);
<h1>NEWS一覧</h1>
<table>
<tr><th>日付</th><th>カテゴリ</th><th>タイトル</th></tr>
<?php foreach ($newsPages as $newsPage): ?>
<tr>
<td>
<?php
// news_dateがUNIXタイムスタンプであることを確認
$newsDate = $newsPage->news_date;
if ($newsDate) {
try {
// タイムスタンプを使用してDateTimeオブジェクトを作成
$datetime = new DateTime();
$datetime->setTimestamp($newsDate); // UNIXタイムスタンプをセット
echo $datetime->format('Y.m.d'); // 'Y.m.d' フォーマットで表示
} catch (Exception $e) {
// 変換に失敗した場合のエラーハンドリング
echo "エラー: " . $e->getMessage();
}
} else {
echo "日付が設定されていません";
}
?>
</td>
<td>
<?php
$categories = $newsPage->news_category;
if (isset($categories[1])) {
$item = $categories[1];
echo "{$item->title}";
}
?>
</td>
<td><?php echo $newsPage->title; ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php if ($currentPage > 1): ?>
<a href="?page=<?php echo $currentPage - 1; ?>">前へ</a>
<?php endif; ?>
<span><?php echo $currentPage; ?> / <?php echo $totalPages; ?></span>
<?php if ($currentPage < $totalPages): ?>
<a href="?page=<?php echo $currentPage + 1; ?>">次へ</a>
<?php endif; ?>
ProcessWireは /site/templates/
の外からでもデータ取得が可能
include('./processwire/index.php');
で読み込み可能
テンプレートとフィールド設計が済んでいれば、外部出力も柔軟に対応
外部からJSONやHTML出力が求められるヘッドレスCMS用途でもこの方法は活用できます。
独自のランディングページやLPからNEWS一覧を呼び出したい
sitemap.xmlやRSSをカスタム出力したい
ProcessWireを使った静的ジェネレーターの土台にしたい
気になった方はぜひ、夢双合同会社へお気軽にご相談ください!
まずは、お気軽にお問い合わせください。