【问题标题】:Outputting multiple elements within <a> using CakePHP HTML Helper使用 CakePHP HTML Helper 在 <a> 中输出多个元素
【发布时间】:2012-04-26 05:10:21
【问题描述】:

我想知道这段代码是否...

echo $this->Html->link(
    "<h3>test</h3>".$this->Html->image("image.jpg")."<p>Some text</p>",
    "/link",
    array('escape' => false)
);

...是在 CakePHP 中生成此 HTML 的最佳方式...

<a href="/path/to/link">
    <h3>test</h3>
    <img alt="" src="/path/to/image.jpg">
    <p>Some text</p>
</a>

或者,有没有更“正确”的方式来做到这一点?我想要和

都在标签内,这样我就可以在 CSS 中将 display: block; 设置为可点击整个区域并带有悬停效果。

有些事情告诉我,像这样回显 HTML 不是正确的方法,但如果我要使用 HTML Helper,我看不到替代方法。有吗?

【问题讨论】:

  • 在 HTML 4 中,将像 &lt;p&gt; 这样的 block 元素 放在像 &lt;a&gt; 这样的 inline 元素 是不正确的。跨度>
  • 好的,但是假设我是在 HTML5 中做的......除了我上面写的之外,还有其他方法在 Cake 中做吗?

标签: cakephp


【解决方案1】:

只需使用 HTML 帮助器的 URL 方法而不是链接之一,其余的作为静态 HTML 执行,就我所见,还不如将 PHP 的数量降到最低。

<a href="<?php echo $this->Html->url($params); ?>">
    <h3>test</h3>
    <?php echo $this->Html->image($params); ?>
    <p>Some text</p>
</a>

这将是完成此任务的最有效方式。但也许您应该考虑一下您的标记结构以及您想要实现的目标......

【讨论】:

  • 感谢@Dunhamzzz——用最少的代码和大惊小怪实现了我想做的事情。我也很欣赏您与 HTML 结构相关的 cmets。我知道这不是在 HTML4 中做事的正确方法,但在这个阶段我所要做的就是复制一个已经创建的 HTML 结构。使其合规将是下一阶段。再次感谢。
【解决方案2】:

我用

$this->Html->tag('li',
                     $this->Html->link(
                     '<i class="entypo-book"></i>'.
                     $this->Html->tag('span', $nom
                     .$this->Html->tag('span', '32', array('class' => 'badge'))
                     ),
                     array('controller' => 'Pages', 'action' => 'index'),
                     array('class' => 'active', 'title' => 'Pages', 'escape' => false)
                     )
                 ); 

【讨论】:

  • 您可能需要添加一些解释,以便读者知道为什么您会这样做。
  • 是的,可以这样做。但是,根据我最初的问题,我正在寻找一种更有效的方法来做到这一点,而不涉及像那样回显 HTML。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多