Проблема с наборами параметров в MODX REVO 2.4.0

Назад

Ошибка была замечена в версии MODX REVO 2.4.0, если у вас так же как у меня при сохранении сниппетов, чанков, шаблонов, сбрасываются наборы полей то эта проблема решается очень просто. Дело в том что в новой версии MODX REVO разработчики решили ввести новый процессор updatefromelement.class.php пришедший на замену обычному процессору updatefromelement.php. Именно этот процессор и отвечает за обновление наборов параметров. Исправить эту проблему можно следующим образом.

Открываем файл revolution/core/model/modx/processors/element/propertyset/updatefromelement.class.php и вставляем.

<?php
include_once dirname(__FILE__).'/update.class.php';
/**
 * Saves a property set
 *
 * @package modx
 * @subpackage processors.element.propertyset
 */
class modPropertySetUpdateFromElementProcessor extends modPropertySetUpdateProcessor {
    public $languageTopics = array('propertyset', 'category', 'element');
 
    /**
     * {@inheritdoc}
     * @return bool|null|string
     */
    public function initialize() {
        
        /*
            Определяем был ли передан ID набора параметров.
            Если да, то класс текущего объекта оставляем без изменений modPropertySet
            Если нет, то меняем класс на класс обновляемого элемента.
            То есть текущий элемент $this->object в зависимости от ситуации будет или modPropertySet или modTemplate|modSnippet и т.п.
        */
        
        if(!$id = (int)$this->getProperty($this->primaryKeyField)){
            if(!$elementType = $this->getProperty('elementType')){
                return "Не был указан класс элемента";
            }
            
            // else
            $this->classKey = $elementType;
            $id = (int)$this->getProperty('elementId');
            
            switch($this->classKey){
                
            }
            /*
                Здесь надо бы еще подключить соответствующие словари элементов
            */
        }
        $this->setProperty($this->primaryKeyField, $id);
        
        return parent::initialize();
    }
    /**
     * Return data as array
     * @return mixed
     */
    public function getData() {
        return $this->modx->fromJSON($this->getProperty('data'));
    }
    public function beforeSet() {
        
        /*
            Необходимо установить эти значения, так как родительский процессор их перетирает,
            если не были переданы в параметры
        */
        $this->setDefaultProperties(array(
            "name"  => $this->object->get('name'),
            "category"  => $this->object->get('category'),
        ));
        
        return parent::beforeSet();
    }
    
    /**
     * Convert JSON data to array and unset default properties
     * @return bool
     */
    public function beforeSave() {
        
        $this->object->setProperties($this->getData());
        
        return parent::beforeSave();;
    }
    
    /**
     * Log the property set update from element manager action
     * @return void
     */
    public function logManagerAction() {
        $key = $this->object ? $this->object->get($this->primaryKeyField) :
            $this->getProperty('elementType') . ' ' . $this->getProperty('elementId') .  ' Default';
        $this->modx->logManagerAction($this->objectType.'_update_from_element', $this->classKey, $key);
    }
    
    public function cleanup(){
        return $this->success('');
    }
}
return 'modPropertySetUpdateFromElementProcessor';