画像の物理ファイルパスを取得するためにImageStyle::load('style')->buildUrl($uri)
を呼び出す場所がいくつかあります。
HTTPSを有効にしてすべてのトラフィックでHTTPSを使用するように強制すると、URLの先頭でhttp://
のみが返され、ブラウザでhttps://
が混合モードフラグを引き起こさないことに気付きました。
これを実行して正しいプロトコルを取得する方法はありますか?代わりに、ファイルへの相対パスを取得することはできませんか?返すURLを作成するときに、このメソッドが'absolute' => TRUE
をハードコーディングしていることに気づきました。
編集:通常のレンダリング方法を使用するフィールド、つまり{{ 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());
}
}
}
ノードビューモードでtwigテンプレート:
{% if node.field_hero_image is not empty %}
<div class="hero__graphic" style="background-image: url({{ hero_image }});"></div>
{% endif %}
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) {
Settings.phpの次の行のコメントを外して、httpをhttpsに変更することで、base_urlを変更してみることができます。
/**
* 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';