Удаление атрибута src из вывода $html-›image() в CakePHP

Я использую CakePHP 1.2. Я пытаюсь использовать jQuery Lazy (http://jquery.eisbehr.de/lazy/example_basic-usage) от CakePHP. Прочтите документацию по адресу https://book.cakephp.org/1.2/en/The-Manual/Core-Helpers/HTML.html#image показывает, как

<?php echo $html->image('cake_logo.png', array('alt' => 'CakePHP'))?>

производит следующий вывод:

<img src="/img/cake_logo.png" alt="CakePHP" />

Мне нужно произвести этот вывод:

<img class="lazy" data-src="/img/cake_logo.png" />

Как я могу сделать это, используя $html->image() в CakePHP 1.2? Проблема в том, что в синтаксисе image(string $path, array $htmlAttributes = array()) первый параметр является обязательным и на выходе он создает атрибут src=... для img. Мне нужно иметь вывод с <img... />, который не содержит атрибут src=.... Как я могу добиться этого, используя $html->image() в CakePHP?


person Jaime Montoya    schedule 21.06.2018    source источник


Ответы (1)


Через встроенный помощник HTML это невозможно без изменения шаблона тега. Итак, если вам нужна отложенная загрузка всех изображений, вы можете, например, изменить шаблон тега image на что-то вроде:

<img class="lazy" data-src="%s" %s/>

Однако это будет противоречить использованию атрибута class. В качестве альтернативы вы можете расширить помощник HTML и реализовать собственный метод image() (или дополнительный метод). Вот быстрый и грязный пример, который должен быть довольно понятным:

function image($path, $options = array())
{
    $defaults = array(
        'class' => null
    );
    $options += $defaults;

    $options['class'] = 'lazy ' . $options['class'];

    $originalTemplate = $this->tags['image'];
    $this->tags['image'] = '<img data-src="%s" %s/>';

    $imageHtml = parent::image($path, $options);

    $this->tags['image'] = $originalTemplate;

    return $imageHtml;
}

Смотрите также

person ndm    schedule 21.06.2018
comment
Как можно оправдать изменение шаблона или расширение помощника HTML вместо того, чтобы просто использовать это напрямую?: <img class="lazy" data-src="<?php echo $imageUrl;?>" />. Безопасность, масштабируемость,...? Каковы основные преимущества использования CakePHP? Кажется простым использовать чистый код PHP/HTML: <img class="lazy" data-src="<?php echo $imageUrl;?>" />. - person Jaime Montoya; 21.06.2018
comment
@JaimeMontoya Основным преимуществом является управление базовым путем, т. Е. Помощник создаст правильный путь независимо от базового пути вашего приложения, он поддерживает активы темы и отметку времени. Также использование стандартного кода CakePHP упрощает рефакторинг. - person ndm; 22.06.2018