フォームフィールドのデフォルト値を設定するには?


18

管理フォームフィールド(テキストボックス)があります。

$fieldset->addField('ajax_time_interval', 'text', array(
          'label'     => Mage::helper('dealroom')->__('Page Refresh Time Interval'),
          'class'     => 'required-entry',
          'required'  => true,
          'name'      => 'ajax_time_interval',
      ));

このテキストフィールドにデフォルト値を設定する必要があります。設定'value' => '120',してみました。しかし、機能していません。

$fieldset->addField('ajax_time_interval', 'text', array(
          'label'     => Mage::helper('dealroom')->__('Page Refresh Time Interval'),
          'class'     => 'required-entry',
          'required'  => true,
          'name'      => 'ajax_time_interval',
          'value'     => '120', 
      ));

そのフィールドにデフォルト値を設定する方法は?


1
ブラウザのキャッシュの問題ではないことを確認してください。特に、Firefoxでは、最新の値をキャッシュしています。
トバイアス

5
フィールド定義後にフォームでsetValuesを実行していないことを確認しましたか?使用し、使用するオブジェクト(または配列)が空の場合、すべての値がクリアされます。
ペタルジャンバゾフ

1
@ピーター-はい!それが問題でした...!おかげで、私は使用していたsetValues..
ヴィシュヌRenku

回答:



11

問題は、メソッドで設定した値が、既存のエンティティの編集にフォームが使用された場合、または送信中にエラーが発生した場合にフォームフィールド値を設定しようとするメソッドでaddField()上書きaddValues()されることです。

これは回避策です。ほとんどの場合、次のような保護されたメソッドで値を取得しています。

protected function _getFormData()
{
    $data = Mage::getSingleton('adminhtml/session')->getFormData();

    if (!$data && Mage::registry('current_osmm_project')->getData()) {
        $data = Mage::registry('current_osmm_project')->getData();
    }

    return (array) $data;
}

したがって、_prepareForm()メソッド内で次のように置き換えます。

$form->addValues($this->_getFormData());

で:

$_data = $this->__getFormData();
if (!empty($_data)) {
    $form->addValues($_data);
}

2

貴重な時間と労力を費やしてくださった皆さんに感謝します。私はsetValues()後に使用していましたaddfields。そのため、デフォルト値はクリアされていました。

次のifようなループを提供することでそれを克服します。

if (Mage::registry('dealroom_data')->getAjaxTimeInterval() < 0 || Mage::registry('dealroom_data')->getAjaxTimeInterval() == "") {
    Mage::registry('dealroom_data')->setAjaxTimeInterval(120);
}

ここでのデフォルトの時間は120です。


私の答えの編集をご覧ください。
user487772

1

1.9を探していて作業中の方で、以下のものをお持ちの方

if($model){
    $form->setValues($model->getData());
}

既存のデータを編集せずに、そのコードの場所のすぐ上で次のことができます。

if($model->getData('fieldName') == ""){
    $model->setData('fieldName', "yourValue");
}

もちろん、issetなどを確認できますが、ここにデフォルト設定の基本バージョンがあります。


0

使用できます

$data['ajax_time_interval'] = 120;

ここで、$dataフォームフィールドの配列です。

$data['{field_name}'] = '{field_name}';

0

=> フォームフィールドに「デフォルト」属性を追加できます。このような :

        $fieldset->addField('ajax_time_interval', 'text', array(
      'label'     => Mage::helper('dealroom')->__('Page Refresh Time Interval'),
      'class'     => 'required-entry',
      'required'  => true,
      'name'      => 'ajax_time_interval',
      'default'     => '120', 
  ));

動作していません
ヘマント・サンクラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.