Các tệp CSS / JS được thêm vào Drupal theo nhiều cách khác nhau; 5 trong số 7 cách cho phép tập tin được tổng hợp. Khi chúng đã được thêm vào trang, drupal sẽ hiển thị đánh dấu html cho chúng và tạo / sử dụng đánh dấu bên trong template_ process_html () .
Các hàm để tìm cách tổng hợp được xây dựng là drupal_build_js_cache () & drupal_build_css_cache () . Bên trong các chức năng này, nó nhận được một danh sách các tên tệp và sau đó tạo ra một hàm băm của chúng. Đây là một tra cứu, để xem nếu tập tin đã được tạo.
$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];
}
Nếu nó chưa được tạo trước đó, vì thứ tự và / hoặc nội dung của thông tin $ file ['data'] thì nó sẽ tạo ra một tổng hợp mới dựa trên tất cả các nội dung tệp được xâu chuỗi lại với nhau.
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;
Các tập tin được theo dõi bên trong 2 biến drupal_js_cache_files
và drupal_css_cache_files
; Drupal cũng sẽ kiểm tra để đảm bảo tập tin tồn tại trước khi nó được sử dụng. Các tổng hợp không có gì để làm với URL. 4 webhead của bạn sẽ sử dụng các tổng hợp này do các biến được lưu trữ trong cơ sở dữ liệu.
Lưu ý: AdvAgg tương tự như thế này nhưng nó sử dụng một vài bảng cơ sở dữ liệu thay vì 2 biến; AdvAgg thực hiện điều này vì một vài lý do chủ yếu là khắc phục các sự cố với biến_set đồng thời và cho phép logic nhóm nâng cao.