2010-02-26 395 views
9

我正在努力完成以下工作。我需要使用Drupal 6作爲項目需求,但是我想將它與我自己的HTML和CSS樣式表一起用於每個節點/視圖/面板等。如何擺脫Drupal CSS樣式表?

問題是,不管主題如何,我總是發現Drupal適用於我的HTML內容我的CSS樣式表和與所選主題相關的CSS。我也試過,沒有成功,使用stylestripper模塊(安裝在sites/all/modules中)。不管我做什麼,額外的CSS樣式表應用於我的頁面,完全破壞我的佈局。

實現此目的的正確方法是什麼?爲什麼stylestripper根本不起作用?有沒有完全空白的主題?我已經嘗試了基本的,母艦,禪宗等,但我總是看到額外的CSS樣式表應用到我的網頁。

這讓我發瘋,Drupal被其他人選爲靈活性。 預先感謝您。

回答

6
<?php 
/** 
* Helper function to allow easy CSS excludes + includes 
*/ 
function _phptemplate_get_css($exclude = array(), $include = array()){ 
$css = drupal_add_css(); 
foreach ($css['all']['module'] as $k => $path) { 
    $file = substr($k, strrpos($k, '/') + 1); 
    if (in_array($file, $exclude)){ 
    unset($css['all']['module'][$k]); 
    } 
} 
foreach ($include as $file){ 
    $css['all']['theme'][path_to_theme() .'/'. $file] = true; 
} 
return drupal_get_css($css); 
?> 

更多的drupal.org

更新:
合適的地方把這個功能,在template.php文件的主題。其實在你的情況下,你需要傳遞一個你想排除的css文件名數組。
drupal_add_css()的調用沒有任何參數通過,將爲$css提供將附加到您的主題的CSS文件數組。所以這是進入的好時機!

如您所見,在第一個foreach循環中,我們只需尋找$css陣列中存在的傳入$exclude數組中的文件名,以刪除樣式。我們在第二個循環中進行樣式插入。最後,我們返回所有樣式的主題表示,這些樣式應附加到使用drupal_get_css()函數的主題上。 (也許在你的情況什麼都沒有)

那麼,在哪裏調用這個函數?您可以在D5的_phptemplate_variables()或D6的YOUR_THEME_preprocess()中調用此幫助函數。正如我們看到這個動作的D6 (未經測試)

function YOUR_THEME_preprocess(&$vars, $hook){ 
    // Stylesheet filenames to be excluded. 
    $css_exclude_list = array(
     'lightbox.css', 
     'lightbox_lite.css', 
    ); 

    // Making use of previously defined helper function. 
    $vars['styles'] = _phptemplate_get_css($css_exclude_list); 
} 

我敢肯定你知道如何排除「他們所​​有;)

+0

謝謝,這似乎是完美的。您能否添加實際使用該功能所需的缺失細節?我應該在哪個文件中放置函數?如何調用它來排除所有的CSS樣式表? – 2010-02-27 11:56:04

+0

不客氣,我要'更新答案;) – sepehr 2010-02-27 12:39:35

+0

優秀!這正是我正在尋找的!感謝您分享這一點! – 2010-02-27 14:59:57

0

我不這樣會工作,但我認爲只是刪除以下行你的主題的page.tpl.php中

<?php echo $styles ?> 

,然後Drupal將沒有任何自己的風格..
這可能是你的工作。


尼茨