2017-10-19 12 views
0

Silverstripe CMSで新しいメニュー項目を作成しようとしています。私はまだそれを取得しません。私は何が悪いのか分からない。 Silverstripe 3.6についてです。Silverstripe CMSで新しいメニュー項目を追加する

「/ dev/build」と「dev/build?flush = 1」を試しました。しかし、結果はありません。

Footerinfos.php(個人用サイト/コード/)

class FooterInfos extends ModelAdmin { 

public static $managed_models = array('FooterInfo'); 
static $url_segment = 'footerinfo'; 
static $menu_icon = 'framework/admin/images/menu-icons/network.png'; 
static $menu_title = 'Footer'; 

} 

Footerinfo.php(個人用サイト/コード/)

class FooterInfo extends DataExtension { 
static $db = array(
    'FooterHead1' => 'Varchar(255)', 
    'FooterHead2' => 'Varchar(255)', 
    'FooterHead3' => 'Varchar(255)', 
    'FooterText1' => 'HTMLText', 
    'FooterText2' => 'HTMLText', 
    'FooterText3' => 'HTMLText', 
); 

function getCMSFields() { 
    $fields = parent::getCMSFields(); 
    $fields->addFieldToTab('Root', new TabSet('Footer')); 
    $fields->addFieldToTab('Root.Footer', new TextField('FooterHead1', 'Footer - Kop 1')); 
    $fields->addFieldToTab('Root.Footer', $h1=new HTMLEditorField('FooterText1', 'Footer - Tekst 1')); 
    $fields->addFieldToTab('Root.Footer', new TextField('FooterHead2', 'Footer - Kop 2')); 
    $fields->addFieldToTab('Root.Footer', $h2=new HTMLEditorField('FooterText2', 'Footer - Tekst 2')); 
    $fields->addFieldToTab('Root.Footer', new TextField('FooterHead3', 'Footer - Kop 3')); 
    $fields->addFieldToTab('Root.Footer', $h3=new HTMLEditorField('FooterText3', 'Footer - Tekst 3')); 
    $h1->setRows(7); 
    $h2->setRows(7); 
    $h3->setRows(7); 

    return $fields; 
} 

} 

更新14:53U:

それが持っていますメニュー項目を作成することができました。 選択メニューの代わりにこれらのフィールドにすぐに表示されるかどうかは疑問です。設定メニューでも同じように、フィールドはすぐに表示されます。

私はすぐにフィールドを見ることはありません。 IDのリストのみ。そのIDをクリックすると、フィールドだけが表示されます。それは意図ではありません。すぐにすべてのフィールドにする必要があります。 1つのフッタしかないからです。

私は少し私の言語にコードを翻訳しています;)

Voettekst.php

class VoetTekst extends DataObject { 

static $db = array(
    'VoetKop1' => 'Varchar(255)', 
    'VoetKop2' => 'Varchar(255)', 
    'VoetKop3' => 'Varchar(255)', 
    'VoetTekst1' => 'HTMLText', 
    'VoetTekst2' => 'HTMLText', 
    'VoetTekst3' => 'HTMLText', 
); 

public function getCMSFields() { 

    return FieldList::create(
     TextField::create('VoetKop1', 'Footer - Kop 1'), 
     HTMLEditorField::create('VoetTekst1', 'Footer - Tekst 1')->setRows(7), 

     TextField::create('VoetKop2', 'Footer - Kop 2'), 
     HTMLEditorField::create('VoetTekst2', 'Footer - Tekst 2')->setRows(7), 

     TextField::create('VoetKop3', 'Footer - Kop 3'), 
     HTMLEditorField::create('VoetTekst3', 'Footer - Tekst 3')->setRows(7) 
    ); 

} 
} 

VoettekstAdmin.php

class VoettekstAdmin extends ModelAdmin { 

private static $managed_models = array('Voettekst'); 
private static $url_segment = 'voettekst'; 
private static $menu_icon = 'framework/admin/images/menu-icons/16x16/network.png'; 
private static $menu_title = 'Voettekst'; 

} 

スクリーンショット:

First page

Second page after click on ID

答えて

0

