В конфигурации моего пользовательского модуля я хотел бы иметь группу, которая имеет несколько полей ввода и кнопку (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>
Большое спасибо.