modx процессоры.

Здравствуйте. Второй день я пытаюсь разобраться в технологии создания процессоров. Помогите мне пожалуйста разобраться.
Верно ли, что чтобы использовать свой самописный процессор, мне нужно обязательно написать компонент? Я могу написать свой процессор, который будет возвращать обычное «Hallo world», кинуть его в папку со всеми процессорами и запускать через
$response = $modx->runProcessor('my/test', $fields);
Я перерыл всю инфу что нашел, но так и не смог разобраться как создать свой простейший процессор, который будет возвращать hallo world…
<?php
class modTestProcessor extends modProcessor {
    public function getEcho() {
		$res = 'Hallo World!';
        return $res;
    }
}
return 'modTestProcessor';
Николай
17 сентября 2014, 16:03
modx.pro
2
1 892
0

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

Илья Уткин
17 сентября 2014, 21:42
+2
Надо, чтобы в процессоре была функция process()
https://github.com/bezumkin/modExtra/blob/master/core/components/modextra/processors/mgr/items/remove.class.php
<?php
/**
 * Remove an Items
 */
class modExtraItemsRemoveProcessor extends modProcessor {
        public $checkRemovePermission = true;
	public $objectType = 'modExtraItem';
	public $classKey = 'modExtraItem';
	public $languageTopics = array('modextra');

	public function process() {
          foreach (explode(',',$this->getProperty('items')) as $id) {
            $item = $this->modx->getObject($this->classKey, $id);
            $item->remove();
          }
          return $this->success();
	}
}
return 'modExtraItemsRemoveProcessor';

У тебя будет, наверное, так:
<?php
class modTestProcessor extends modProcessor {
    public function process() {
	$res = 'Hallo World!';
        return $res;
    }
}
return 'modTestProcessor';
    Николай
    17 сентября 2014, 22:34
    0
    Спасибо. А вызывать процессор из сниппета так?
    <?php
    $otherProps = array(
        'processors_path' => $modx->getOption('core_path') . '/model/modx/processors/my/'
    );
    $fields = '';
    
    $response = $modx->runProcessor('my/test', $fields);
    if ($response->isError()) {
    return $modx->error->failure($response->getMessage());
    }
    print_r($response);
    Сейчас ругается:
    Fatal error: Cannot unset string offsets in /var/www/scripts/data/www/scripts.fvds.ru/core/model/modx/modprocessor.class.php on line 57
    В файле это строчка
    unset($properties['HTTP_MODAUTH']);
    В функции
    public function setProperties($properties) {
            unset($properties['HTTP_MODAUTH']);
            $this->properties = array_merge($this->properties,$properties);
        }
      Илья Уткин
      18 сентября 2014, 10:41
      0
      Если процессор лежит в папке /model/modx/processors/my/ и называется test.class.php, то $otherProps не нужен (тем более, в коде он дальше нигде и не используется).

      Чтобы использовать $response->isError(), надо, чтобы процессор возвращал $this->success($res) или $this->failure();

      И тогда в конце надо выводить не $response, а $response->response или $response->object.

      В остальном, вроде, все верно. Может, кто еще что подскажет, но проблема может быть в хостинге. Попробуйте то же самое сделать на бесплатном аккаунте http://modxcloud.com/ или https://h.simpledream.ru/
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3