Воеводский Михаил

Воеводский Михаил

Был в сети 30 марта 2026, 14:44
Заказы не принимаю
<?php

switch($modx->event->name) {
	case 'onDocFormSave':
		if ($parent = $resource->getOne('Parent')) {
			if ($someProduct = $modx->getObject('msProduct',array('parent' => $parent->get('parent'),'alias' => $parent->get('alias'),'class_key' => 'msProduct'))) {
				if ($vendor	 = $someProduct->getOne('Vendor')) {
					$resource->addOne($vendor,'Vendor');
					$resource->save();
				}
			}
		}
	break;
}
Код не запускал и не проверял.
Сделать можно, но если в адресе указана 15 страница — загружать все 15? А если с 15 страницы перейти на 16 — придется отмотать содержимое всех 15 страниц?

Если «да» на оба вопроса, то рекомендую не издеваться над пользователями.
Если Вы уверены, что это обязательно — подскажу. Но это очень плохая идея, так как Tickets не предполагает подобного расширения, придется лезть в ядро компонента и лишиться возможности обновлений.

Лучше использовать properties от стандартного объекта modUserProfile. Тем более, что TicketAuthor имеет с ним связь:
$profile = $ticketAuthor->getOne('UserProfile');
Вопрос чересчур абстрактный.
С коллекциями я не работал, про них ничего не скажу.

Тикеты — прекрасно работают в разных контекстах, очень хорошо дружат с Babel. minishop2 тоже должен хорошо работать с разными контекстами, но это получается но совсем корректно с точки зрения учета — из-за разных языков надо создавать разные товары, а тогда по отчетам будет казаться, что проданы 2 переведенных товара (или более) вместо одного реального.
Когда я дописывал заключительную часть вопроса, понял уже, что достаточно переименовать собственный процессор, после чего настанет вселенское счастье.

Подгрузка процессоров изменения — очень интересный прием. Возможно, возьму на вооружение. Спасибо за подсказку.
Эксперименты продолжаются.
Сделал отдельный процессор
<?php
exit('bla');
require_once MODX_CORE_PATH . 'model/modx/processors/security/user/update.class.php';
class chwUserUpdatetmpProcessor extends modUserUpdateProcessor {
	public $classKey = 'chWorker';
	public $permission = '';

    public function checkPermissions() {
        return true;
    }

    public function run() {
        return true;
    }
}
return 'chwUserUpdatetmpProcessor';
Работа всего MODX прекращается на строке exit('bla');, как и положено. Но если ее убрать, то получаю сообщение permission_denied, что явно говорит о выполнении процессора modUserUpdateProcessor и игнорировании chwUserUpdatetmpProcessor.

Что я делаю не так, почему именно обновление пользователя так криво работает?