Zend Formlar bazı html ekle

8 Cevap php

Im benim zend forma aşağıdaki html eklemek sağlayacak kod basit biraz arıyor:

<div id="wmd-button-bar" class="wmd-panel"></div>

Thats, bu forma benim 'yöntem' öğesinin üzerinde olmalıdır ama thats. Böyle basit bir eylem için bana roket bilimi (yani Zend dekoratörler) öğrenme ilgisi olmayan herhangi bir yöntem bulamıyorum.

8 Cevap

Ben şu anda düşünebildiğim tek yolu forma bir kukla öğe eklemek ve size söz belirtilen niteliklere sahip bir 'HtmlTag' hariç tüm dekoratörler kaldırmaktır. Dekoratörler Çıkarma gerçek eleman hale anlamına gelir - sadece HtmlTag dekoratör işlenecek.

böylece formu varsayarsak $ şeklidir:

$form->addElement(
    'hidden',
    'dummy',
    array(
        'required' => false,
        'ignore' => true,
        'autoInsertNotEmptyValidator' => false,
        'decorators' => array(
            array(
                'HtmlTag', array(
                    'tag'  => 'div',
                    'id'   => 'wmd-button-bar',
                    'class' => 'wmd-panel'
                )
            )
        )
    )
);
$form->dummy->clearValidators();

Eğer elemanın herhangi bir doğrulama engellemek istiyorum unutmayın. Bu yalnızca bir yoludur - olasılıkla diğerleri vardır.

Çıktı:

<div id="wmd-button-bar" class="wmd-panel"></div>

Orada dekoratörler http://devzone.zend.com/article/3450 açıklayan iyi bir yazı olduğunu ve nasıl çalıştıklarını anlamak, onu roket bilimi değil bulacaksınız ...

You can create your own view helper libraray--App>View>Helper>PlainTextElemet.php

Create a folder in your library folder that name is App so a folder that name is View so in View create Helper Folder so in Helper folder create a class with PlainTextElement name same following

 class App_View_Helper_PlainTextElement extends Zend_View_Helper_FormElement {

        public function PlainTextElement($name, $value = null, $attribs = null) {
            $info = $this->_getInfo($name, $value, $attribs);
            extract($info); // name, value, attribs, options, listsep, disable
            if (null === $value) {$value = $name;}

            return $value;
          }

    }

Sonra libray aynı yukarıda bir sınıf oluşturmak App> Form> Eleman> PlainText.php

Ve bu sınıfta folowing kod koymak

class App_Form_Element_PlainText extends Zend_Form_Element_Xhtml {

    public $helper='PlainTextElement';

    public function isValid($value){

        return true;
    }
}

Şimdi formdaki sizin gibi her html kodunu oluşturabilirsiniz:

$someValue = '<div id="wmd-button-bar" class="wmd-panel"></div>';

        $this->addElement(new App_Form_Element_PlainText('pliantext1', array(
                            'value'=>$someValue,
        )));

Lütfen application.ini unutmak etmeyin çok satırları bitiminden sonraki ekle:

 autoloaderNamespaces.app = "App_"
 resources.view.helperPath.App_View_Helper="App/View/Helper"

You can try this way, no config, just one extension class reference: http://www.zfsnippets.com/snippets/view/id/50

<?php

/**
 * Form note element
 *
 * @author Ruslan Zavackiy <ruslan.zavackiy@gmail.com>
 * @package elements
 */

/**
 * Loads helper Zend_View_Helper_FormNote
 */

class Custom_Form_Element_Note extends Zend_Form_Element_Xhtml
{
    public $helper = 'formNote';
}
?>

o zaman

$companies->addElement('note', 'companyNote', array(
            'value' => '<a href="javascript:;" id="addCompany">Add Company</a>'
        ));

Nasıl bazı JQuery kullanarak hakkında:

Gibi bir şey:

<script language="javascript">
    $(document).ready(function() {
        $('#submit-element').append('<div id="wmd-button-bar" class="wmd-panel"></div>');
    });
</script>
  • Etiketi (ya da başka bir şey) dönmek özel bir dekoratör oluşturun:

    class My_Decorator_CustomHtml extends Zend_Form_Decorator_Abstract {
                public function render($content)
            {
                $element = $this->getElement();
                if (!$element instanceof Zend_Form_Element) {
                    return $content;
                }
                if (null === $element->getView()) {
                    return $content;
                }
                $html = $element->getLabel();
                return $html;
           }
    
    
    }
    
  • Dekoratör yolu bu yerleştirin

    <pre>$form->addElementPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');</pre>

  • Öğesi oluşturun ve etiket özel html koymak

    $html = '<div id="wmd-button-bar" class="wmd-panel">some text....</div>'; $element = new Zend_Form_Element_Hidden('hidden-input', array( 'label'=>$html, ));
    $element->setDecorators(array('CustomHtml')); //add it to the form $form->addElement($element);

ve bu kadar

Sizin bakış komut koy ...

<!-- /application/views/scripts/myController/myAction.phtml -->

<div id="wmd-button-bar" class="wmd-panel"></div>
<?php echo $this->form ;?>

Sen eklemek zorunda decorator.

Any markup decorator yararlı olabilir.

Dekoratörler hakkında daha fazla bilgi için, bkz: http://www.slideshare.net/weierophinney/leveraging-zendform-decorators

Bu işlevsellik Zend_Form_Element_Note aracılığıyla Zend içine inşa edilmiştir.

new Zend_Form_Element_Note('forgot_password', array(
    'value' => '<a href="' . $this->getView()->serverUrl($this->getView()->url(array('action' => 'forgot-password'))) . '">Forgot Password?</a>',
))