プログラムからページを操作する

概要

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ドキュメントはこちらをご参照ください。

API リファレンス 

原文:Working with Pages Programmatically