Tôi nhận ra plugin resizer hoạt động nếu hình ảnh có các thuộc tính sau:
data-entity-type="file"
dữ liệu-thực thể-uuid=
Vì vậy, những gì tôi đã làm, tôi tạo một quy trình hàng loạt và xem qua tất cả nội dung và tìm hình ảnh, sau đó dựa trên hình ảnh tôi tải chúng uuid
và tập tin thay thế nó.
một cái gì đó giống như đoạn mã sau có thể giúp những người có yêu cầu tương tự:
if (preg_match_all('~<img.*?src=["\']+(.*?)["\']+~', $node->body->value, $matches)) {
$URIS = array_unique($matches[1]);
foreach ($URIS dưới dạng $imgUri) {
$imgUriDecoded = urldecode($imgUri);
$node->body->value = str_replace($imgUri, $imgUriDecoded, $node->body->value);
$fileData = self::getFileDataByUrl($imgUriDecoded);
$fileUuid = "xxx-chỉ để thay đổi kích thước";
nếu ($fileData) {
$fileUuid = $fileData->get('uuid')->value ?? "xxx-chỉ để thay đổi kích thước";
}
// bỏ qua Danger.jpg
if ($fileUuid == "4f6db862-2c5d-4fb1-8d5b-830b89514af4") {
tiếp tục;
}
$replacement = sprintf('<img data-entity-type="file" data-entity-uuid="%s"', $fileUuid);
$node->body->value = str_replace("<img ", $replacement, $node->body->value);
\Drupal::messenger()->addStatus($node->id());
}
}
$node->setSyncing(TRUE);
$node->save();
}
Tệp sau đây giúp lấy tệp bằng fileURI:
hàm tĩnh getFileDataByUrl($fileURI) {
$file_name = \Drupal::service('file_system')->basename($fileURI);
$ target_file = \Drupal::entityTypeManager()
->getStorage('tệp')
->loadByProperties(['filename' => $file_name]);
$file_data = đặt lại($target_file);
nếu ($file_data) {
trả về ($file_data);
}
khác {
trả về SAI;
}
}