テンプレートには何がありますか? $FooterInfoまたは<%loop $ FooterInfo%> `を呼び出すだけでは、基本ページクラスがそのことを知る必要があるため、機能しません。次のようにページベースにメソッドを追加できます。

class Page extends SiteTree 
{ 
    public function FooterInfo() 
    { 
     return FooterInfo::get(); 
    } 
} 

すべてのページでフッター情報を返すには

DataExtensionとしてDataExtensionを実際に使用していない限り、それをDataExtensionとして適用する場合を除きます。その場合

、その様子から、データの拡張子(例:あなたのconfig.yml

を適用するためにマニフェストを伝え、あなたの設定を提供してくださいしかし、私はあなたがFooterInfoDataObject、ないDataExtensionを拡張したいと思います。

0

私はSS3で始まると信じ*前方に「プライベート」であることを必要とするものを動かすので、多分にコードを変更してみてください:。***

class FooterInfoAdmin extends ModelAdmin { 
    private static $managed_models = array('FooterInfo'); 
    private static $url_segment = 'footerinfo'; 
    private static $menu_icon = 'framework/admin/images/menu-icons/network.png'; 
    private static $menu_title = 'Footer'; 
} 

答えの上にあなたの最初の問題を修正...

UPDATE 1 ::今すぐあなたのDataObject用

class FooterInfo extends DataObject { 
    static $db = array(
     'FooterHead1' => 'Varchar(255)', 
     'FooterHead2' => 'Varchar(255)', 
     'FooterHead3' => 'Varchar(255)', 
     'FooterText1' => 'HTMLText', 
     'FooterText2' => 'HTMLText', 
     'FooterText3' => 'HTMLText', 
    ); 

    public function getCMSFields() { 
     return new FieldList(
      TextField::create('FooterHead1', 'Footer - Kop 1'), 
      HTMLEditorField::create('FooterText1', 'Footer - Tekst 1')->setRows(7), 

      TextField::create('FooterHead2', 'Footer - Kop 2'), 
      HTMLEditorField::create('FooterText2', 'Footer - Tekst 2')->setRows(7), 

      TextField::create('FooterHead3', 'Footer - Kop 3'), 
      HTMLEditorField::create('FooterText3', 'Footer - Tekst 3')->setRows(7) 

     ); 
    } 
} 

UPDATE 2 ::これは、私はあなたが本当にする必要はありません、このような小さなタスクのために何をしているかを再実行する方法を説明するために、新しいアップデートですModelAdminによって管理されます。

私はFooterコンテンツを管理するためにSiteConfigを拡張します。他の人は私に同意しないかもしれませんが、 "サイト全体"のものは一箇所で管理し、SiteConfigはそのための最適な場所です。この方法では、まったく新しいDataObjectや新しいModelAdminは必要ありません。 、そして、

SiteConfig: 
    extensions: 
    - SiteConfigExtension 

は/ dev /構築を実行し、そして、あなたは新しいが表示されます。あなたのconfig.ymlアドオンに続いて

class SiteConfigExtension extends DataExtension 
{ 
    private static $db = [ 
     'FooterHead1' => 'Varchar(255)', 
     'FooterHead2' => 'Varchar(255)', 
     'FooterHead3' => 'Varchar(255)', 
     'FooterText1' => 'HTMLText', 
     'FooterText2' => 'HTMLText', 
     'FooterText3' => 'HTMLText', 
    ]; 

    public function updateCMSFields(FieldList $fields){ 
     $fields->addFieldToTab('Root.Footer', TextField::create('FooterHead1', 'Footer - Kop 1')); 
     $fields->addFieldToTab('Root.Footer', HTMLEditorField::create('FooterText1', 'Footer - Tekst 1')->setRows(7)); 

     $fields->addFieldToTab('Root.Footer', TextField::create('FooterHead2', 'Footer - Kop 2')); 
     $fields->addFieldToTab('Root.Footer', HTMLEditorField::create('FooterText2', 'Footer - Tekst 2')->setRows(7)); 

     $fields->addFieldToTab('Root.Footer', TextField::create('FooterHead3', 'Footer - Kop 3')); 
     $fields->addFieldToTab('Root.Footer', HTMLEditorField::create('FooterText3', 'Footer - Tekst 3')->setRows(7)); 
    } 
} 

:新しいファイルに

プレイスにはSiteConfigExtension.phpと呼ばれる:以下のコードを参照してください。タブの[設定]タブで、フッターと呼ばれる新しいフィールドを追加します。

UPDATE 3 ::多分あなたはあなたのDataObjectでこれを試すことができます。

public function getCMSFields() 
{ 
    $fields = new FieldList(
     new TabSet(
      "Root", 
      $tabMain = new Tab(
       TextField::create('FooterHead1', 'Footer - Kop 1'), 
       HTMLEditorField::create('FooterText1', 'Footer - Tekst 1')->setRows(7), 

       TextField::create('FooterHead2', 'Footer - Kop 2'), 
       HTMLEditorField::create('FooterText2', 'Footer - Tekst 2')->setRows(7), 

       TextField::create('FooterHead3', 'Footer - Kop 3'), 
       HTMLEditorField::create('FooterText3', 'Footer - Tekst 3')->setRows(7) 
      ), 
     ), 
     new HiddenField('ID') 
    ); 

    $this->extend('updateCMSFields', $fields); 

    return $fields; 
} 

***免責事項:上記のコードはテストされていません。

+0

@Simon ErkelensもDataObjectについて正しいですが、これはあなたの主な質問ではないと思います... –

+0

これは機能します!選択メニューの代わりにこれらのフィールドにすぐに表示されるかどうかは疑問です。設定メニューでも同じように、フィールドはすぐに表示されます。 – WillieBoy

+0

はい、左側の(CMS内の)フッターリンク/タブをクリックすると(modeladmin)、すぐに6つのフィールドがすべて表示されます。私はあなたがタブを作成する必要があると信じていません。あなたが何かを追加し始めてから別のタブに分割しなければ、ユーザーはどこで編集するのかを簡単に知ることができます。 –

0

上記の答えを参照すると、$fields = parent::getCMSFields();はデータオブジェクトではなくページで使用されます。

簡単な方法は、以下を使用することです:

function getCMSFields() { 
    $fields = singleton($this->ClassName)->getFrontendFields(); 
    return $fields; 
} 

あなたはより多くの制御をしたい場合は、あなたのようなものを使用することができます:あなたはおそらく、このためSiteConfigを使用したほうが良いです

function getCMSFields() { 
    return FieldList::create(
    TextField::create('FooterHead1', 'Footer - Kop 1'), 
    HTMLEditorField::create('FooterText1', 'Footer - Tekst 1')->setRows(7) 
); 
} 
+1

データオブジェクトに '$ fields = parent :: getCMSFields()'を使うことがよくあります。そのため、scaffolderを呼び出すため、手動で各フィールドを作成する必要はありません。 – wmk

0

をただ1つのフッターが本当に必要です。データオブジェクトは複数のレコードに使用されます。あなたのテンプレートで今

個人用サイト/コード/ CustomSiteConfig.php

class CustomSiteConfig extends DataExtension { 

    private static $db = array(
    'VoetKop1' => 'Varchar(255)', 
    'VoetKop2' => 'Varchar(255)', 
    'VoetKop3' => 'Varchar(255)', 
    'VoetTekst1' => 'HTMLText', 
    'VoetTekst2' => 'HTMLText', 
    'VoetTekst3' => 'HTMLText' 
); 

    public function updateCMSFields(FieldList $fields) { 
    $fields->addFieldsToTab('Root.Footer', array(
     TextField::create('VoetKop1', 'Footer - Kop 1'), 
     HTMLEditorField::create('VoetTekst1', 'Footer - Tekst 1')->setRows(7), 

     TextField::create('VoetKop2', 'Footer - Kop 2'), 
     HTMLEditorField::create('VoetTekst2', 'Footer - Tekst 2')->setRows(7), 

     TextField::create('VoetKop3', 'Footer - Kop 3'), 
     HTMLEditorField::create('VoetTekst3', 'Footer - Tekst 3')->setRows(7) 
    )); 
    } 
} 

個人用サイト/ _config/extensions.yml

SiteConfig: 
    extensions: 
    - CustomSiteConfig 

、あなたは変数にアクセスする$SiteConfig.variableを使用することができます。あなたが使用できる最初のタイトルをつかむために$SiteConfig.VoetKop1

これは通常、テンプレートに含まれています。

テーマ/ THEMENAME /テンプレート/付属/ Footer.ss

<div class="row"> 
    <div class="medium-4 small-12 columns"> 
    <h5>$SiteConfig.VoetKop1</h5> 
    <div class="typography">$SiteConfig.VoetTekst1</div> 
    </div> 
    <div class="medium-4 small-12 columns"> 
    <h5>$SiteConfig.VoetKop2</h5> 
    <div class="typography">$SiteConfig.VoetTekst2</div> 
    </div> 
    <div class="medium-4 small-12 columns"> 
    <h5>$SiteConfig.VoetKop3</h5> 
    <div class="typography">$SiteConfig.VoetTekst3</div> 
    </div> 
</div> 

次にあなたが `<%を使用します。これは、通常、テーマ/ THEMENAME /に起こるであろうフッター%>

が含まれますテンプレート/ Page.ssファイル。

テーマ名をテーマフォルダに変更するのを忘れないでください。管理者で設定リンクの下で

、今、これらのフィールドを持つフッターと呼ばれるタブが存在します。

このコードはテストされていませんが、動作するはずです。

+0

私もそれをやっていました。したくないですが。コンテンツマネージャは他のサイト構成設定をカスタマイズできないためです。しかし、彼らはフッターを調整するかもしれません。そういうわけで、それを別にしなければならないのです。 – WillieBoy

+0

http://api.silverstripe.org/ja/3.6/class-Member.html#_inGroupを使用して、異なるフィールドを異なるユーザーに表示できます。 –

関連する問題