Конфигурация Magento - может быть, использовать модальное диалоговое окно в пользовательской конфигурации модуля? - PullRequest
0 голосов
/ 18 апреля 2011

В конфигурации моего пользовательского модуля я хотел бы иметь группу, которая имеет несколько полей ввода и кнопку (button1). Хорошо пока. Нажатие на кнопку должно собрать некоторую информацию от пользователя и, при нажатии другой кнопки (кнопка2), передать эту информацию в веб-службу. Собранная информация должна быть временной, т.е. я не хочу, чтобы она хранилась в таблицах конфигурации.

Проблема, с которой я столкнулся, заключается в том, какой механизм мне следует использовать для сбора информации для отправки в веб-службу. У меня могла бы быть другая Группа, которая, по нажатию кнопки 1, включена. Но тогда как отключить Группу, если пользователь не нажимает кнопку2.

Так что я подумал, что, возможно, я смогу при нажатии кнопки 1 отобразить модальное диалоговое окно. Этот модальный диалог будет содержать поля для сбора информации, которая требуется моему веб-сервису, и кнопку для отправки данных. Это возможно?

Обновление - я пытаюсь что-то сделать, программно устанавливая «скрытый» и «расширенный» в группе, но моя инструкция установить расширенный в «истинное», похоже, игнорируется.

Update2 - в ответ на комментарий Джонатана, вот код, который я попробовал. Я сохранил это как можно меньше. Это почти делает работу. Начальное состояние неверно, так как я хочу, чтобы group3 «отключалась» при первом попадании на страницу (это не так), и переключение не правильно, поскольку вы можете развернуть group3 (так как оно изначально не отключено), а затем переключение свернет группу а не расширять его. Кроме того, маленькие треугольники коллапса / расширения не всегда указывают в направлении, отражающем состояние группы.

System.Xml:

...
<sections>
    <mymodule translate="label" module="mymodule">
        <groups>
            <group1 translate="label">
                <fields>
                    <my_button1 translate="button_label my_button1_label">
                        <label></label>
                        <button_label>Button One</button_label>
                        <frontend_model>mymodule/adminhtml_system_config_doButtonOne</frontend_model>
                    </my_button1>
                    ...
                </fields>
            </group1>
            <group2 translate="label">
                ...
            </group2>
            <group3 translate="label">
                <fields>
                    <!-- fields that gather first name, last name, etc. I do not want these fields
                         saved in the config; I'm hoping/guessing I can achieve that with a custom
                         backend model
                      -->
                    <my_button2 translate="button_label request_service_button_label">
                        <label></label>
                        <button_label_submit>Make Web Service Request</button_label_submit>
                        <button_label_cancel>Cancel</button_label_cancel>
                        <frontend_model>my_module/adminhtml_system_config_doButton2</frontend_model>
                    </my_button2>
            </group3>
        </groups>
    </mymodule>
</sections>
...

DoButton1.php:

protected function _prepareLayout()
{
    parent::_prepareLayout();
    if (!$this->getTemplate()) {
        $this->setTemplate('mypackage/system/config/button_one.phtml');
    }
    return $this;
}
public function render(Varien_Data_Form_Element_Abstract $element)
{
    $element->unsScope()->unsCanUseWebsiteValue()->unsCanUseDefaultValue();
    return parent::render($element);
}

protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
{
    $originalData = $element->getOriginalData();
    $this->addData(array(
        'button_label' => Mage::helper('mymodule')->__($originalData['button_label']),
        'html_id' => $element->getHtmlId(),
    ));
    return $this->_toHtml();
}

button_one.phtml:

<script type="text/javascript">

function showGroup3Only()
{
    // Setting expanded to true/false makes no difference to the behavior
    //$('mymodule_group1').expanded=false;

    $('mymodule_group1').hidden=true;
    $('mymodule_group2').hidden=true;
    $('mymodule_group3').hidden=false;

    Fieldset.toggleCollapse('mymodule_group3');
}

</script>

<table>
    <tr>
        <td>
            <button style="" onclick="showGroup3Only(); return false;" class="scalable" type="button" id="<?php echo $this->getHtmlId() ?>">
                <span><?php echo $this->escapeHtml($this->getButtonLabel()); ?></span>
            </button>
        </td>
    </tr>
</table>

DoButton2.php:

protected function _prepareLayout() {
    parent::_prepareLayout();
    if (!$this->getTemplate()) {
        $this->setTemplate('mypackage/system/config/button_two.phtml');
    }
    return $this;
}

public function render(Varien_Data_Form_Element_Abstract $element)
{
    $element->unsScope()->unsCanUseWebsiteValue()->unsCanUseDefaultValue();
    return parent::render($element);
}

protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
{
    $originalData = $element->getOriginalData();
    $this->addData(array(
        'button_label_submit' => Mage::helper('mymodule')->__($originalData['button_label_submit']),
        'button_label_cancel' => Mage::helper('mymodule')->__($originalData['button_label_cancel']),
        'html_id' => $element->getHtmlId(),
        'cancel_html_id' => 'cancel_' . $element->getHtmlId(),
    ));
    return $this->_toHtml();
}

button_two.phtml:

function restoreGroups()
{
    $('mymodule_group1').hidden=false;
    $('mymodule_group2').hidden=false;
    $('mymodule_group3').hidden=true;
}

</script>

<table>
    <tr>
        <td>
            <button style="" onclick="doStuffNotShown(); restoreGroups(); return false;" class="scalable" type="button" id="<?php echo $this->getHtmlId() ?>">
                <span><?php echo $this->escapeHtml($this->getButtonLabelSubmit()); ?></span>
            </button>
        </td>
        <td>
            <button style="" onclick="restoreGroups(); return false;" class="scalable" type="button" id="<?php echo $this->getCancelHtmlId() ?>">
                <span><?php echo $this->escapeHtml($this->getButtonLabelCancel()); ?></span>
            </button>
        </td>
    </tr>
</table>

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...