Павел Гвоздь

Павел Гвоздь

С нами с 31 мая 2015; Место в рейтинге пользователей: #2
Павел Гвоздь
12 ноября 2015, 08:46
0
Я тоже думаю, что с фронта купоны добавлять нет смысла. Всё на плечи админа ляжет. Единственное надо продумать функционал генерации купонов и продажи электронных товаров с последующим их вычёркиванием в базе. Думаю надо писать компонент такой…
Павел Гвоздь
11 ноября 2015, 19:01
0
Каких костылей? У меня нет https, чтобы тестить. Меня и так всё устраивает пока. Поэтому если хочешь, чтобы проблемы не было в коробке — напиши подробнее, пожалуйста.

По удалению ролика: когда перезаписываешь пустым, что-нибудь пишет? Или пишет, что сохранено, а ролик остался при последующем входе на страницу редактирования ресурса? Остаётся где? В JSON строке, или в дополнительных полях, которые указываются в настройках пакета?
Павел Гвоздь
11 ноября 2015, 15:41
0
Это не предусмотрел я. Точнее не сделал умышленно, чтобы не путать людей лишним полем с JSON инфой. Я подумаю над этим в след версии. А пока только вот так:
Павел Гвоздь
11 ноября 2015, 06:52
+3
Лучше уж свой сниппет. Раньше тоже включал эту настройку, а когда Василий протер мне глаза, насколько это небезопасно, я задумался и решил, что оно того не стоит. Лучше написать свой более менее универсальный сниппет вывода полей определённого юзера. Если затрудняешься в этом — пиши, я выложу свой сниппет для этого дела. Не сказать, что он универсальный, но мои потребности решает.
Павел Гвоздь
10 ноября 2015, 12:25
+9
Тогда стоит задаться вопросом: «А что сделал я для того, чтобы Россия начала расти?», а не раздавать советы о том, как бы лучше было бы по твоему мнению и что сделать человеку, чтобы срубить побольше бабла. Извини, не удержался…
Павел Гвоздь
09 ноября 2015, 10:30
0
Жду статью, Сергей. Побольше бы информации об ExtJS, побольше. :)
Павел Гвоздь
08 ноября 2015, 01:47
+1
Спасибо, Сергей! Сначало не понял, вроде указал поле name, думал этого достаточно. Не понимал, при чём тут hiddenName. Когда подставил — всё получилось. Никогда бы не подумал, что этот параметр мне поможет. Спасибо ещё раз, Сергей, ты мне очень помог!
Павел Гвоздь
07 ноября 2015, 19:59
0
Сергей, если не затруднит, подскажи пожалуйста.

Я создаю свой комбобокс, мне надо, чтоб при выборе отображался один текст, а на сервер уходили только значения. Вот код комбобокса:
hostPanel.combo.version = function(config) {
	config = config || {};
	Ext.applyIf(config, {
		store: new Ext.data.JsonStore({
			id: 0,
			root: 'results',
			totalProperty: 'total',
			autoLoad: true,
			fields: ['value', 'display'],
			url: hostPanel.config.connector_url,
			baseParams: {
				action: 'mgr/settings/getlist',
				key: 'version',
			},
			listeners: {
				'clear': { fn: function(obj) { this.hide(); }, scope:this },
				'load': { fn: function(obj, recs, opts) { obj.getTotalCount() > 0 && this.show(); }, scope:this },
			},
		}),
		mode: 'local',
		displayField: 'display',
		value: 'value',
		valueField: 'value',
		typeAhead: true,
		triggerAction: 'all',
	});
	hostPanel.combo.version.superclass.constructor.call(this,config);
};
Ext.extend(hostPanel.combo.version, MODx.combo.ComboBox);
Ext.reg('hostpanel-combo-version', hostPanel.combo.version);

Проблема в том, что на сервер уходит текст displayField: 'display', а не значение valueField: 'value'. В доках смотрел и не нашёл такого параметра. Может ты знаешь, как это решить?

P.S.: Если в displayField подставляем 'value', то сохраняет правильно. Но так не надо.
Павел Гвоздь
07 ноября 2015, 19:40
+1
Посоветую не публиковать свои вопросы на главную…
Павел Гвоздь
06 ноября 2015, 22:43
0
Спасибо, Сергей, тебе огроменное! Это работает! Очень жду очередную твою статью по ExtJS! :)
Павел Гвоздь
06 ноября 2015, 22:39
0
Удалось решить вот так:
{
	xtype: 'hostpanel-combo-cms',
	fieldLabel: _('hostpanel_site_cms'),
	name: 'cms',
	id: config.id +'-cms',
	anchor: '100%',
	listeners: {
		'select': {
			fn: function (o) {
				var hostpanel_combo_version = Ext.getCmp( config.id +'-version');
				
				hostpanel_combo_version.reset();
				
				hostpanel_combo_version.store = new Ext.data.JsonStore({
					id: 0,
					root: 'results',
					totalProperty: 'total',
					autoLoad: true,
					fields: ['value', 'display'],
					url: hostPanel.config.connector_url,
					baseParams: {
						action: 'mgr/settings/getlist',
						key: 'version',
						parent: o.value,
					},
				});
				
				hostpanel_combo_version.bindStore( hostpanel_combo_version.getStore() );
				
			}, scope:this
		},
	},
}, {
	xtype: 'hostpanel-combo-version',
	fieldLabel: _('hostpanel_site_version'),
	name: 'version',
	id: config.id +'-version',
	anchor: '100%',
}

