从 CakePHP 中 $html->image() 的输出中删除 'src' 属性

Removing 'src' attribute from output of $html->image() in CakePHP

我正在使用 CakePHP 1.2。我正在尝试使用 jQuery Lazy (http://jquery.eisbehr.de/lazy/example_basic-usage) from CakePHP. Reading the documentation at 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" />

如何在 CakePHP 1.2 中使用 $html->image() 来做到这一点?问题是在语法 image(string $path, array $htmlAttributes = array()) 中,第一个参数是必需的,并且在输出中它产生 imgsrc=... 属性。我需要一个 <img... /> 不包含 src=... 属性的输出。我怎样才能在 CakePHP 中使用 $html->image() 来实现它?

通过内置的 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;
}

另见