| 方法 | 使う場面 |
|---|---|
| 再生成を依頼する | データを保存したときに、特定のURLを作り直してほしい |
| URL一覧を提供する | 全ページ再生成のときに、自分のページを対象に入れてほしい |
| ページ数を算出する | 一覧のページ送りまで静的化してほしい |
独自プラグインからURLを指定して、生成のキューに積みます。
use BaserCore\Utility\BcContainer;
use HatStaticEngine\Service\StaticPublisherServiceInterface;
if (interface_exists(StaticPublisherServiceInterface::class)) {
BcContainer::get()->get(StaticPublisherServiceInterface::class)->queue('/real_estates/');
BcContainer::get()->get(StaticPublisherServiceInterface::class)->queue([
'/real_estates/',
'/real_estates/' . $entity->id . '/',
]);
}
interface_exists() で囲んでいるので、このプラグインが入っていない環境でも呼び出し側は壊れません。
全ページ再生成のときに、自分のプラグインが持つURLの一覧を渡します。
RealEstate/config/setting.php
return [
'HatStaticEngine' => [
'publicationProviders' => [
'RealEstate' => \RealEstate\Service\RealEstatePublicationProvider::class,
],
],
];
namespace RealEstate\Service;
use HatStaticEngine\Service\StaticPublicationProviderInterface;
class RealEstatePublicationProvider implements StaticPublicationProviderInterface
{
public function getUrls(): array
{
// 例: ['/real_estates/', '/real_estates/1/', '/real_estates/2/']
}
}
1つのProviderが例外を投げても全生成は止まりません(ログに記録して次へ進みます)。
上のProviderは「URLの一覧」を返す仕組みなので、総件数から作るページ数が決まるもの(ページ送り・カテゴリ別一覧など)には向きません。その場合は列挙クラスを登録します。
件数の取得元はDBでもAPIでも構いません。このインターフェースが求めるのは件数だけです。
RealEstate/config/setting.php
return [
'HatStaticEngine' => [
'publicationEnumerators' => [
'RealEstate' => \RealEstate\Service\RealEstateEnumerator::class,
],
],
];
namespace RealEstate\Service;
use Cake\Datasource\EntityInterface;
use HatStaticEngine\Service\Expander\PublicationEnumeratorInterface;
class RealEstateEnumerator implements PublicationEnumeratorInterface
{
public function supports(string $sourceType, string $publicationType): bool
{
return $sourceType === 'RealEstate.RealEstates'
&& $publicationType === 'Pagination';
}
public function enumerate(EntityInterface $mapping, array $fixedVars, bool $needsCount): array
{
return [[
'vars' => [],
'total' => $needsCount ? $this->countPublished() : 0,
'list_count' => 20,
'pager_paths' => ['/real_estates/index', '/real_estates/'],
]];
}
}
| 返す値 | 意味 |
|---|---|
| vars | URLパターンの変数に入れる値。カテゴリ別なら ['category' => 'used'] のように、対象の数だけ配列の要素を返します。 |
| total | 総件数。$needsCount が false のときは 0 で構いません(不要なCOUNTクエリを避けるためのフラグです)。 |
| list_count | 1ページあたりの件数。total ÷ list_count でページ数が決まります。 |
| pager_paths | そのプラグインのページャが出力し得るCMS側のパス。ページャリンクを静的サイト用に書き換えるために使います。 |
独自プラグインのモデルを 差分生成する条件 の対象にするには、そのモデルが baserCMS のイベント機構に対応している(保存・削除の通知を発行する)必要があります。対応していないモデル名を入力した場合は、保存時にエラーで弾かれます。その場合は上の「再生成を依頼する」方法を使ってください。