ブログページの記事詳細ページ用のPHPモジュールを作成してみます。
今回は練習として、現在表示中の記事のタイトルをPHPモジュール内で出力してみます。
ブログページの記事詳細ページのみで動作するPHPモジュールはPHPモジュールでページの種類で実行の制御を行うで記載してある方法を基にして作成します。
/ドキュメントルート/サイトID/.module/parts/test.php
<?php function soycms_test(string $html, HTMLPage $htmlObj){ if(!$htmlObj instanceof CMSBlogPage) return ""; if(!defined("SOYCMS_BLOG_PAGE_MODE") || SOYCMS_BLOG_PAGE_MODE != CMSBlogPage::MODE_ENTRY) return ""; // 念の為にCMSBlogPageのentryプロパティ値の中にEntryのオブジェクトが格納されているか?を調べておく if(!$htmlObj->entry instanceof Entry) return ""; $entry = $htmlObj->entry; echo $entry->getTitle(); } ?>
このモジュールをブログページの記事詳細ページで出力してみると、現在表示中の記事のタイトルが出力されます。
記事詳細ページでは、$htmlObjに格納されているCMSBlogPageのオブジェクトのプロパティのentryにEntryオブジェクトが格納されています。
$htmlObj->entryのクラス名をダンプしてみると、LabeledEntryが返ってきますが、このオブジェクトはEntryクラスを親に持つクラスになります。
Entryを取得できたら、下記のEntryのクラスファイルに従い、取得したい内容のメソッドを使用します。
https://github.com/inunosinsi/soycms/blob/master/cms/common/domain/cms/Entry.class.php
追記
記事投稿画面に設置したカスタムフィールドから値を登録してみるで記事投稿時にデータベースに登録した値を出力してみる。
/ドキュメントルート/サイトID/.module/parts/test.php
<?php function soycms_test(string $html, HTMLPage $htmlObj){ if(!$htmlObj instanceof CMSBlogPage) return ""; if(!defined("SOYCMS_BLOG_PAGE_MODE") || SOYCMS_BLOG_PAGE_MODE != CMSBlogPage::MODE_ENTRY) return ""; // 念の為にCMSBlogPageのentryプロパティ値の中にEntryのオブジェクトが格納されているか?を調べておく if(!$htmlObj->entry instanceof Entry) return ""; $entry = $htmlObj->entry; echo soycms_get_entry_attribute_value((int)$entry->getId(), "custom_hoge", "string"); } ?>