Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 147 комментариев

Василий Наумкин
Василий Наумкин
Василий Наумкин
Василий Наумкин
Чего переживать? Создай вопрос на bugs.modx.com
Если есть желание — предложи своё решение, а там пусть думают как лучше сделать.

В конце концов, процессор — это класс, и из него можно запускать методы отдельно — они там все public.
if ($processor = new modResourceDeleteProcessor($this->modx, $this->properties)) {
	$childrenIds = $processor->getChildrenIds();
	$processor->fireBeforeDelete($childrenIds);
	$processor->deleteChildren();
	// и так далее...
}
Алексей Карташов
Алексей Карташов
А с точки зрения организации кода — можно ли запускать процессор из процессора?
Такого в родных процессорах я вроде не встречал и этого могут не принять.
Да и, скорей всего, это будет не правильно — ведь в процессорах на (un)publish/delete в конце чистится кеш, ставятся/снимаются блокировки — всё это и так делается в процессоре на update. Такого точно не примут.
Значит надо будет методы переносить и компоновать.
Василий Наумкин
Василий Наумкин
Это однозначно ошибка.
Проверяется просто: через контекстное меню удалить стартовую страницу нельзя, а через редактирование — можно.

На мой взгляд, из процессора update нужно запускать процессоры publish и delete в нужных случаях, чтобы было всё верно.

Пиши коммит.
Николай
Николай
Алексей Карташов
Алексей Карташов
Понял, спасибо)

p.s. я как в доки экста захожу — у меня глаза округляются — ни хрена не понимаю с какого боку к нему подойти xD
Поэтому, если что-то с экстом делаю, то только по аналогии с уже написанным в самом modx. Дальше не хожу)
Василий Наумкин
Василий Наумкин
<?php
$tvid = 1; // id нужного ТВ параметра
$res = array(); // Сюда забиваем результаты

$q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tvid));
$q->select('contentid,value');
if ($q->prepare() && $q->stmt->execute()) {
	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
		$res[$row['contentid']] = $row['value'];
	}
}
print_r($res);

Получишь массив с id ресурсов и значенями ТВ c id = 1.
Николай
Николай
Может быть далеко не лучшее решение, но у меня сдали нервы =)

$mass = explode(',', $idsx);

$result = array();

for ($i=0; $i<count($mass); $i++) {
$page = $modx->getObject('modResource', $mass[$i]);
array_push($result, $page->getTVValue('goodsx')); }

$result = array_values(array_unique($result));

for ($i = 0; $i<count($result); $i++) {
echo '<option value="'.$result[$i].'">'.$result[$i].' см</option>'; }
Собственно idsx мы передаем сниппетом msProduct