Только теперь, если не кликнул на второе поле перед тем, как выбрал что-нибудь в первом, в консоли вылазит вот такая ошибка:


И вылазит до тех пор, пока не кликнем на втором поле. Не знаешь, что на это влияет?
Павел Гвоздь
06 ноября 2015, 21:01
0
Сергей, вот смотри. Я вот этим кодом могу обновлять значения в combobox-е, только он внешне пункты при выпадении вариантов выбора не обновляет:
hostpanel_combo_version.store = new Ext.data.JsonStore({
	id: 0,
	root: 'results',
	totalProperty: 'total',
	autoLoad: true,
	fields: ['value', 'display'],
	url: hostPanel.config.connector_url,
	baseParams: {
		action: 'mgr/settings/getlist',
		key: 'version',
		parent: o.value,
	},
});

Получается вот так:


Тут я кликаю на выпавший пункт, а он мне показывает выбранным совсем другой, тот, который подгрузил мне GetList.
Павел Гвоздь
06 ноября 2015, 20:39
0
Пишу вот такую штуку в то же событие select:
{
	xtype: 'hostpanel-combo-cms',
	fieldLabel: _('hostpanel_site_cms'),
	name: 'cms',
	id: config.id +'-cms',
	anchor: '100%',
	listeners: {
		'select': {
			fn: function (o) {
				var hostpanel_combo_version = Ext.getCmp( config.id +'-version');
				
				hostpanel_combo_version.store.load( hostpanel_combo_version.store, new Ext.data.JsonStore({
					id: 0,
					root: 'results',
					totalProperty: 'total',
					autoLoad: true,
					fields: ['value', 'display'],
					url: hostPanel.config.connector_url,
					baseParams: {
						action: 'mgr/settings/getlist',
						key: 'version',
						parent: o.value,
					},
				}) );
				
			}, scope:this
		},
	},
}, {
	xtype: 'hostpanel-combo-version',
	fieldLabel: _('hostpanel_site_version'),
	name: 'version',
	id: config.id +'-version',
	anchor: '100%',
}

GetList процессор у меня уже обрабатывает ограничения по полю parent на основании value.o (значения, выбранного в первом combobox-е). Даже больше — он отдаёт в ExtJS нужные мне данные. Только вот отобразить во втором combobox-е я их пока не могу.
Павел Гвоздь
06 ноября 2015, 19:20
0
Спасибо, Сергей. Очень помог! Может быть в этом вопросе тоже будет возможность помочь? — modx.pro/help/6953/
Павел Гвоздь
06 ноября 2015, 10:22
0
pdoTools надо ставить для работы с Феномом.
В работе с Феном много тонкостей. Например, скорей всего на твоём сайте, если ты поставишь pdoTools с включённым Феном, у тебя повываливаются ошибки и страница не отобразится, как надо. Это связано с тем, что Феном любой код (даже JS, даже JSON в параметрах сниппетов стандартным выводом) с фигурной скобой {, если после неё идёт какой-либо текст, а не пробел, таб или перенос строки, будет считать «за своего» и пытаться обработать. Естественно синтаксис его не устроит и он вывалит ошибку. Приведу пример:

Мы на странице вызываем код fancybox вот так:
$("a[rel='ajaxModal']").fancybox({'type':'iframe', 'arrows':false});
Феном видит это безобразие и в логе ошибок в бекенде сообщает нам, что он не понимает синтаксис, который мы указали для него на странице. Что нам надо сделать, чтобы удовлетворить потребность Фенома в корректном синтаксисе? Да просто после фигурной скобы поставить пробел, вот так:
$("a[rel='ajaxModal']").fancybox({ 'type':'iframe', 'arrows':false});

Или есть у нас сниппет вызываемый стандартными средствами MODX с параметром, в котором указана JSON строка вот так:
[[!pdoResources? &sortby=`{"id":"DESC"}`]]
Феном не устроит подобное отношение и он, как и в прошлом примере скажет нам, что синтаксис не уместен. Что мы делаем? Правильно! Просто ставим пробел после скобы:
[[!pdoResources? &sortby=`{ "id":"DESC"}`]]

И так со всем кодом на странице. Когда все подобные моменты на странице будут исправлены — Феном будет радовать нас своими возможностями и скоростью работы.
Павел Гвоздь
06 ноября 2015, 10:01
2
0
Извини, конечно, но меня давно не возбуждают эти стандартные методы и вдаваться в подробности этих ужасов снова нет никакого желания.

{if $_modx->config.cultureKey == 'ru'}
    культурКей Ru
{elseif $_modx->config.cultureKey == 'en'}
    культурКей En
{/if}

Либо проверить контексты:
{if $_modx->context.key == 'web'}
    контекст web
{elseif $_modx->context.key == 'en'}
    контекст en
{/if}

Либо твой пример:
{if $_modx->context.key == 'web'}
    {include 'menu'}
{elseif $_modx->context.key == 'en'}
    {include 'enmenu'}
{/if}

Присмотрись в сторону Fenom, уверяю тебя, ни грамма не пожалеешь об этом.
Павел Гвоздь
06 ноября 2015, 06:12
+1
Изучай Феном, чтобы сайт из-за подобных конструкций не превратился в «неповоротливую корову».
Павел Гвоздь
05 ноября 2015, 19:50
0
Может быть так будет заметнее? Прошу помощи, друзья.
Павел Гвоздь
04 ноября 2015, 07:29
0
… но так это только и решишь… :)