Дополнительные поля, чекбокс выключен

Всем привет!

Создал дополнительный параметр для товара — «В наличии». Всё работает, но хочу сделать, что когда добавляеш новый товар, чекбокс становится автоматически активный (по умолчанию), всяческие варианты потестил и ничего не помогает. Помогите кто знает, спасибо!
msproductdata.map.inc.php
return array(
	'fields' => array(
		'availability' => 1
	)
	,'fieldMeta' => array(
		'availability' => array(
			'dbtype' => 'tinyint',
			'precision' => '1',
			'attributes' => 'unsigned',
			'phptype' => 'boolean',
			'null' => false,
			'default' => 1,
		)
	)
);
msproductdata.js
miniShop2.plugin.availability = {
	getFields: function(config) {
		return {
			availability: {xtype: 'xcheckbox',  description: '<b>[[+availability]]</b><br />'+_('ms2_product_availability_help'),inputValue: 1,checked: parseInt(config.record.availability)}
		}
	}
	,getColumns: function() {
		return {
			availability: {width:50, sortable:true, editor: {xtype:'xcheckbox'}}
		}
	}
};
Андрей Воробей
12 ноября 2015, 18:16
modx.pro
3
2 219
0

Комментарии: 4

Сергей Шлоков
13 ноября 2015, 09:35
0
А что же вы хотите, милый друг, если у вас стоит условие
checked: parseInt(config.record.availability)
А когда вы создаете новый товар у вас нет record. Поэтому checked = 0. Попробуйте так
checked: parseInt(config.record.availability || 1)
    vahrammer
    24 мая 2018, 16:56
    0
    Добрый день.
    Я посмотрел на тип у config.record.availability — это boolean, если товар редактируется, и нет такого свойства — если новый. Немного не понял, зачем здесь тогда parseInt(). Для true, false и undefined parseInt() вернёт NaN в JS.
    Я не понимаю, почему это работает у человека, который ответил ниже, так в приведенном примере исходя из того, что console.log показывает свойству всегда будет NaN присваиваться.

    Я бы тоже хотел, чтобы этот чекбокс был отмечен, запилил так
    checked: config.record.availability === undefined ? true : config.record.availability
    Но что-то у нового товара один чёрт чекбокс пустой, у редактируемого — всё нормально. Из чего я бы сделал вывод, что-то другое на чекбокс влияет.

    Можно конечно костыльнуть, у чекбокса есть id (и вроде он постоянный). Я новичек в ModX, но вроде в onDocFormRender можно JS вставить и там отметить этот чекбокс JS-ом.
      vahrammer
      24 мая 2018, 17:16
      0
      Короче, прямо в методе getFields перед оператором return запилил такой костыль:
      if (config.record.availability === undefined) {
        setTimeout(function() {
          document.getElementById('modx-resource-availability').checked = true;
        }, 0)
      }
      Теперь у новых товаров поле отмечено по умолчанию.
    Андрей Воробей
    13 ноября 2015, 23:15
    0
    Спасибо Сергей! Всё встало на свои места.

    Я дополнил и сделал, что в таблице товара, выпадало меню — Да / Нет добавив {xtype:'combo-boolean', renderer:'boolean'}
    miniShop2.plugin.availability = {
    	getFields: function(config) {
    		return {
    			availability: {xtype: 'xcheckbox',  description: '<b>[[+availability]]</b><br />'+_('ms2_product_availability_help'),inputValue: 1,checked: parseInt(config.record.availability || 1)}
    		}
    	}
    	,getColumns: function() {
    		return {
    			availability: {width:50, sortable:true, editor: {xtype:'combo-boolean', renderer:'boolean'}}
    		}
    	}
    };
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4