Magento addField()不给予默认复选框

lskq00tm  于 2022-11-12  发布在  其他
关注(0)|答案(5)|浏览(176)

我正在扩展的模块使用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()添加字段时,它似乎被忽略了。

ygya80vv

ygya80vv1#

添加复选框的一种方法是

$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>
                 ");

你也检查了他们在他们的模块中做这件事的方式吗?

i1icjdpr

i1icjdpr2#

我知道这有点晚了,但我只是想发布我的解决方案,也许引发一些其他的想法。(和反馈我的工作方式)
我最初的来源:http://marius-strajeru.blogspot.be/2013/02/create-system-config-section-with.html
因此要添加一个字段(例如:文本字段):

$field = $element->addField( 'myFieldID', 'text',
  array(
    'name'  => 'groups[model_name][fields][var_name][value]', // this value will be saved to the database as module_name/model_name/var_name and you can get it by Mage::getStoreConfig(..)
    'label' => 'Title', // This is the human readable label up front 
    // See how to get the saved value and define inherit in the link above, this is not in scope for this question. Like this you can't ever see the value that you saved.
    'value' => 'My Title', // The initial value
    'inherit' => true, // Checks the inherit cb after the field
    'can_use_default_value' => true, // Can inherit from default level
    'can_use_website_value' => true, // Can inherit from website level
  ))->setRenderer(Mage::getBlockSingleton('adminhtml/system_config_form_field')); // Use the same renderer as for the system fields (this adds the cb at the end)

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

$field['scope'] = true; // Display scope label
$field['scope_label'] = '[WEBSITE]';

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

class Varien_Object implements ArrayAccess

现在要渲染该字段,只需执行以下操作:

echo $field->toHtml();
soat7uwm

soat7uwm3#

Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Inventorycatalog/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>
h9a6wy2h

h9a6wy2h4#

好吧,这是一个相当丑陋的解决方案,但也许它会为你工作。首先,在产品页面上有一个自定义的渲染器为每个元素,这就是为什么它显示在那里。所以,如果你有以下元素:

$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')
    );
}

此时,您应该有了第三列,其中包含scope-label类。但是它旁边的复选框仍然不会显示。为此,我们必须为表单设置以下内容:

$storeObj = new Varien_Object();
$storeId = $this->getRequest()->getParam("store");
$storeObj->setId($storeId);
$storeObj->setStoreId($storeId);
$form->setDataObject($storeObj);

现在,您还应该看到复选框。
此解决方案来自:
http://code007.wordpress.com/2014/03/20/how-to-show-the-default-checkbox-near-a-magento-attribute/

ozxc1zmp

ozxc1zmp5#

OP的解决方案从问题变成了答案:
我研究得越多,就越意识到使用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 . ']',
        ));

相关问题