我们怎么能在cakephp中写这个?

时间:2013-01-05 06:21:25

标签: cakephp

<a href=# alt=Image Tooltip rel=tooltip content="<div id=imagcon><img src='.$row['images'].' class=tooltip-image/></div><div id=con>Address:'.$row['Address'].'</div><div id=con>Contact:'.$row['contact'].'</div><div id=con>Email:'.$row['email'].'</div><div id=con>Status:'.$row['status'].'</div><div id=con>Age:'.$row['age'].'</div>">'.$row['Name'].'</a>'.'<br>'

我们如何在cakephp中写这个?

3 个答案:

答案 0 :(得分:1)

我想你是在问,因为你知道你应该使用CakePHP HTML帮助器进行链接,但在你的情况下我不会 - 我会编写一个自定义的CakePHP Helper来显示你的HTML。如果您要一次又一次地使用此代码,请构建一个帮助程序(如下所示的链接)...

...但是看看你有什么,你实际上并没有做太多,链接实​​际上没有去任何地方所以为什么不保留你拥有的?除了图像帮助器是安全的:

<?php echo $this->Html->image($row['images'], array('class'=>'tooltip-image'));?>

使用框架帮助程序可以节省大量时间并解决位置问题,但并不总是解决方案..您可以过度使用帮助程序。

以下是CakePHP for Helpers所需的所有信息,您就是如何使用现有帮助以及如何创建自己的帮助:http://book.cakephp.org/2.0/en/views/helpers.html

答案 1 :(得分:0)

您的代码无效。您不能拥有多个具有相同值的ID。没有修复破碎的HTML

$content = '<div id=imagcon>' . $this->Html->image($row['images'], array('class' => 'tooltip-image')) . '</div>' . 
    '<div id=con>Address:'.$row['Address'].'</div>' . 
    '<div id=con>Contact:'.$row['contact'].'</div>' . 
    '<div id=con>Email:'.$row['email'].'</div>' . 
    '<div id=con>Status:'.$row['status'].'</div>' . 
    '<div id=con>Age:'.$row['age'].'</div>';

echo $this->Html->link($row['name'], '#', array(
    'alt' => 'image',
    'rel' => 'tooltip',
    'content' => $content,
    'escape' => false
)) . '<br/>';

答案 2 :(得分:0)

代码的基本HTML有很多问题,甚至在将PHP混合之后也是如此。

  • 属性应围绕值" "引用。
  • 如果您要将HTML放在另一个HTML标记的属性中,则应将其转义。
  • 除非整个字符串是PHP,否则您需要使用<?php ?>标记注入PHP。
  • 您的HTML标记多次使用相同的ID。 ID在页面上应该是唯一的,所以如果你发现自己重复使用ID,请改为使用它。
  • 我认为content不是HTML锚的有效属性(如果是,请忽略这一点)。理想情况下,自定义属性应以data-为前缀,因此在这种情况下,属性将为data-content

您应该做的第一件事是将内容部分分离为您可以添加到链接的PHP变量。这将有助于代码的可读性和组织性。

修正了PHP而不更改HTML属性

<?php
    $content = '<div id="imagcon">
                    <img src="' . $row['images'] . '" class="tooltip-image" />
                </div>
                <div id="con">Address:' . $row['Address'] . '</div>
                <div id="con">Contact:' . $row['contact'] . '</div>
                <div id="con">Email:' . $row['email'] . '</div>
                <div id="con">Status:' . $row['status'] . '</div>
                <div id="con">Age:' . $row['age'] . '</div>';

    echo '<a href="#" alt="Image Tooltip" rel="tooltip" content="' . $content . '">' . $row['Name'] . '</a><br />';
?>

虽然我建议您将HTML内容更改为此内容,但如果可以:

它使用类而不是重复的ID,并且还有一个带有唯一ID的外部div包装器,以便您可以有效地从CSS或JavaScript中定位内部元素。如果您的数据库表没有id列,请替换为主键字段的名称,或者如果您没有主键,则替换为循环中的计数器(您应该)。我添加了这个,因为它看起来像是循环遍历行并输出这些链接。如果你不是,你可以删除外部div。最后,我已将链接的content属性更改为data-content

<?php
    $content = '<div id="row-' . $row['id'] . '">
                    <div class="imagcon">
                        <img src="' . $row['images'] . '" class="tooltip-image" />
                    </div>
                    <div class="con">Address:' . $row['Address'] . '</div>
                    <div class="con">Contact:' . $row['contact'] . '</div>
                    <div class="con">Email:' . $row['email'] . '</div>
                    <div class="con">Status:' . $row['status'] . '</div>
                    <div class="con">Age:' . $row['age'] . '</div>
                </div>';
?>

CakePHP等效

<?php
    $content = '<div id="row-' . $row['id'] . '">
                    <div class="imagcon">' . $this->Html->image($row['images'], array('class' => 'tooltip-image')) . '</div>
                    <div class="con">Address:' . $row['Address'] . '</div>
                    <div class="con">Contact:' . $row['contact'] . '</div>
                    <div class="con">Email:' . $row['email'] . '</div>
                    <div class="con">Status:' . $row['status'] . '</div>
                    <div class="con">Age:' . $row['age'] . '</div>
                </div>';

    echo $this->Html->link($row['name'], '#', array(
        'alt' => 'Image Tooltip',
        'data-content' => $content,
        'rel' => 'tooltip'
    ));
    echo '<br />';
?>