【问题标题】:adding img tag in zend form以zend形式添加img标签
【发布时间】:2011-09-02 12:46:00
【问题描述】:

我正在构建一个带有扩展 Zend_Form 的类的表单。如何在表单内添加一个 img 标记?我还需要向它添加一个类并对齐属性

这是我想要达到的最终结果:

<span class="myElement"><img src="myPath" align="middle" class="myClass"/>
<input type="text"></span>

我没有找到太多关于 Zend_Form_Element_Image 的文档

谢谢

卢卡

【问题讨论】:

  • Zend_Form_Element_Image 创建 input type="image" 表单元素。所以你想上传图片,或者你想在你的表单中添加一个图片标签(例如用于装饰)?
  • 我需要img标签..实际上不是输入

标签: php zend-framework forms image


【解决方案1】:

在库/Application/Form/Element/Img.php中有

class Application_Form_Element_Img extends Zend_Form_Element_Xhtml
{
    public $helper = 'formImg';

    public function loadDefaultDecorators ()
    {
        parent::loadDefaultDecorators ();
        $this->removeDecorator ('Label');
        $this->removeDecorator ('HtmlTag');

        $this->addDecorator('HtmlTag', array (
        'tag'   => 'span',
        'class' => 'myElement',
        ));
    }
}

在 application/view/helpers/FormImg.php 中

class Zend_View_Helper_FormImg extends Zend_View_Helper_FormElement
{
    public function formImg ($name, $value, $attribs = null)
    {
        $info = $this->_getInfo($name, $value, $attribs);

        $xHtml = '<img'
                . $this->_htmlAttribs ($attribs)
                . ' />';

        return $xHtml;
    }
}

在您的表单中:

    $this->addElement ('img', 'myimage', array (
        'src'           => '/images/download.png',
        'align'         => 'right',
    ));

注意:路径可能会在您的特定应用程序中发生变化。

【讨论】:

    【解决方案2】:

    实际上,您不需要自定义元素来执行此操作。您可以使用 HtmlTag 装饰器并使用 openOnly 选项。

    $form = new Zend_Form();
    
    $form->addElement("text", "foo", array("decorators" => array(
        array(array("img" => "HtmlTag"), array(
            "tag" => "img",
            "openOnly" => true,
            "src" => "myPath",
            "align" => "middle",
            "class" => "myClass"
        )),
        array("ViewHelper"),
        array(array("span" => "HtmlTag"), array(
            "tag" => "span",
            "class" => "myElement"
        ))
    )));
    
    echo $form->foo;
    

    【讨论】:

    • 在我看来,这比公认的答案要好。虽然(我认为)使用 'placement' =>'prepend' 比使用 'openOnly'=>true 更好
    【解决方案3】:

    您好,您可以创建一个名为“html”的自定义元素

    class Zend_Form_Element_Html extends Zend_Form_Element_Xhtml
    {
        public $helper = 'formHtml';
    }
    

    现在你可以调用它了:

    $yourForm->addElement(
                'html',
                'myElementId',
                array(
                 'value'=>'<span class="myElement"><img src="myPath" align="middle"  class="myClass"/>
    <input type="text"></span>'))
    

    有关更多信息,您可以查看此链接:
    Zend Framework: Insert DIV and Image in my form

    【讨论】:

    • 原则上这是一个好主意,但你永远不应该在库之后命名你自己的代码。万一有重叠。不过我喜欢这种方法,又好又简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多