2016-09-13 6 views
3

SilverStripe Blogモジュールへのプラグインを購読するモジュールを作成しています。 BetterNavigatorが画面から消え、私はと呼ばれる使用しかし、別のプラグインを意図したとおり、この作品瞬間SilverStripeモジュールが他のモジュールを上書き表示する

<?php 
class SubscriptionWidget extends DataExtension { 

    public function SubscriptionWidget() { 
     $controller = SubscriptionWidget_Controller::create(); 
     $form = $controller->SubscriptionWidget(); 
     return $form; 
    } 
} 

class SubscriptionWidget_Controller extends Controller { 
    private static $allowed_actions = array('SubscriptionWidget'); 

    public function SubscriptionWidget() { 
     $form = Form::create(
      $this, 
      __FUNCTION__, 
      FieldList::create(
       TextField::create('Email', 'Email'), 
       TextField::create('Name', 'Name') 
      ), 
      FieldList::create(
       FormAction::create('submit', 'Subscribe') 
      ) 
     );//->setTemplate('SubscriptionWidget'); 
     return $form; 
    } 

    public function submit($data, $form) { 
     return $this->redirect('/subscribed'); 
    } 

} 

--- 
Name: subscription 
After: 'framework/*','cms/*' 
--- 
Blog: 
    extensions: 
    - Subscription 
Page_Controller: 
    extensions: 
    - SubscriptionWidget 

そして、私のSubscriptionWidget.php:これまでのところ私は私のYMLを持っています。私が取ると

Page_Controller: 
    extensions: 
    - SubscriptionWidget 

私のymlから再び出ます。私はかなりシンプルで、矛盾する機能はない、両方のコードベースを見てきました。 Page_Controllerの代わりにContentControllerを使ってみましたが、BetterNavigatorを無効にしてから再び表示されるまでテンプレートが消えてしまいました。私は1つまたは2つのかなり空のクラスを持っていますが、BetterNavigatorにBetterNavigatorという関数が1つしかないうちに、すべてがSubscriberのバリエーションと呼ばれます。

なぜこれが起こっていますか?

+1

あなたは、それはそれはそれは前またはそれの後であることを確認するために、他のモジュールを参照 ように「前」またはあなたのYMALの一部「後」に変更しようとしたことがありますか? – Barry

+0

@Barryは 'Before: 'betternavigator/*''を試してみた後に違いはありません。 – Rudiger

+0

どのバージョンのSSとBetterNavigatorモジュールを使用していますか? –

答えて

1

コード内に1つのクラッシュしか表示されないため、実行時の動作が正しくありません。あなたのメソッドSubscriptionWidget::SubscriptionWidget()は、レガシークラスのコンストラクタとして扱われます。ですから、より良いクラスとメソッドの名前について考えることをお勧めします。

class SubscriptionWidget extends Extension 
{ 
    // explicitly defined constructor 
    public function __construct() { 
     parent::__construct(); 
    } 

    // now this one is normal function 
    public function SubscriptionWidget() { 
     $controller = SubscriptionWidget_Controller::create(); 
     $form = $controller->SubscriptionWidget(); 
     return $form; 
    } 
} 
関連する問題