Отличная новость! А можно реализовать на ShopModXBox такое — в админке цену товаров указывать как в рублях, так и в иностранной валюте (у одних товаров в рублях, а у других например в евро), а во фронтенде все цены в рублях отображались бы?
Насколько я его понял, он выполняет другие задачи. Не нашел я (правда, глубоко не вдавался) в нем возможности из /каталог/потолки/подвесные потолки/подвесные_потолки_armstrong/название_конкретного_товара сделать /каталог/подвесные_потолки_armstrong/название_конкретного_товара Да и на самом деле то, что предложено в этом топике, делается за 5 минут, и не требует больше никаких действий кроме как выставить/снять галочку. Я не сторонник различных довесков, которые нагружают систему. Да и банальная лень — проще сделать как проще :)
Клево. Переделал код так: <?php class OperationCreateProcessor extends modObjectCreateProcessor {
/*
* Процессор создает "Операции" для управления финансами
* Операция - это расход, приход или перевод со счета на счет
*/
public $classKey = 'Operation';
public $objectType = 'object';
public function beforeSet() {
$amount = $this->getProperty('amount');
switch ($this->getProperty('type')) {
case 'charge':
$this->setProperty('amount', -1 * $amount);
break;
case 'income':
$this->setProperty('amount', 1 * $amount);
break;
case 'transfer':
$this->object->Related = $this->modx->newObject('Operation');
$this->object->Related->fromArray($this->getProperties());
$this->object->Related->set('amount', 1 * $amount);
$this->object->Related->set('account', $this->getProperty('to'));
$this->object->Related->set('relation_type', $this->getProperty('type'));
$this->setProperty('amount', -1 * $amount);
$this->setProperty('account', $this->getProperty('from'));
$this->setProperty('related', $secondOp->id);
$this->setProperty('relation_type', $this->getProperty('type'));
break;
default:
$this->modx->error->addField('type', 'Unknown type');
return false;
}
return true;
}
public function afterSave() {
if ($this->getProperty('type') == 'transfer') {
if ($this->object->Related) {
$this->object->Related->set('related', $this->object->id);
$this->object->Related->save();
}
}
return true;
}
}
return 'OperationCreateProcessor'; И вот здесь опять вопрос. Вот есть строка, где связанные объекты сохраняются второй раз и в них передаются ключи основного объекта для сохранения связи. Однако у меня без блока afterSave у связанного объекта поле related оказывается незаполненным. Вот описание связи: // ... 'Related' => array ( 'class' => 'Operation', 'local' => 'related', 'foreign' => 'id', 'cardinality' => 'one', 'owner' => 'foreign', ), // ... По идее должно работать. Но почему-то не хочет…
посмотрела настройки, там указаны расширения файлов «jpg,jpeg,png,gif,psd,ico,bmp»
Путем лести и шантажа удалось добиться помощи литовцев. С большой вероятностью проблема в вирусе на компе у кого-то из пользователей электронной почты, привязанной к сайту.
Как-нибудь попробую подумать на эту тему. Я изначально подумал про частный случай с двумя уровнями (новости/новость), не учитывая больший уровень вложенности. Тогда однозначно спасибо Александру. Если этого не будет в ядре, когда понадобится, обращусь к статье.
можно отключить вложенные URI, но 1.это не всегда подходит к примеру, есть товар, который лежит в каталоге в /каталог/потолки/подвесные потолки/подвесные_потолки_armstrong/название_конкретного_товара а на выходе должно быть /каталог/подвесные_потолки_armstrong/название_конкретного_товара 2.возникает проблема с уникальностью URI. На самом деле я не навязываю этот способ, просто второй раз сталкиваюсь с такой проблемой, и подумал, вдруг кому еще пригодится :)
Если не секрет, для чего потребовалось изменять ядро ради задачи, решаемой элементарным плагином? Василий, еще раз: то, что вы предлагаете, плагином не решается. Разве еще не ясно? Попробуйте влезть плагином в это изменение, да так, чтобы все дочерние документы обновились как надо: $doc = $modx->getObject('modResource', $id); $doc->set('alias', $new_alias); $doc->save();