2

我正在扩展的模块使用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().

4

5 回答 5

1

添加复选框的一种方法是

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

您还检查了他们在模块中的操作方式吗?

于 2013-05-31T13:50:37.340 回答
1

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

我的初始来源: 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)

这就是在字段中添加复选框所需要做的一切。如果您想添加那些灰色范围的文本(例如:[WEBSITE]):

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

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

class Varien_Object implements ArrayAccess

现在渲染该字段:

echo $field->toHtml();
于 2015-08-04T14:47:46.403 回答
0

看进去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>
于 2013-05-31T13:57:37.507 回答
0

好吧,这是一个非常丑陋的解决方案,但也许它对你有用。首先,在产品页面上,每个元素都有一个自定义渲染器,这就是它显示在那里的原因。所以,如果你有以下元素:

$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/

于 2014-03-20T10:54:03.910 回答
-2

OP 的解决方案从问题变成了答案:

我研究得越多,我就越意识到与 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 . ']',
        ));
于 2021-12-20T15:04:15.483 回答