Как принудительно использовать URL-адреса изображений в качестве HTTPS?
Есть несколько мест, куда я звоню ImageStyle::load('style')->buildUrl($uri)
, чтобы получить физический путь к файлу изображения.
После включения HTTPS и принудительного использования всего трафика HTTPS я заметил, что это вернет http://
только в начале URL-адреса, а не https://
, вызывая флаг смешанного режима в браузере.
Есть ли способ сделать это и получить правильный протокол? Могу ли я вместо этого просто получить относительный путь к файлу? Я заметил, что этот метод жестко закодирован 'absolute' => TRUE
при построении URL-адрес для возврата.
Редактировать: поля, использующие обычный метод визуализации, т.е. {{ content.field_image }}
, имеют правильный протокол и не вызывают проблем.
Вот код, который я использую для создания переменной:
/**
* Implements hook_preprocess_node().
* @param $variables
*/
function mytheme_preprocess_node(&$variables) {
$node = $variables['elements']['#node'];
$bundle = $node->bundle();
if ($bundle =='homepage' && $variables['elements']['#view_mode'] == 'hero') {
$hero_image = $node->get('field_hero_image')->getValue();
if (!empty($hero_image)) {
$entity = Media::load($hero_image[0]['target_id']);
$variables['hero_image'] = ImageStyle::load('homepage_hero')->buildUrl($entity->field_image->entity->getFileUri());
}
}
}
В режиме просмотра узла шаблон ветки:
{% if node.field_hero_image is not empty %}
<div class="hero__graphic" style="background-image: url({{ hero_image }});"></div>
{% endif %}
2 answers
Вы можете использовать file_url_transform_relative()
:
/**
* Transforms an absolute URL of a local file to a relative URL.
*
* May be useful to prevent problems on multisite set-ups and prevent mixed
* content errors when using HTTPS + HTTP.
*
* @param string $file_url
* A file URL of a local file as generated by file_create_url().
*
* @return string
* If the file URL indeed pointed to a local file and was indeed absolute,
* then the transformed, relative URL to the local file. Otherwise: the
* original value of $file_url.
*
* @see file_create_url()
*/
function file_url_transform_relative($file_url) {
Вы можете попробовать изменить свой base_url, не комментируя следующую строку в settings.php и изменение http на https.
/**
* Public file base URL:
*
* An alternative base URL to be used for serving public files. This must
* include any leading directory path.
*
* A different value from the domain used by Drupal to be used for accessing
* public files. This can be used for a simple CDN integration, or to improve
* security by serving user-uploaded files from a different domain or subdomain
* pointing to the same server. Do not include a trailing slash.
*/
# $settings['file_public_base_url'] = 'http://downloads.example.com/files';