Вы здесь

Как заменить src всех картинок на data-src?

0

Подскажите, пожалуйста, как можно перед загрузкой DOM подменить все src картинок в определённом поле на странице на data-src.
То есть сейчас мы имеем такую вёрстку:

<div class="field field-name-field-text-field">
    <img src="/sites/default/files/academy_5.jpg">
    <p>Lorem ipsum</p>
    <img src="/sites/default/files/class_1.jpg">
    <p>Lorem ipsum</p>
</div>

Хотим сделать перед загрузкой DOM подмену, чтобы вывод был такой:

<div class="field field-name-field-text-field">
    <img data-src="/sites/default/files/academy_5.jpg"/>
    <p>Lorem ipsum</p>
    <img data-src="/sites/default/files/class_1.jpg"/>
    <p>Lorem ipsum</p>
</div>

Как это можно сделать препроцессами или на JQuery? Если можно с примерами кода, спасибо.

Версия Drupal: 
7.x
Категория: 
Theming
Вопрос задан 22.03.2017 - 03:58

Ответы

0

В шаблоне через https://api.drupal.org/api/drupal/modules%21field%21field.module/functio... (или найти более подходящий хук)

Варианта 2:
1. Можно регулярными выражениями заменить
2. Можно перегенирировать вывод НТМЛ заново

Ответ дан 22.03.2017 - 08:52
Аватар пользователя orb
orb
4

Вот что у нас получается:

function caifa_preprocess_field(&$variables, $hook) {
  $element = &$variables['element'];
  if ($element['#entity_type'] == 'paragraphs_item'){
    $all_items = $variables['items'];
    foreach ($all_items as $key => $val) {
     $output = $val['#item']['#markup'];
      $val['#item']['#markup'] = str_replace('src', 'data-src', $output);
    };
  };
};

Но на этот код выходит ошибка Notice: Undefined index: #item

Помогите разобраться на что ругается он.
Спасибо.

Комментарий оставлен 22.03.2017 - 10:10

Решил.

function themename_preprocess_field(&$variables, $hook) {
  $element = &$variables['element'];
  if ($element['#entity_type'] == 'paragraphs_item'){

    foreach ($variables['items'] as $key => $val) {
     $output = $val['#markup'];
     $delta = str_replace('src', 'data-src', $output);
    };

    $variables['items'] = array(
        '#markup' => $delta,
    );

  };
};
Комментарий оставлен 22.03.2017 - 10:24