Magento addField()不提供默认复选框

Magento addField()不提供默认复选框,magento,magento-1.x,Magento,Magento 1.x,好的,因此im扩展的模块使用addField()将字段添加到管理表单中。我复制了这种行为,因为我认为我会坚持他们的设置。然而,就我个人而言,我不知道如何将“使用默认值”复选框添加到这些字段的右侧。这是一个问题,因为我需要添加一个特定于站点的字段 任何帮助都将不胜感激 为子孙后代着想: $fieldset->addField('enable_coupon', 'select', array( 'label' => Mage::helper('affiliatep

好的,因此im扩展的模块使用addField()将字段添加到管理表单中。我复制了这种行为,因为我认为我会坚持他们的设置。然而,就我个人而言,我不知道如何将“使用默认值”复选框添加到这些字段的右侧。这是一个问题,因为我需要添加一个特定于站点的字段

任何帮助都将不胜感激

为子孙后代着想:

$fieldset->addField('enable_coupon', 'select', array(
            'label' => Mage::helper('affiliatepluscoupon')->__('Enable Coupon'),
            'name' => 'enable_coupon',
            'note' => Mage::helper('affiliatepluscoupon')->__('If yes then it will create a magento salesrule for this store.'),
            'values' => Mage::getSingleton('adminhtml/system_config_source_yesno')->toOptionArray(),
        ));
为了澄清这一点,我正在寻找动态复选框,该复选框由管理员字段设置,并根据您所处的视图进行更改。这在通过XML创建字段时自动显示,但在使用addField()添加字段时似乎被忽略

更新:

我越是深入研究它,就越意识到与xml一起使用的系统是一个相当深入的系统,如果仅仅为了坚持一些糟糕的编程实践而复制所有内容,那就有点可笑了。我将简单地添加到xml中。谢谢你的帮助

结论:

对于那些想知道如何使用addField()的人,我确实找到了答案。这是我的最终代码:

 $inStore = Mage::app()->getRequest()->getParam('store');
        $defaultLabel = Mage::helper('affiliateplusprogram')->__('Use Default');
        $defaultTitle = Mage::helper('affiliateplusprogram')->__('-- Please Select --');
        $scopeLabel = Mage::helper('affiliateplusprogram')->__('STORE VIEW');
        $fieldset->addField('enable_coupon', 'select', array(
            'label' => Mage::helper('affiliatepluscoupon')->__('Enable Coupon'),
            'name' => 'enable_coupon',
            'note' => Mage::helper('affiliatepluscoupon')->__('If yes then it will create a magento salesrule for this store.'),
            'values' => Mage::getSingleton('adminhtml/system_config_source_yesno')->toOptionArray(),
            'disabled' => ($inStore && !$data['name_in_store']),
            'after_element_html' => $inStore ? '</td><td class="use-default">
            <input id="name_default" name="name_default" type="checkbox" value="1" class="checkbox config-inherit" ' . ($data['name_in_store'] ? '' : 'checked="checked"') . ' onclick="toggleValueElements(this, Element.previous(this.parentNode))" />
            <label for="name_default" class="inherit" title="' . $defaultTitle . '">' . $defaultLabel . '</label>
          </td><td class="scope-label">
            [' . $scopeLabel . ']
          ' : '</td><td class="scope-label">
            [' . $scopeLabel . ']',
        ));
$inStore=Mage::app()->getRequest()->getParam('store');
$defaultLabel=Mage::helper('affiliateplusprogram')->(使用默认值);
$defaultTitle=Mage::helper('affiliateplusprogram')->(请选择--);
$scopeLabel=Mage::helper('affiliateplusprogram')->(存储视图);
$fieldset->addField('启用优惠券','选择',数组(
'label'=>Mage::helper('AffiliatePlusContouction')->\uuUUUUU('Enable Contouch'),
“名称”=>“启用优惠券”,
'note'=>Mage::helper('AffiliatePlusContouction')->(如果是,则将为此商店创建一个magento salesrule'),
'values'=>Mage::getSingleton('adminhtml/system\u config\u source\u yesno')->toOptionArray(),
“已禁用”=>($inStore&&!$data['name_in_store']),
'after_element_html'=>$inStore'
“.$defaultLabel。”
['.$scopeLabel.]
' : '
['.$scopeLabel.'],
));

希望有人觉得这很有用:)

添加复选框的一种方法是

$fieldset->addField('enable_coupon', 'select', array(
         ....
  ))->setAfterElementHtml("
                  <span id='span_use_default'>
                     <input type='checkbox' value='1' name='use_default' id='use_default' /> 
                     Use Default
                   </span>
                 ");
$fieldset->addField('enable_优惠券','select',数组(
....
))->setAfterElementHtml(“
使用默认值
");

您是否也检查了他们在模块中的操作方式?

查看
Mage\u Adminhtml\u Block\u Catalog\u Product\u Edit\u Tab\u Inventory
还有
catalog/product/tab/inventory.phtml

这看起来很有希望

<legend><?php echo Mage::helper('catalog')->__('Inventory') ?></legend>
        <table cellspacing="0" class="form-list" id="table_cataloginventory">
        <tr>
            <td class="label"><label for="inventory_manage_stock"><?php echo Mage::helper('catalog')->__('Manage Stock') ?></label></td>
            <td class="value"><select id="inventory_manage_stock" name="<?php echo $this->getFieldSuffix() ?>[stock_data][manage_stock]" class="select" <?php echo $_readonly;?>>
                <option value="1"><?php echo Mage::helper('catalog')->__('Yes') ?></option>
                <option value="0"<?php if ($this->getConfigFieldValue('manage_stock') == 0): ?> selected="selected"<?php endif; ?>><?php echo Mage::helper('catalog')->__('No') ?></option>
            </select>
            <input type="hidden" id="inventory_manage_stock_default" value="<?php echo $this->getDefaultConfigValue('manage_stock'); ?>" />

            <?php $_checked = ($this->getFieldValue('use_config_manage_stock') || $this->IsNew()) ? 'checked="checked"' : '' ?>
            <input type="checkbox" id="inventory_use_config_manage_stock" name="<?php echo $this->getFieldSuffix() ?>[stock_data][use_config_manage_stock]" value="1" <?php echo $_checked ?> onclick="toggleValueElements(this, this.parentNode);" class="checkbox" <?php echo $_readonly;?>/>
            <label for="inventory_use_config_manage_stock" class="normal"><?php echo Mage::helper('catalog')->__('Use Config Settings') ?></label>
            <?php if (!$this->isReadonly()):?><script type="text/javascript">toggleValueElements($('inventory_use_config_manage_stock'), $('inventory_use_config_manage_stock').parentNode);</script><?php endif; ?></td>
            <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
        </tr>


嗯,这是一个相当丑陋的解决方案,但也许它会对你有用。首先,在产品页面上,每个元素都有一个自定义的呈现器,这就是为什么它会显示在那里。因此,如果您有以下元素:

$name = $fieldset->addField('name', 'text', array(
    'name' => 'name',
    'required' => true,
    'class' => 'required-entry',
    'label' => Mage::helper('some_helper')->__('Name'),
));
您必须使用自定义渲染器进行渲染:

if ($name)
{
    $name->setRenderer(
            $this->getLayout()->createBlock('adminhtml/catalog_form_renderer_fieldset_element')
    );
}
此时,第三列应该有
范围标签
类。但它旁边的复选框仍然不会显示。为此,我们必须为表格设置以下内容:

$storeObj = new Varien_Object();
$storeId = $this->getRequest()->getParam("store");
$storeObj->setId($storeId);
$storeObj->setStoreId($storeId);
$form->setDataObject($storeObj);
现在您还应该看到复选框

此解决方案来自:


我知道这有点晚了,但我只是想发布我的解决方案,或许还能激发一些其他想法。(以及对我工作方式的反馈)

我最初的资料来源:

因此,要添加字段(例如:文本字段):

这就是向字段添加复选框所需的全部操作。 如果您希望添加这些灰色范围文本(例如:[网站]):

之所以可以这样做,是因为定义了基本Varien对象以实现ArrayAccess

class Varien_Object implements ArrayAccess
现在要渲染字段,只需执行以下操作:

echo $field->toHtml();

是的,我在商店里。我正在查看现在发布的两个答案。我正在查找自动的“使用默认值”复选框,该复选框根据您的默认视图而变化……如果您的默认视图不显示。当您使用xml创建管理字段时,所有这些都会自动发生,但当您使用addField时,它不会显示。此外,它们以这种方式添加的字段也没有此复选框。真的我可能只是覆盖并添加到xml中,但我已经覆盖了这一方面,所以我想知道他们是否是继续使用此方法的一种方式。我之所以将此标记为正确答案,是因为这是最基本的答案……这不是我要找的答案,而是你的权利:)这看起来可以获得默认信息,但不完全是我想要的寻找。我特别寻找一个复选框,它是基于默认/站点还是站点视图的动态复选框。这是通过xml添加字段时自动实现的…据我所知,system.xml字段是通过不同的方法加载的。他们可能会使用与上面类似的东西。实际上,我越是深入研究它,我就越意识到它是一个相当深入的系统,仅仅为了坚持一些糟糕的编程实践而复制所有这些系统是很荒谬的。这一切都是从各种各样的数据、形式、元素、抽象开始的。
class Varien_Object implements ArrayAccess
echo $field->toHtml();