Не находит _mysql класс

Никак не могу понять с подключением своего класса. Сделал в модели (components\new_era\model\new_era\newerachange.class.php):
class newEraChange extends xPDOSimpleObject {

	public $data;

	public function IniChanges() {
		$a = $this->xpdo->newObject('newEraChange');
		foreach ($this->data as $key=>$data) {
			$a->set($key, $data);
		}
		$a->save();
		print_r($this->data);
	}

}
А в сниппете
$new_era_change->data = array(
	'id_item' => $i,
	'field' => 'oil'
);
$new_era_change->IniChanges();
После чего он мне пишет:
Fatal error: Class 'newEraChange_mysql' not found in /var/www/monitor/public/core/xpdo/xpdo.class.php on line 770

А в логе постоянно:
[2015-04-10 18:11:31] (ERROR @ /index.php) Path specified for package newEraChange is not a valid or accessible directory: /var/monitor/public/core/components/new_era/model/new_era/newerachange.class.php
[2015-04-10 18:11:31] (ERROR @ /index.php) Could not get table name for class: newEraChange
[2015-04-10 18:11:42] (ERROR @ /connectors/index.php) Path specified for package newEraChange is not a valid or accessible directory: /var/monitor/public/core/components/new_era/model/new_era/newerachange.class.php
Подскажите, что это может быть. Где я мог не подключить.
Заранее спасибо.
GrinRom
10 апреля 2015, 15:09
modx.pro
2 665
0

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

GrinRom
10 апреля 2015, 20:07
0
Кое-как вывел ошибки:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '() VALUES ()' at line 1' in /var/www/monitor/public/core/xpdo/om/xpdoobject.class.php:1448 Stack trace: #0 /var/www/monitor/public/core/xpdo/om/xpdoobject.class.php(1448): PDOStatement->execute() #1 /var/www/monitor/public/core/components/new_era/model/new_era/newerachange.class.php(20): xPDOObject->save() #2 /var/www/monitor/public/core/cache/includes/elements/modsnippet/96.include.cache.php(25): newEraChange->IniChanges() #3 /var/www/monitor/public/core/model/modx/modscript.class.php(70): include('/var/www/monito...') #4 /var/www/monitor/public/core/model/modx/modparser.class.php(513): modScript->process(NULL) #5 /var/www/monitor/public/core/model/modx/modparser.class.php(247): modParser->processTag(Array, true) #6 /var/www/monitor/public/core/model/modx/modresponse.clas in /var/www/monitor/public/core/xpdo/om/xpdoobject.class.php on line 1448
Но никак не удается сохранить
    Василий Наумкин
    10 апреля 2015, 20:37
    0
    Ты внутри newEraChange создаёшь еще один newEraChange и сохраняешь его.

    Не знаю, что там у тебя за логика, но выглядит это совсем не здорово. Может, ты хотел применить эти данные к текущему объекту?
    public function IniChanges() {
    	$this->fromArray($this->data);
    	$this->save();
    	print_r($this->toArray());
    }

    Но вообще, судя по ошибкам в логе, у тебя вообще модель компонента не грузится и работать с этими объектами ты не сможешь, пока это не исправишь.
      GrinRom
      10 апреля 2015, 20:50
      0
      Спасибо, Василий!
      Идея сделать так, чтобы я мог через классы вносить корректировки в базу(они лежат в отдельной таблице и требуют подтверждения со стороны других пользователей с более высоким уровнем доступа). Хочу перестать каждый раз копипастить код а сделать все в 1 классе.
      Я перечитал все Ваши уроки и пол интернета перерыл. Подскажите, пожалуйста, как правильно подключить свой класс?
      Я правильно понимаю, что они вписываются в модели -> model/new_era/…?

      И еще, не работает только save(), без проблем работает print_r($this->toArray()); из сниппета, либо getObject
        Василий Наумкин
        11 апреля 2015, 05:32
        0
        Тебе нужно вдумчиво ознакомиться вот с этим — bezumkin.ru/training/course1/2136/, если будет интересно — то читай все заметки с начала.

        По идее, ты сейчас пытаешься написать что-то уже в объекте, а тебе нужен просто класс, который будет работать с этими объектами.

        Обычно в дополнениях есть один общий класс, который реализует всю логику + его объекты, в которых прописана какая-то логика чисто для них. Например, общий класс miniShop2 и объект товара или категории.
          GrinRom
          11 апреля 2015, 18:00
          0
          Спасибо, я так и знал, что только вы мне сможете помочь)))

          Перечитал урок, все вроде по нему делал. Причем уже не 1 раз я по нему делаю. Но в общем классе save() вполне работает, так что сделал в нем.
        GrinRom
        10 апреля 2015, 20:56
        0
        Я хочу сделать так, чтобы он мне через эти функции создавал новый объект newEraChange в базе. Если сделать просто $this->save(); Как он поймет, что именно этот объект надо создать? И в таком случае, необходимо ли все переменные(поля в БД) заявлять через public?
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        6