Платформа зенда декораторы Zend_Form: <промежуток> в элементе кнопки?

Удалите data-toggle="modal" из тега <a> и выполните редактирование onclick на основе идентификатора

<td>
  <a id="edit-form" href="#" class="btn btn-warning btn-sm">Edit</a>
</td>

JS

$('#edit-form').click(function() {
   $('#hidden_field_id').val(your-value);
   $('#myModal').modal('show');
});
6
задан leek 20 May 2009 в 13:34
поделиться

4 ответа

Я пытался и, в конечном счете, не смог достичь этого сам, используя тот же подход. Казалось бы, самый простой способ сделать это - сделать:

...
$submit->setLabel('<span>My Button</span>');
...

Однако, интервал будет экранирован. Совершенно возможно отключить экранирование метки декоратора, однако добавление декоратора меток приводит к неверному выводу, например:

$decorator = array(
    array('ViewHelper'),
    array('HtmlTag', array('tag' => 'li')),
    array('Label', array('escape' => false))
);

$submit = new Zend_Form_Element_Button('submit');
$submit->setLabel('<span>My Button</span>');
$submit->setDecorators($decorator);
$submit->setAttrib('type', 'submit');

... рендеринг:

<label for="submit" class="optional"><span>My Button</span></label>
<li>
    <button name="submit" id="submit" type="submit">&lt;span&gt;My Button&lt;/span&gt</button>
</li>

... что, помимо семантически неверного (легко исправимо), все еще экранирует теги span внутри элемента.

Итак, что вы делаете?

Ну, я думаю, что лучший подход (и это мой мета-совет, когда дело доходит до жесткого контроля над рендерингом Zend_Form) использовать декоратор ViewScript .

$submit = new Zend_Form_Element_Button('submit');
$submit->setLabel('My Button');
$submit->setDecorators(array(array('ViewScript', array('viewScript' => '_submitButton.phtml'))));
$submit->setAttrib('type', 'submit');

... затем в _submitButton.phtml определить следующее:

<li>
    <?= $this->formLabel($this->element->getName(), $this->element->getLabel()); ?>
    <button 
    <?php 

    $attribs = $this->element->getAttribs();

    echo
    ' name="' . $this->escape($this->element->getName()) . '"' .
    ' id="' . $this->escape($this->element->getId()) . '"' . 
    ' type="' . $this->escape($attribs['type']) . '"';
    ?>
    <?php

    $value = $this->element->getValue();

    if(!empty($value))
    {
        echo ' value="' . $this->escape($this->element->getValue()) . '"';
    }
    ?>
    >
    <span>
    <?= $this->escape($this->element->getLabel()); ?>
    </span>
    </button>
</li>

_submitButton. Файл phtml должен находиться в каталоге скриптов вида (лучше всего добавить конкретный для декораторов форм, используя $ view-> addScriptPath ('/ path / to / my / form / decorators') ).

Это должно сделать то, что вы ищете. Я только начал смотреть на декоратор ViewScript из-за проблем с гибкостью, с которыми я сталкиваюсь в работе. Вы заметите, что мой сценарий не такой гибкий и, конечно, не в BNF, учитывая все элементы, которые могут быть заполнены в объекте element. Тем не менее, это начало, и оно решает вашу проблему.

Мы только начали смотреть на декоратор ViewScript из-за проблем с гибкостью, с которыми я сталкиваюсь в работе. Вы заметите, что мой сценарий не такой гибкий и, конечно, не в BNF, учитывая все элементы, которые могут быть заполнены в объекте element. Тем не менее, это начало, и оно решает вашу проблему.

Мы только начали смотреть на декоратор ViewScript из-за проблем с гибкостью, с которыми я сталкиваюсь в работе. Вы заметите, что мой сценарий не такой гибкий и, конечно, не в BNF, учитывая все элементы, которые могут быть заполнены в объекте element. Тем не менее, это начало, и оно решает вашу проблему.

7
ответ дан 8 December 2019 в 18:41
поделиться

Я бы добавил класс к кнопке, а затем определил этот класс в вашем CSS, чтобы он действовал как промежуток. Я уверен, что вы хотите сделать больше, чем просто вставить его в промежуток.

Просто добавьте еще один вызов setAttrib ():

$submit->setAttrib('class', 'submitButton');

Затем в вашем CSS:

.submitButton {
   display:inline;
   font-weight:bold; /* Or whatever you're wanting to do */
}

Я добавил display: inline, так как это будет сделать кнопку действовать как промежуток. Это должно как минимум начать. Конечно, вы также можете использовать CSS для идентификатора кнопки, просто используйте display: inline, чтобы получить поведение span.

0
ответ дан 8 December 2019 в 18:41
поделиться

Можно сделать так:

$this->addElement(new Zend_Form_Element_Button(
            'send',
            array(
                'label' => '<span>registrieren</span>',
                'class' => 'button-red',
                'type' => 'submit',
                'escape' => false,
                'required' => false,
                'ignore' => false,
            )
 ));
5
ответ дан 8 December 2019 в 18:41
поделиться

Просто экранирование ярлыка работает нормально. Он ломается только тогда, когда кто-то начинает возиться с декоратором меток (обычно это происходит при настройке тегов)

. Вы можете использовать функцию Zend_Form setElementDecorators () и исключить некоторые элементы из стиля. Прочтите Пример № 3 Установка декораторов для некоторых элементов в Zend_Form Manual (включая Примечание!) Для получения более подробной информации.

Для тех, кто все еще не понимает, вот пример кода для стилизации формы в виде таблицы с кнопкой, заключенной в двойной диапазон:

//(...)putting some other elements in the form first

//now add submit button 
$form       ->addElement('button', 'submit', array(
                        'label'     => '<span><span>SUBMIT</span></span>', 
                        'value'     => 'submit'
            ));

$form
            //set decorators for non-button elements
            ->setElementDecorators(array(
                    'ViewHelper',
                    'Errors',
                    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element')),
                    array('Label', array('tag' => 'td')),
                    array(array('row' => 'HtmlTag'), array('tag' => 'tr'))), array('submit'), false)
            //and then for button elements only
            ->setElementDecorators(array(
                    'ViewHelper',
                    'Errors',
                    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element')),
                    array(array('row' => 'HtmlTag'), array('tag' => 'tr'))), array('submit'), true)
            //and finally for the form
            ->setDecorators(array(
                    'FormElements',
                    array('HtmlTag', array('tag' => 'table')),
                    'Form'
            ));

где $ form - это элемент Zend_Form . Надеюсь это поможет!

1
ответ дан 8 December 2019 в 18:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: