Как подключить свой контроллер в сниппете
Хочу создать класс для работы с внесением корректировок в данные в MySQL. Думаю это реализовать через отдельный класс, так как часто используется в разных сниппетах и с разными данными. В контроллере home.class.php (изначально на modExtra) удалил все и написал свой класс:
<?php
class NewEraChanges {
public $object = '';
public $old = '';
public $new = '';
public $date_add = '';
public $date_accept = '';
public $user_add = '';
public $user_accept = '';
public function ChangesArray() {
echo $this->old;
}
}
Пытаюсь вызвать в сниппете, но пишет, что не найден такой класс. Я так понял, что дело в том, что я его не подключил. Как это правильно сделать? Во всех сниппетах его отдельно подключать, или как-то можно 1 раз подключить для всех?<?php
/** @var array $scriptProperties */
/** @var new_era $new_era */
if (!$new_era = $modx->getService('new_era', 'new_era', $modx->getOption('new_era_core_path', null, $modx->getOption('core_path') . 'components/new_era/') . 'model/new_era/', $scriptProperties)) {
return 'Could not load new_era class!';
}
setlocale(LC_ALL, "ru_RU.UTF-8");
include('pChart/class/pData.class.php');
include('pChart/class/pDraw.class.php');
include('pChart/class/pImage.class.php');
// Dataset definition
$a = new NewEraChanges();
$a->old = '11';
$a->ChangesArray();
Заранее благодарен! Комментарии: 6
И что прописать в class… extend ??? чтобы работали $modx->newObject, $modx->set/save и т.д.
Почитав интернет, вроде как понял, что классы надо не в контроллере, а в моделе прописывать. Но тогда возникает вопрос, как подключить класс из модели?
Думаю, что решение в getSevice. Прописал(Имя класса и объекта newEraChanges):
Думаю, что решение в getSevice. Прописал(Имя класса и объекта newEraChanges):
if (!$newEraChanges = $modx->getService('newEraChanges', 'newEraChanges', $modx->getOption('new_era_core_path', null, $modx->getOption('core_path') . 'components/new_era/') . 'model/new_era/', $scriptProperties)) {
return 'Could not load newEraChanges class!';
}
Но не работает
Решил проблему подключив напрямую, но может можно как то более правильно это сделать?
require_once MODX_CORE_PATH.'components/new_era/model/new_era/newerachange.class.php';
Но
$modx->user->get('id')
Не работает
Потому что внутри класса обращаться надо через this.
$this->modx->user->get('id')
А подключать через require_once? Или как-то по иному лучше?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.