2017-10-19 96 views
0

我正在嘗試在Silverstripe CMS中創建一個新的菜單項。我還是不明白。我不知道我做錯了什麼。這是關於Silverstripe 3.6。在Silverstripe CMS中添加新的菜單項

我也試過「/ dev/build」和「dev/build?flush = 1」。但沒有結果。

Footerinfos.php(mysite的/代碼/)

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(mysite的/代碼/)

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或<%循環$ FooterInfo%>`將不起作用,因爲您的基頁類需要知道它。你可以像這樣在頁面底部添加一個方法:

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

返回每頁上的頁腳信息。

除非您實際上將DataExtension用作DataExtension並將其應用於Page。

在這種情況下,請提供你的配置,告訴清單申請數據擴展(例如你的config.yml

從外觀上來看,雖然,我想你想FooterInfo延長DataObject,不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'; 
} 

***以上回答您的固定第一個問題......

更新1 ::現在你的數據對象

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) 

     ); 
    } 
} 

更新2 ::這是一個新的更新來解釋我怎麼會重做你在做什麼,這樣一個小的任務,並不真正需要由ModelAdmin管理。

我會擴展SiteConfig來管理您的頁腳內容。其他人可能不同意,但對我來說,任何「網站範圍」的內容都應該在中心位置進行管理,SiteConfig是完美的位置。這樣你甚至不需要一個全新的DataObject或新的ModelAdmin。請參見下面的代碼:在一個新的文件

地方叫SiteConfigExtension.php

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)); 
    } 
} 

然後在您的config.yml地址:

SiteConfig: 
    extensions: 
    - SiteConfigExtension 

然後,運行的/ dev /建造,你應該看到一個新的在設置選項卡中,您可以使用新字段稱爲頁腳。

更新3 ::也許你可以在你的數據對象試試這個:

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

This Works!只有我想知道這些字段是否可以立即顯示,而不是選擇菜單。因此,與「設置」菜單一樣,這些字段將立即顯示。 – WillieBoy

+0

是的,一旦你點擊左邊(CMS內部)的腳註鏈接/選項卡(modeladmin),你應該立即看到所有6個字段。我不相信你應該爲它們創建一個標籤,除非你開始添加越來越多,並且需要開始將它們分離到不同的標籤中,這樣你的用戶就可以更容易地知道去哪裏編輯東西。 –

0

參照您的上述回答,$fields = parent::getCMSFields();用於頁面,而不是數據對象。

更簡單的方法是使用以下命令:

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

如果你想要更多的控制,你可以使用類似:

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

我經常在我的DataObjects中使用'$ fields = parent :: getCMSFields()',因爲這會調用腳手架,然後我不必手動創建每個字段。 – wmk

0

你可能會更好使用SiteConfig關閉這是你只真的需要一個頁腳。數據對象用於多個記錄。

的mysite /代碼/ 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) 
    )); 
    } 
} 

的mysite/_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/templates/Page.ss文件。

不要忘了更改主題名稱與您的主題文件夾。

設置鏈接管理員,現在將有一個標籤頁腳與這些字段。

此代碼未經測試,但它應該工作。

+0

我也曾這樣做過。但我不想。由於內容管理員無法自定義其他網站配置設置。但他們可能會調整頁腳。這就是爲什麼它必須分開。 – WillieBoy

+0

您可以使用http://api.silverstripe.org/en/3.6/class-Member.html#_inGroup向不同的用戶顯示不同的字段。 –