【问题标题】:Removing 'src' attribute from output of $html->image() in CakePHP从 CakePHP 中 $html->image() 的输出中删除 'src' 属性
【发布时间】:2018-06-22 03:52:46
【问题描述】:

我使用的是 CakePHP 1.2。我正在尝试使用 CakePHP 的 jQuery Lazy (http://jquery.eisbehr.de/lazy/example_basic-usage)。阅读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-&gt;image() 做到这一点?问题在于,在语法image(string $path, array $htmlAttributes = array()) 中,第一个参数是必需的,并且在输出中它产生imgsrc=... 属性。我需要一个不包含src=... 属性的&lt;img... /&gt; 输出。我如何在 CakePHP 中使用 $html->image() 来实现这一点?

【问题讨论】:

    标签: cakephp lazy-loading cakephp-1.2 jquery-lazyload


    【解决方案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;
    }
    

    另见

    【讨论】:

    • 如何修改模板或扩展 HTML 助手而不是直接使用它?:&lt;img class="lazy" data-src="&lt;?php echo $imageUrl;?&gt;" /&gt;。安全性,可扩展性,...? “以 CakePHP 的方式来做”的主要好处是什么?简单地使用纯 PHP/HTML 代码看起来很简单:&lt;img class="lazy" data-src="&lt;?php echo $imageUrl;?&gt;" /&gt;.
    • @JaimeMontoya 主要好处是底层路径管理,即帮助程序将创建正确的路径,而与您的应用程序基本路径无关,它支持主题资产和时间戳。使用标准的 CakePHP 代码也使重构更容易。
    猜你喜欢
    • 2012-05-12
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2019-04-19
    相关资源
    最近更新 更多