Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

[gelöst] CSS-Dateien optimieren trotz Download-Methode: Privat

Eingetragen von Benjamin S (11)
am 17.01.2011 - 11:18 Uhr in
  • Allgemeines zu Drupal
  • Drupal 6.x

Hallo zusammen,

ich habe das Problem, dass ich im IE an das 30er Limit der CSS-Dateien komme. Außerdem würde ich gern meine Seite etwas beschleunigen. Leider lässt sich die JS und CSS Optimierung ja nicht bei aktiver privaten Download-Methode benützen. Habe schon den Patch 8 und den Workaround (über Theme) probiert, leider beides ohne Erfolg.

Hat jemand eine Idee/Lösung?

Drupal 6.19

‹ Drupal 7: Wie kann ein Nutzer sein Theme wechseln? Auto Locale ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

CSS-Optimierung im Theme

Eingetragen von Benjamin S (11)
am 25.02.2011 - 16:03 Uhr

Die Zusammenfassung der .css-Dateien wird ins Theme eingebaut. Dazu wird die Datei template.php gepatched und in der Datei page.tpl.php die Ausgabevariable geändert.

Code in template.php: in Zeile 53 wird die Funktion phptemplate_preprocess_page ergänzt.

<?php
//ab hier wird die Orginale Funktion um die CSS-Optimierung ergänzt
$css = drupal_add_css(); //hier werden alle css-Dateien die drupal für die aktuelle Seite laden würde geholt

// Variablen initialisieren
$css_arr = array();
$modifiedDates = '';
$fileString = '';

// alle css-Dateien der Module werden überprüft
foreach($css['all']['module'] as $css_module => $css_module_on) {
   if(
file_exists($_SERVER["DOCUMENT_ROOT"] . base_path() . $css_module)) { //es wird überprüft ob das css-File an der angegebenen Stelle vorhanden ist...
     
$modifiedDates .= filemtime($_SERVER["DOCUMENT_ROOT"] . base_path() . $css_module); //hier wirde der Zeitpunkt der letzten Änderung des Files abgefragt und für dem späteren Dateinamen gemerkt
     
$css_arr[] = $_SERVER["DOCUMENT_ROOT"] . base_path() . $css_module; //hier wird der Pfad und der Name für später gemerkt
     
$fileString .= $css_module . ','; //hier wird der Name der CSS-Datei für den späteren Dateinamen gemerkt
  
}
   else {
drupal_set_message('Die Datei '.$_SERVER["DOCUMENT_ROOT"] . base_path() . $css_module.' kann nicht gefunden werden.', 'error'); } //...wenn nicht, wird in drupal ein Fehler ausgegeben.
}
// alls css-Dateien des Theme werden überprüft. Es ist wichtig, dass dieser Schritt erst nach den CSS der Module passiert, da hier eventuell Einstellungen überschrieben werden sollen
foreach($css['all']['theme'] as $css_theme => $css_theme_on) {
   if(
file_exists($_SERVER["DOCUMENT_ROOT"] . base_path() . $css_theme)) {
     
$modifiedDates .= filemtime($_SERVER["DOCUMENT_ROOT"] . base_path() . $css_theme);
     
$css_arr[] = $_SERVER["DOCUMENT_ROOT"] . base_path() . $css_theme;
     
$fileString .= $css_theme . ',';
   }
   else {
drupal_set_message('Die Datei '.$_SERVER["DOCUMENT_ROOT"] . base_path() . $css_thme.' kann nicht gefunden werden.', 'error'); }
}

$fileName = 'cache/' . md5($fileString . $modifiedDates) . '.css'; //nun wird für die CSS-Datei dieser Seite ein einzigartiger Dateiname per generiert

$path = file_create_path($fileName); //Pfad und Name wo die Datei gespeichert werden soll

if(!file_exists($path)) { //wenn die Datei nicht bereits existiert wird sie nun generiert
  
$combinedContent = '';
  
$unterordner = 0;

   foreach(
$css_arr as $css_file) {
     
//Variablen initialisieren
     
$Dateiinhalt = '';
     
$css_pfad = array();
     
$i = 0;

     
//da unterschiedliche Anführungszeichen für den String-Anfang/-Ende gesetzt werden können werden diese hier behandelt
     
$Dateiinhalt = str_replace("url('", "url(", file_get_contents($css_file));
     
$Dateiinhalt = str_replace("')", ")", $Dateiinhalt);
     
$Dateiinhalt = str_replace('url("', 'url(', $Dateiinhalt);
     
$Dateiinhalt = str_replace('")', ')', $Dateiinhalt);

     
//da sich die CSS-Dateien in Unterordner des Moduls befinden können, würden die Pfade zu z.B. Bildern nicht mehr korrekt sein, deshalb müssen diese hier geändert werden
     
$css_pfad[0] = substr($css_file, 0, strrpos($css_file, '/'));
     
$css_pfad[0] = str_replace('/var/www/drupal', '', $css_pfad[0]);

     
$Dateiinhalt = str_replace('url(', 'url(http://'.$_SERVER["SERVER_ADDR"].$css_pfad[0].'/', $Dateiinhalt);

      while (
eregi($_SERVER["SERVER_ADDR"].$css_pfad[$i].'/../', $Dateiinhalt)) { //weiterer Unterordner?   
        
$css_pfad[$i+1] = substr($css_pfad[$i], 0, strrpos($css_pfad[$i], '/'));
        
$Dateiinhalt = str_replace('url(http://'.$_SERVER["SERVER_ADDR"].$css_pfad[$i].'/../', 'url(http://'.$_SERVER["SERVER_ADDR"].$css_pfad[$i+1].'/', $Dateiinhalt);
        
$i++;
      }

     
$combinedContent .= PHP_EOL.PHP_EOL.$Dateiinhalt; //hier wird der Inhalt der Datei zwischengespeichert.
     
unset($css_pfad);
   }

   if(!
$fh = fopen($path, 'w')) { drupal_set_message('Die Datei '.$file.' kann nicht geöffnet werden.', 'error'); exit;}
   if(!
fwrite($fh, $combinedContent)) { drupal_set_message('In die Datei '.$file.' kann nicht geschrieben werden.', 'error'); exit;}
  
fclose($fh);
}   

$vars['styles_aggregated'] = '<style type="text/css" media="all">@import "/' . $path . '";</style>'; //diese wird dann in der page.tpl.php in Zeile 12 ausgegeben
unset($css_arr);
?>


Änderung in page.tpl.php:
in Zeile 9.

<?php
print $styles
?>

wird in

<?php
print $styles_aggregated
?>

geändert.

So funktioniert die Lösung jetzt auch bei mir.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 9 Stunden
  • Hey danke
    vor 2 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 2 Wochen 1 Tag
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 3 Tagen
  • In der entsprechenden View
    vor 3 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 3 Tagen
  • gelöst
    vor 6 Wochen 6 Stunden
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 1 Tag

Statistik

Beiträge im Forum: 250233
Registrierte User: 20452

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 31 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association