プログラムからページを操作する
概要
concrete5 ではグラフィカルにページを操作するインターフェースを持っているにしても、開発者がプログラムからページ名を変更したり、ページの属性を設定したり、新しいページを作成したりしたい場合があります。concrete5 のAPIは簡単な方法を提供します。
既存ページに属性を設定する
特定のページの「ナビから除く」属性を true に設定したいとしましょう。「ナビから除く」は、"exclude_nav" というハンドルの真偽値の属性です。
$page = \Page::getCurrentPage(); $page->setAttribute('exclude_nav', true);
これだけです!より複雑な属性タイプでは、2つ目の属性により複雑な値を渡す必要があるかもしれません。例えば、特定のページに住所タイプの属性を設定したい場合、住所属性タイプでは Concrete\Attribute\Address\Value オブジェクトのプロパティに対応するキーを持つ配列を渡す必要があります。
$page = \Page::getCurrentPage(); $av = array( 'address1' => '123 SW Test', 'address2' => 'Suite 100', 'city' => 'Portland', 'state_province' => 'OR', 'postal_code' => '99999' ); $page->setAttribute('address', $av);
ページの名前、説明、投稿日、投稿者を変更する
Page クラスの update メソッドは、最初(で唯一)の引数に渡された配列のキーに対応する、Page オブジェクトの様々なプロパティを更新することができます。
$page = \Page::getCurrentPage(); $page->update(array( 'cName' => 'My new page name' // ページ名の更新 )); $page->update(array( 'cName' => 'My new page name', 'cDescription' => 'My new page description', // 名前と説明を更新 )); $newAuthor = \UserInfo::getByUserName('aembler'); $page->update(array( 'uID' => $newAuthor->getUserID() // ページの投稿者を更新 )); $date = date('Y-m-d H:i:s'); $page->update(array( 'cDatePublic' => $date // ページの投稿日を現時点に更新 ));
update メソッドの中では、次の配列キーがチェックされます。
- ページ名 (cName)
- ページの説明 (cDescription)
- ページの公開日 (cDatePublic)
- ページの投稿者 (ユーザーIDの数値) (uID)
- ページテンプレートID (pTemplateID)
- URLハンドル (cHandle)
- フルページキャッシュを有効 (true/false) (cCacheFullPageContent)
- 全体のフルページキャッシュの有効期間をオーバーライド (true/false) (cCacheFullPageContentOverrideLifetime)
- フルページキャッシュの有効期間を設定(もしオーバーライドされている場合) (cCacheFullPageContentLifetimeCustom)
新しいページをプログラムで追加する
これは Page::add メソッドで行います。まず、新しいページを追加する親ページを、サイトの中から選択します。
$parentPage = \Page::getByPath('/my/articles');
次に、新しいページに適用したいページタイプを選択します。
$pageType = \PageType::getByHandle('blog_post');
さらに、新しいページに適用したいページテンプレートを選択します。
$template = \PageTemplate::getByHandle('three_column');
これらを組み合わせて、追加したいページのプロパティを格納した $data 配列を作成します($data 配列は、上記の Page::update で使用した配列と似ています)。この $data 配列は次の配列キーを含むことができます。
- ページ名 (cName)
- ページの説明 (cDescription)
- ページの投稿日 (cDatePublic)
- ページの投稿者 (ユーザーIDの数値) (uID)
- URLスラッグ/ハンドル (cHandle)
- 最初に作成されるページバージョンを承認するかどうか。通常デフォルトは true です。 (cvIsApproved)
- パッケージID(このページが特定のパッケージに属する場合)(pkgID)
サンプル
それでは、/my/articles ページの下に、ブログ記事を追加してみましょう。
$parentPage = \Page::getByPath('/my/articles'); $pageType = \PageType::getByHandle('blog_post'); $template = \PageTemplate::getByHandle('three_column'); $entry = $parentPage->add($pageType, array( 'cName' => 'Hello World!', 'cDescription' => 'Just a quick blog post.', 'cHandle ' => 'hello-all' ), $template);
$entry は新しいページのオブジェクトになります。
ページを移動する
APIからページを移動したりコピーすることも簡単です。単に move() メソッドを移動したいページで呼び出し、引数に新しい親ページを指定すればOKです。作成した記事をアーカイブに移動してみましょう。
$entry = \Page::getByPath('/my/articles/hello-all'); $archives = \Page::getByPath('/archives'); $entry->move($archives);
ページをコピーする
ページを特定の場所に複製したいですか?似たようなパターンで可能です。
$starter = \Page::getByPath("/starters/profile-page'); $parent = \Page::getByPath('/profiles'); $newPage = $starter->duplicate($parent);
これで新しい $newPage オブジェクトが取得できましたので、値を更新します。
$newPage->update(array('cName' => 'Jane Doe'));
ページの削除もシンプルです。
$page = \Page::getByPath('/profiles/jane-doe'); $page->delete();
重要
ページの削除は、即座に実施されます。delete() メソッドでは、ゴミ箱には入りません。もしゴミ箱に入れたい場合は、 Page::moveToTrash(); を使ってください。
$page = \Page::getByID(200); $page->moveToTrash();
API
このページでご紹介したのは concrete5 API で行えるサンプルの一部になります。ページのAPIドキュメントはこちらをご参照ください。