2017-09-14 64 views
0

我正在嘗試將CS​​S要求添加到Blog moduleSilverStripe博客模塊樣式的最佳方法

我採用的當前方法是創建Blog類和Blog_Controller(以及BlogPost和BlogPost_Controller)的子類,試圖將css需求引入到init()函數中。但是,出於某種原因,我似乎無法獲得這些CSS文件的任何參考。

class ProjectsHolder extends Blog{ 

    private static $allowed_children = array(
     'ProjectPage' 
    ); 
    } 

    class ProjectsHolder_Controller extends Blog_Controller{ 

    public function init(){ 
     parent::init(); 
     Requirements::css("{$this->ThemeDir()}/css/projects.css"); 
    } 
    } 

我也嘗試了<%require css%>模板語法。我只能通過在模板頂部的head標籤內對css鏈接標籤進行硬編碼(這太可怕了)了。

我還注意到SilverStripe的DataExtension/SiteConfig方法注入功能的類,看起來可能適用於我的情況。

我的問題是:什麼是樣式模塊,如博客模塊的最佳做法。

顯然有一些我失蹤或不理解在這裏;任何澄清將不勝感激!

回答

1

乍一看,如果您使用的是主題CSS,那麼你可以簡單地使用

Requirements::themedCSS("projects");

在你的代碼雖然,也許支架導致了問題:{$this->ThemeDir()}

SilverStripe Docs給出了在模板文件和php文件中都執行此操作的示例。不過,最近我注意到,現在'偏好'的方式仍然是使用'要求',但是在你提到的模板中。

<% require themedCSS("projects") %>

至於剛剛造型你的博客模塊,並沒有擴展任何內容或修改任何它的核心代碼,你爲什麼不只是添加樣式應用到主樣式表,或者它自己的文件/ css,並將它們包含在主題模板中?

我所做的是創建一個名爲blog.css的文件,並將其包含在我的themes/themename/templates/Page.ss文件中,使用上面的<% require %>來獲取模板。當然你的css文件沒有那麼大的佔用空間,你需要利用組合文件。

+0

是的,在模板化和PHP語法中嘗試過主題CSS - 都無濟於事。 括號代碼是我在教程中注意到的,也嘗試過使用點連接: 'Requirements :: css($ this-> ThemeDir()。/ css/projects.css「);' 是,我可以將我的全局樣式與特定於博客的樣式合併;如果將大型項目細分爲不同的頁面,我發現維護CSS更容易。作爲最後的手段,這可能會奏效。 –

+0

我認爲這個新的推理是因爲你可能有多個主題/模板,並且如果你在模塊或類擴展中指定了特定的樣式,那麼你幾乎被所有主題中的那些樣式所困住。將樣式放入單獨的主題中並使用模板語法,可以讓您更直觀地瞭解每個主題。這也增加了SS更多的MVC框架。 –

+0

@RyanAchten你應該查看你的樣式表的sass http://sass-lang.com/。一旦你使用它,你將永遠不會再回到編輯css文件。 –