CSS / JS-Dateien werden auf verschiedene Arten zu Drupal hinzugefügt. 5 von 7 Möglichkeiten ermöglicht die Aggregation der Datei. Sobald sie der Seite hinzugefügt wurden, rendert drupal das HTML-Markup für sie und erstellt / verwendet das Markup in template_process_html () .
Funktionen zum Suchen, wie ein Aggregat erstellt wird, sind drupal_build_js_cache () & drupal_build_css_cache () . Innerhalb dieser Funktion wird eine Liste mit Dateinamen abgerufen und anschließend ein Hash erstellt. Dies ist eine Suche, um festzustellen, ob die Datei bereits erstellt wurde.
$map = variable_get('drupal_js_cache_files', array());
// Create a new array so that only the file names are used to create the hash.
// This prevents new aggregates from being created unnecessarily.
$js_data = array();
foreach ($files as $file) {
$js_data[] = $file['data'];
}
$key = hash('sha256', serialize($js_data));
if (isset($map[$key])) {
$uri = $map[$key];
}
Wenn es aufgrund der Reihenfolge und / oder des Inhalts der $ file ['data'] -Informationen noch nicht erstellt wurde, wird ein neues Aggregat erstellt, das auf allen aneinandergereihten Dateiinhalten basiert.
if (empty($uri) || !file_exists($uri)) {
// Build aggregate JS file.
foreach ($files as $path => $info) {
if ($info['preprocess']) {
// Append a ';' and a newline after each JS file.
$contents .= file_get_contents($path) . ";\n";
}
}
// Prefix filename to prevent blocking by firewalls which reject files
// starting with "ad*".
$filename = 'js_' . drupal_hash_base64($contents) . '.js';
// Create the js/ within the files folder.
$jspath = 'public://js';
$uri = $jspath . '/' . $filename;
...
$map[$key] = $uri;
variable_set('drupal_js_cache_files', $map);
}
return $uri;
Die Dateien werden innerhalb von 2 Variablen verfolgt drupal_js_cache_files
und drupal_css_cache_files
; Drupal überprüft außerdem, ob die Datei vorhanden ist, bevor sie verwendet wird. Die Aggregate haben nichts mit der URL zu tun. Ihre 4 Webheads verwenden diese Aggregate aufgrund der in der Datenbank gespeicherten Variablen.
Hinweis: AdvAgg ähnelt dem, ähnelt jedoch ein paar Datenbanktabellen anstelle von zwei Variablen. AdvAgg tut dies aus mehreren Gründen, hauptsächlich um Probleme mit gleichzeitigen Variablensätzen zu beheben und eine erweiterte Gruppierungslogik zu ermöglichen.