Webサイトに常にある必要があるページ(ホームページのように、1つだけです)では、私は拡張機能を作りたがっています。このページは、dev/buildを実行するときに作成する必要があり、CMSで作成、削除、未公開、またはアーカイブすることはできません。しかしそれは編集することができます。SilverStripeは拡張機能で作成できます
canCreate
機能を除いて、何も問題なく動作しているようです。これは、(n)(Data)Extension上にあるときにこの機能がCMSにあまり働かないためです。私が.../admin/pages/addにいるとき、私は何度もページを作成できます。
canCreate
をHomePageクラスに移動すると機能します。しかし、私はそれが
class OnePage extends DataExtension
{
public function requireDefaultRecords()
{
if($this->canCreate()) {
$page = $this->owner;
$page->Title = $this->owner->className;
$page->write();
$page->publish('Stage', 'Live');
$page->flushCache();
}
}
public function canCreate($member = null)
{
return $this->owner->get()->count() == 0;
}
public function canDeleteFromLive($member = null)
{
return false;
}
public function canArchive($member = null)
{
return false;
}
}
class HomePage extends Page
{
private static $extensions = [
'OnePage'
];
}
:-)私の拡張子にしたい私は、これは正しい方法をやっているか、私は何かが足りないのですか?
EDIT
canCreate
方法はうまく動作しますが、私はこのようにそれを解決することができます。
これは、魅力的な効果と効果があります。しかし、問題はエクステンションにcanCreate
メソッドを配置することです。それもうまくいくはずですよね?
おかげであなたの応答のためのSiteTreeを利用し、簡単な1ページ分-サイトを作るためのhttps://github.com/wernerkrauss/silverstripe-onepage/を公開しています:ところで
:それは次のように動作するはずですしかし、 'get'関数は動作します。これは 'DataObject'の[メソッド](http://api.silverstripe.org/3.1/class-DataObject.html#_get)です。それはDataListを返すので、あなたは答えでそれを変更することができますか?私はそれを解放するつもりはないだけでなく、自分のためにそれを使用してください。あなたが実際のHomePageクラスに移動した場合、canCreate関数が動作すると述べたので、この答えは実際に私の質問に答えません。 –
'get'は静的メソッドです。私はあなたが直接それを拡張から呼び出すことはできません。 – wmk
静的メソッドを非静的メソッドとして呼び出す[可能です](http://stackoverflow.com/a/10907777/6251886)試してみてください。 –