2016-07-23 70 views
1

SiteConfig之內有一個TextField網站標題。我試圖通過SiteConfig擴展在類SiteConfigExtension extends DataExtension中更改此文本字段$titleField的標籤。來自母類的SilverStripe更改字段標籤

這裏是siteconfig /代碼/模型/其中它的創建代碼:

$fields = new FieldList(
    new TabSet("Root", 
     $tabMain = new Tab('Main', 
      $titleField = new TextField("Title", _t('SiteConfig.SITETITLE', "Site title")), 
       .... 

問:什麼是更換SiteTitle標籤,而無需去除的SiteConfig擴展該領域的最簡單的方法和重新添加它與所需的標籤?

回答

1

更新標題從SiteConfigExtension使用updateCMSFields ...

class SiteConfigExtension extends DataExtension { 

    public function updateCMSFields(FieldList $fields) { 
     if ($titleField = $fields->dataFieldByName('Title')) 
      $titleField->setTitle('my title'); 
    } 

} 
+0

謝謝巴里。 '$ titleField'在類SiteTree內的方法中設置。我怎麼能改變一個子類中的$ titleField的值,讓我們說''擴展SiteTree'的頁面。 – Faloude

+0

@Faloude更新了具體情況 – Barry

+0

這似乎並不幸運 – Faloude

2

你可以利用實現_t()功能。把下面的你mysite/lang/{LANG_CODE}.yml文件:

{LANG_CODE}: 
    SiteConfig: 
    SITETITLE: 'My new title' 

更換{LANG_CODE}與使用的管理語言(S)(例如,對於英語sv瑞典,或en)。保持你的代碼與代碼分離帶來很多好處。請記得在更新YAML文件後運行?flush

https://docs.silverstripe.org/en/3.4/developer_guides/i18n/

+0

啊,是的,聰明。然而,'_t()'的默認值仍然會在'class SiteTree'中硬編碼,從而在默認語言環境中顯示原始標籤,或者當沒有定義翻譯時。 – Faloude

+0

你是對的,一個缺點是如果有許多管理員在不同的地區,那麼你必須爲每個地區定義字符串。但即使在默認語言環境中,定義的lang文件也會優先使用afaik。我認爲它是'site lang file'>'module lang file'>'default string'>'field name' –