Ошибки при работе процессоров компонента
Здравствуйте уважаемое комьюнити!
Не так давно загорелся мысль, что хочу попробовать самостоятельно собрать собственный компонент, по курсам Василия Наумкина.
Но возникла проблема: при редактировании уже существующего объекта возвращается вот такое сообщение:
Разработка ведется в отдельной папке на сервере GlX, в которой лежит пакет modExtra.
Самое интересное и ставящее меня в тупик это то, что такого лексикона «glxCity_err_ns» нет в GlX/core/components/glx/lexicon/.
Знающие люди, помогите пожалуйста разобраться что к чему, куда копать и в чем возиться.
Исходный код GlX/assets/components/glx/js/mgr/widgets/cities.windows.js:
Не так давно загорелся мысль, что хочу попробовать самостоятельно собрать собственный компонент, по курсам Василия Наумкина.
Но возникла проблема: при редактировании уже существующего объекта возвращается вот такое сообщение:
Разработка ведется в отдельной папке на сервере 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>
Комментарии: 3
hidden поле с id редактируемой записи есть в окне редактирования? Мы же должны знать, какую запись меняем…
Формы создания и редактирования записи как раз и отличаются наличием этого поля.
Огромнейшее вам спасибо!
Глянул в репозиторий modExtra. И правда, потерял
Глянул в репозиторий modExtra. И правда, потерял
{
xtype: 'hidden',
name: 'id',
id: config.id + '-id',
},
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.