Ошибки при работе процессоров компонента

Здравствуйте уважаемое комьюнити!
Не так давно загорелся мысль, что хочу попробовать самостоятельно собрать собственный компонент, по курсам Василия Наумкина.
Но возникла проблема: при редактировании уже существующего объекта возвращается вот такое сообщение:


Разработка ведется в отдельной папке на сервере GlX, в которой лежит пакет modExtra.
Самое интересное и ставящее меня в тупик это то, что такого лексикона «glxCity_err_ns» нет в GlX/core/components/glx/lexicon/.
Знающие люди, помогите пожалуйста разобраться что к чему, куда копать и в чем возиться.

Исходный код GlX/assets/components/glx/js/mgr/widgets/cities.windows.js:
GlX.window.UpdateCity = function (config) {
	config = config || {};
	if (!config.id) {
		config.id = 'glx-city-window-update';
	}
	Ext.applyIf(config, {
		title: _('glx_city_update'),
		width: 550,
		autoHeight: true,
		url: GlX.config.connector_url,
		action: 'mgr/city/update',
		fields: this.getFields(config),
		keys: [{
			key: Ext.EventObject.ENTER, shift: true, fn: function () {
				this.submit()
			}, scope: this
		}]
	});
	GlX.window.UpdateCity.superclass.constructor.call(this, config);
};
Ext.extend(GlX.window.UpdateCity, MODx.Window, {

	getFields: function (config) {
		return [{
			xtype: 'textfield',
			fieldLabel: _('glx_city_title'),
			name: 'title',
			id: config.id + '-title',
			anchor: '99%',
			allowBlank: false,
		},
		{
		layout:'column'
		,border: false
		,anchor: '100%'
		,items: [{
			columnWidth: .5
			,layout: 'form'
			,defaults: { msgTarget: 'under' }
			,border:false
			,items: [
			    {xtype: 'textfield',fieldLabel: _('glx_city_email'),name: 'email',id: config.id + '-email',anchor: '99%'}
			]
		},{
			columnWidth: .5
			,layout: 'form'
			,defaults: { msgTarget: 'under' }
			,border:false
			,items: [
				{xtype: 'textfield',fieldLabel: _('glx_city_phone'),name: 'phone',id: config.id + '-phone',anchor: '99%'}
			]
		}]
	},
		{
			xtype: 'textarea',
			fieldLabel: _('glx_city_description'),
			name: 'description',
			id: config.id + '-description',
			height: 150,
			anchor: '99%'
		}, {
			xtype: 'xcheckbox',
			boxLabel: _('glx_city_active'),
			name: 'active',
			id: config.id + '-active',
			checked: true,
		}];
	},

	loadDropZones: function() {
	}

});
Ext.reg('glx-city-window-update', GlX.window.UpdateCity);
Исходный код процессора GlX/core/components/glx/processors/mgr/city/update.class.php:
<?php

/**
 * Update an Item
 */
class glxCityUpdateProcessor extends modObjectUpdateProcessor {
	public $objectType = 'glxCity';
	public $classKey = 'glxCity';
	public $languageTopics = array('glx');
	//public $permission = 'save';


	/**
	 * We doing special check of permission
	 * because of our objects is not an instances of modAccessibleObject
	 *
	 * @return bool|string
	 */
	public function beforeSave() {
		if (!$this->checkPermissions()) {
			return $this->modx->lexicon('access_denied');
		}

		return true;
	}


	/**
	 * @return bool
	 */
	public function beforeSet() {
		$id = (int)$this->getProperty('id');
		$title = trim($this->getProperty('title'));
		if (empty($id)) {
			return $this->modx->lexicon('glx_city_err_ns');
		}

		if (empty($title)) {
			$this->modx->error->addField('title', $this->modx->lexicon('glx_city_err_title'));
		}
		elseif ($this->modx->getCount($this->classKey, array('title' => $title, 'id:!=' => $id))) {
			$this->modx->error->addField('title', $this->modx->lexicon('glx_city_err_ae'));
		}

		return parent::beforeSet();
	}
}

return 'glxCityUpdateProcessor';
Схема Базы Данных:
<?xml version="1.0" encoding="UTF-8"?>
<model package="glx" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" phpdoc-package="glx" version="1.1">

	<!-- Note xpos and ypos attributes: used to position the object window  -->
	<object class="glxCity" table="glx_cities" extends="xPDOSimpleObject" xpos="529" ypos="436">
		<field key="title" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
		<field key="email" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
		<field key="phone" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
		<field key="adress" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
		<field key="active" dbtype="tinyint" precision="1" phptype="integer" null="true" default="1"/>
		<field key="description" dbtype="text" phptype="string" null="true"/>
	</object>

</model>
Александр
23 мая 2016, 04:05
modx.pro
924
0

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

Наумов Алексей
23 мая 2016, 08:31
+2
hidden поле с id редактируемой записи есть в окне редактирования? Мы же должны знать, какую запись меняем…
    Наумов Алексей
    23 мая 2016, 08:31
    +2
    Формы создания и редактирования записи как раз и отличаются наличием этого поля.
      Александр
      23 мая 2016, 08:42
      0
      Огромнейшее вам спасибо!
      Глянул в репозиторий modExtra. И правда, потерял
      {
      	xtype: 'hidden',
      	name: 'id',
      	id: config.id + '-id',
      },
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3