[РЕШЕНО] Как предопределить функцию (изменить путь к картинкам)

Главные вкладки

Аватар пользователя DoktorWEB DoktorWEB 29 апреля 2017 в 21:48

Drupal 8 тема bartik Помогите сделать изменить путь к картинкам с
<img src="/sites/default/files/2017/monastir.jpg"> на
<img src="http://mydomain.ru/sites/default/files/2017/monastir.jpg"> на

Которое выводиться полем field-golovne-foto

Примерно нашел что генерирует файл шаблона image-style.html.twig который лежит /core/themes/classy/templates/field
Но так и не получилось там реализовать.

Долго искал и понял что путь к картинкам генерирует код :

<?phpfunction template_preprocess_image(&$variables) {
  if (!empty($variables['uri'])) {
    $variables['attributes']['src'] = file_url_transform_relative(file_create_url($variables['uri']));
  }
  // Generate a srcset attribute conforming to the spec at
  // http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#attr-img-srcset
  if (!empty($variables['srcset'])) {
    $srcset = array();
    foreach ($variables['srcset'] as $src) {
      // URI is mandatory.
      $source = file_url_transform_relative(file_create_url($src['uri']));
      if (isset($src['width']) && !empty($src['width'])) {
        $source .= ' ' . $src['width'];
      }
      elseif (isset($src['multiplier']) && !empty($src['multiplier'])) {
        $source .= ' ' . $src['multiplier'];
      }
      $srcset[] = $source;
    }
    $variables['attributes']['srcset'] = implode(', ', $srcset);
  }

  foreach (array('width', 'height', 'alt', 'title', 'sizes') as $key) {
    if (isset($variables[$key])) {
      // If the property has already been defined in the attributes,
      // do not override, including NULL.
      if (array_key_exists($key, $variables['attributes'])) {
        continue;
      }
      $variables['attributes'][$key] = $variables[$key];
    }
  }
}?>

что лежит в файле theme.inc по пути /core/includes

Примерно понял что нужно изменить переменую в коде:

<?phpif (!empty($variables['uri'])) {
    $variables['attributes']['src'] = file_url_transform_relative(file_create_url($variables['uri']));
  }?>

Читал документацию но так и не понял как , помогите пожалуйста .

Комментарии

Аватар пользователя z01L z01L 4 мая 2017 в 10:23
1

День добрый, нужно скопировать эту функцию в файл bartik.theme, он в этой теме уже имеется и убрать вызов функции file_url_transform_relative которая собственно и отвечает за преобразование абсолютного пути в относительный. Функция примет вид:

<?php
function bartik_preprocess_image(&$variables) {
  if (!empty(
$variables['uri'])) {
    
$variables['attributes']['src'] = file_create_url($variables['uri']);
  }
  
// Generate a srcset attribute conforming to the spec at
  // http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#attr-img-srcset
  
if (!empty($variables['srcset'])) {
    
$srcset = array();
    foreach (
$variables['srcset'] as $src) {
      
// URI is mandatory.
      
$source file_url_transform_relative(file_create_url($src['uri']));
      if (isset(
$src['width']) && !empty($src['width'])) {
        
$source .= ' ' $src['width'];
      }
      elseif (isset(
$src['multiplier']) && !empty($src['multiplier'])) {
        
$source .= ' ' $src['multiplier'];
      }
      
$srcset[] = $source;
    }
    
$variables['attributes']['srcset'] = implode(', '$srcset);
  }

  foreach (array(

'width''height''alt''title''sizes') as $key) {
    if (isset(
$variables[$key])) {
      
// If the property has already been defined in the attributes,
      // do not override, including NULL.
      
if (array_key_exists($key$variables['attributes'])) {
        continue;
      }
      
$variables['attributes'][$key] = $variables[$key];
    }
  }
}
?>

Не забываем чистить кэш. Кстати эта функция там не просто так, как написано в документации могут быть проблемы при использовании HTTPS + HTTP, нужно это учесть.

Аватар пользователя DoktorWEB DoktorWEB 5 мая 2017 в 8:46

Огромное спасибо, теперь выводиться полный путь, https буду делать позже, сделаю заметку чтоб не забыть, если чесно то я в шоке как я был близок к решению проблемы.