Css dynamisch zusammenbauen und über <link einbinden

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

basti1012

Erfahrenes Mitglied
Ich habe ca. 500 CSS Dateien / CSS Schnipsel in der Datenbank gespeichert.
Ich hole da immer nur die CSS Dateien raus die ich brauche, um unnötig viel Datenvolumen zu sparen

Wie ich es jetzt habe funktioniert wunderbar, doch ich denke das ist nicht der beste weg und de Validator bemängelt das auch.
Ich sammel die CSS Links in ein Array was dann im Head dann so aussieht
Code verkürzt
PHP:
$css_arrays=array('mobile.css','style.css','wo-bin-ich.css','navigation-top.css','nav2.css','nav2logo.css','navigation_neu.php','create-images.css');
.....
array_push($css_arrays,'footer.css');
$css_array=serialize($css_arrays);
echo "<link rel='stylesheet' href='css/allcss.php?css_arrays=$css_array'>";
In de allcss.php werden dann die Dateien aus der DB geholt und zusammen gebaut.
Verkürzte Code
PHP:
$css_arrays=unserialize($_GET['css_arrays']);
if(count($css_arrays)>=1){
    header("Content-type: text/css");
    // db gedönst was den array auseinander nimmt und die Css Datein dann ausgibt
    echo $code;
}
Das läuft alles ohne Probleme.
Doch der Validator meckert , weil der Link dann so aussieht der im Head steht
  1. Error: Bad value for attribute href on element link: Illegal character in query: { is not allowed.
    From line 72, column 1; to line 72, column 433
    <link rel='stylesheet' href='css/allcss.php?css_arrays=a:14:{i:0;s:10:"mobile.css";i:1;s:9:"style.cs…JS.min.css";i:11;s:15:"ladeanzeige.css";i:12;s:21:"cookieconsent.min.css";i:13;s:10:"footer.css";}'>
Gibt es da ein besseren weg?


Falls mehr Code benötigt wird, kann ich das nachreichen.
Denke aber das es so verständlich ist wie es zu Zeit läuft.
EDIT:
Bei den JS Dateien ist das genau so.
Ich könnte die CSS und JS zwar in einen <style></style> und <script></script> Element zusammen bauen, doch das will ich nicht, es soll eine externe CSS und JS Datei bleiben
 
Zuletzt bearbeitet:

m.scatello

Erfahrenes Mitglied
Und warum nutzt du dafür keine Session?

PHP:
<?php
   session_start();
  
   $css = array("123.css", "456.css");
  
   $_SESSION['css'] = $css;
?>

PHP:
<?php
  session_start();
 
  if (isset($_SESSION['css']))
  {
     foreach ($_SESSION['css'] as $css)
     {   
        header("Content-type: text/css");
        readfile($css);
     }
  }
?>

Statt readfile die Daten aus der DB holen.

Ich habe ca. 500 CSS Dateien / CSS Schnipsel in der Datenbank gespeichert.
Da verliert man doch den Überblick

um unnötig viel Datenvolumen zu sparen
Wie viel KB werden das wohl sein? Dafür den Aufstand?
 

basti1012

Erfahrenes Mitglied
Nicht jede Seite brauch die gleiche CSS, deswegen habe ich das, mal so zusammen gebaut.
Auch bestimmte Klassen brauch man nicht überall, z. B. Error succes Meldungen und so weiter.

Laut DB sind das ca. 10 MB.
Da ist aber alles drinnen wie dataTables, Bootstrap ,fontAwesome usw.
Es gibt viele Seiten, die einfach alles laden und meiner Meinung vollkommen überladen sind.
Ist mein Weg richtig/sinnvoll?
Ich weiß es nicht, lohnt sich der Aufstand?
Ich denke ja.
Wenn man bei PageSpeed Insights die Seite testet, hat das einiges gebracht.
Da es ja so weit läuft ist der Aufstand schon Gott sei Dank vorbei.

Und warum nutzt du dafür keine Session?
Auf die Idee bin ich nicht gekommen, danke.
Werde es gleich mal testen und Report geben
 

m.scatello

Erfahrenes Mitglied
Es gibt viele Seiten, die einfach alles laden
Das ist doch das eigentliche Problem. Deine Ordnung ist ist ok, alles einfach laden ist ja sinnbefreit
Ist mein Weg richtig/sinnvoll?
Ich würde kein CSS in die DB schreiben. Wenn man eine Änderung durchführen muss, hampelt man sofort mit der DB rum, das ist zu umständlich. Und was hat Bootstrap und Fonts in einer Datenbank zu suchen?
Wenn man bei PageSpeed Insights die Seite testet, hat das einiges gebracht.
Wieviele Millisekunden denn? Das lohnt sich doch nicht. Zumindest dann nicht, wenn man nicht alles unnötige zusätzlich lädt.
 

basti1012

Erfahrenes Mitglied
1.Ich würde kein CSS in die DB schreiben. Wenn man eine Änderung durchführen muss, hampelt man sofort mit der DB rum, das ist zu umständlich.
Da hast du eigentlich recht.
Aber, ich sage mal ganz grob:
Ich habe sowas wie eine CMS gebaut.
Wenn ich eingeloggt bin, als Admin brauche ich nur ein Button drücken, der auf jeder Seite dann da ist und der mir die CSS, JS, HTML und Co von der Seite sofort anzeigt und dort auch direkt änderba ist.
Und was hat Bootstrap und Fonts in einer Datenbank zu suchen?
Wahrscheinlich nicht viel.
Da ich aber auch viel teste und probiere und auch den Mist mit der DSGVO beachten wollte habe ich das auch in der DB geklatscht.
Da ich Bootstrap und FontAwesome kaum brauche, oder nur bestimmte Klassen daraus verwende, werde ich die paar Code Zeilen selber neu gestalten und dann auf komplettes Bootstrap und FontAwesome verzichten
2.Wieviele Millisekunden denn? Das lohnt sich doch nicht. Zumindest dann nicht, wenn man nicht alles unnötige zusätzlich lädt.
Das ist natürlich nicht die Welt.
Aber alles zusammen bringt dann schon was.
Auf der Google Seite werden ja viele Sachen gezeigt und ausgelesen die den Speed und Ranking erhöhen.
Alle meine Änderungen habe da schon einiges gebracht .

Ob ich es da jetzt übertreibe mit der Spielerei um die besten Ergebnisse bei Google und den w3 Validator zu erreichen, lasse ich jeden selbst entscheiden.
Ich will es auf jeden Fall testen, versuchen,verstehen und dann auch hoffentlich dazu lernen.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge