プログラムからページを操作する
概要
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ドキュメントはこちらをご参照ください。