UMIhelp

Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: andrey от 26 Марта 2014, 13:27:24

Название: Прошу помощи в проблемах виртуальных копий umi
Отправлено: andrey от 26 Марта 2014, 13:27:24
Ситуация есть каталог. В нем есть категории, некоторые из них имеют виртуальные копии.
Когда я создаю внутри таких обьект, его виртуальные копии создаются и в остальных категориях.
Тех поддержка говорит, что это не так, на что я покопавшись в системы нахожу

Цитировать
Создаем объект, внутри виртуальной копии категории, вызывается:
/classes/modules/catalog/__admin.php add() ->
/classes/modules/baseModuleAdmin.php saveAddedElementData()  в ней ест ьстрока $hierarchy->addElement... ->
/classes/system/subsystems/models/hierarchy/umiHierarchy.php addElement()

Вот в этом файле видем строки на скриншоте,
https://monosnap.com/image/QrJw6sS5ISrj0Z9WjXOIk54xPZhcV2

которые смотрят родителя и получают его вирт.копии после чего заносят в глобальную переменную symlink
после чего в деструкторе
https://monosnap.com/image/k3XHzuSfJv7RyMqvflcXesGhlOYiiS

Вот и создание копий.

Но на это мне вообще отвечают про то что я пишу какой-то кастом (пути файлов ни о чем им не говорят, дааа...)

Вобщем объясните мне в чем я не прав. Ведь копии создаются и я даже могу сказать в каком месте в коде.
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: e.ioffe от 26 Марта 2014, 16:30:21
Вобщем объясните мне в чем я не прав. Ведь копии создаются и я даже могу сказать в каком месте в коде.

Вы абсолютно правы, копии создаются должны создаваться автоматически. Проблема в том, что они создаются - нужно удалить ненужные? Или в чем-то другом?
Название: Re:Прошу помощи в проблемах виртуальных коп&#
Отправлено: ilyar от 26 Марта 2014, 17:03:29
Ситуация есть каталог. В нем есть категории, некоторые из них имеют виртуальные копии.
Когда я создаю внутри таких обьект, его виртуальные копии создаются и в остальных категориях.
Вы абсолютно правы, копии создаются должны создаваться автоматически.

Ребята, поясните что вы имеете ввиду, проверил это поведение на демо (http://demo.umi-cms.ru/), сделал виртуальную копию категории, а потом создал в одной из этих виртуальных копий объект, новый объект был создан только в одной категории. Может быть я не правильно понял и описывается другое?

И такое поведение логично и согласуется с понятием виртуальные копии, я об этом писал в другой теме: Вопрос по виртуальным копиям (http://umihelp.ru/forum/index.php/topic,1780.msg7580.html#msg7580).

По скринам ничего пока ничего не скажу, нет по рукой кода, а скрины вырваны из контекста, кроме того что мне понравился сайт который вы разрабатываете.
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: andrey от 27 Марта 2014, 22:18:05

Ребята, поясните что вы имеете ввиду, проверил это поведение на демо (http://demo.umi-cms.ru/), сделал виртуальную копию категории, а потом создал в одной из этих виртуальных копий объект, новый объект был создан только в одной категории. Может быть я не правильно понял и описывается другое?

Да на демо у меня тоже не создаются, но вот у меня в системе создаются и я нахожу этому документальные подтверждения в коде, что на демо я не могу сказать же.

При этом я подозреваю, что возможно где-то в базе есть какое-нибудь поле которое отвечает за "создавать виртуальные копии во всех категориях".

Эта мистика меня немного гнетёт, потому что у меня именно - создаются, а я как человек прагматичный понимаю, что этот функционал не реализовывал и вообще он мне не нужен!)

Вы абсолютно правы, копии создаются должны создаваться автоматически. Проблема в том, что они создаются - нужно удалить ненужные? Или в чем-то другом?

Да проблема, что автоматически мне не нужны копии объектов во всех копиях родительской категории, совсем. Я пока решил этот момент тем, что закоментировал строку в исходном коде системы, но это плохое решение
Название: Re:Прошу помощи в проблемах виртуальных коп&#
Отправлено: ilyar от 27 Марта 2014, 22:59:04
На демо версия системы 2.9.5 ревизия 22429, посмотрите у себя если тоже, то код один и проблема в конфиге (confog.ini, реестр), возможно есть какой то параметр,  но я не припомню такого, либо забытый кастом.

Если ктома действительно нет на 100%, то очень интересно и хочется на это посмотреть, посмотреть на живой код, есть такие варианты?
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: admin от 28 Марта 2014, 15:07:05
Вобщем объясните мне в чем я не прав. Ведь копии создаются и я даже могу сказать в каком месте в коде.
локалпак, версия 2.9.5, ревизия 22471

Все так, как вы и пишете. При создании товара в разделе #1, который имеет виртуальную копию, получаем  автоматически созданную виртуальную копию товара в виртуальной копии раздела #1

На демо версия системы 2.9.5 ревизия 22429, посмотрите у себя если тоже, то код один и проблема в конфиге (confog.ini, реестр), возможно есть какой то параметр,  но я не припомню такого, либо забытый кастом.

"и проблема в конфиге (confog.ini, реестр)" о чем именно идет речь?
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: andrey от 28 Марта 2014, 17:14:13
локалпак, версия 2.9.5, ревизия 22471

Все так, как вы и пишете. При создании товара в разделе #1, который имеет виртуальную копию, получаем  автоматически созданную виртуальную копию товара в виртуальной копии раздела #1
А в поддержке мне заявляют, что я дурак и это не так. =(

Осталось понять как бы это побороть
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: e.ioffe от 28 Марта 2014, 17:23:49
Как вариант - написать обработчик, подвесить его на systemCreateElement - http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/standartnye_tochki_vyzova/

В нем проверить, подходит ли созданная страница под условия (например, это страница "Объекта каталога"). Если да, то найти все ее копии umiHierarchy::getInstance()->getObjectsInstances($page->getId()) - http://api.docs.umi-cms.ru/spravochnik_po_klassam_yadra_umicms/model_ierarhii/umihierarchy/getobjectinstances/ и удалить эти копии.

Конечно, это костыль, но в любом случае лучше, чем править системный код UMI.
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: ilyar от 28 Марта 2014, 20:44:02
"и проблема в конфиге (confog.ini, реестр)" о чем именно идет речь?
я имел ввиду что если версия у Андрея системы 2.9.5 ревизия 22429 то скорей всего за описываемое поведение регулируется конфигурацией системы, а это  confog.ini или реестр.

Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: ilyar от 28 Марта 2014, 23:00:11
Действительно в версии систем 2.9.5 ревизия 22429 создавая объект в категории которая является виртуальной копией то его виртуальные копии создаются и в остальных категориях.

Поддержка этого не признает вероятно потому что тоже смотрят на демо где это не воспроизводится, в это ситуации есть несколько вариантов развития событий.

Либо продолжать общаться с поддержкой они либо предложат решение (учитывая что это новое поведение вероятно для его отключение есть параметр) скажут ка отключить или скажут это стандартное поведение и попытаются предложить кастом.

Либо как предложил e.ioffe делать обработчик.

Либо в зависимости от того что ответит поддержка, реализовать отключение этого поведения через параметр config.ini внеся изменения в системные файлы и отправить патч разработчикам, они могут его принять потому что не всем нужно подобное поведение виртуальных копий.
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: admin от 29 Марта 2014, 15:43:45
Действительно в версии систем 2.9.5 ревизия 22429 создавая объект в категории которая является виртуальной копией то его виртуальные копии создаются и в остальных категориях.

Поддержка этого не признает вероятно потому что тоже смотрят на демо где это не воспроизводится, в это ситуации есть несколько вариантов развития событий.

Либо .....

добавить нечего)
Название: Re:Прошу помощи в проблемах виртуальных коп&#
Отправлено: ilyar от 29 Марта 2014, 18:04:35
Ситуация есть каталог. В нем есть категории, некоторые из них имеют виртуальные копии.
Когда я создаю внутри таких обьект, его виртуальные копии создаются и в остальных категориях.
Тех поддержка говорит, что это не так, на что я покопавшись в системы нахожу

Провел несколько дополнительных тестов и выяснил что описанное поведение воспроизводится в версиях 2.8.6-20874, 2.9-21905 и 2.9.5-22471, но не воспроизводится на официальном демо версия 2.9.5-22429 и это особенно не понятно, потому что отключающего тригира не обнаружил. Очень вероятно на демо определена директива SMU_PROCESS=true, которая отключает очистку кеша по измененным страницам и создание виртуальных копий новых элементов во всех виртуальных родителях.

Код реализующий это поведение и показанный на скринах, присутствует в версии 2.8.6-20874.
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: andrey от 31 Марта 2014, 13:34:38
Спасибо всем за ваши исследования и ответы!)

Провел несколько дополнительных тестов и выяснил что описанное поведение воспроизводится в версиях 2.8.6-20874, 2.9-21905 и 2.9.5-22471, но не воспроизводится на официальном демо версия 2.9.5-22429 и это особенно не понятно, потому что отключающего тригира не обнаружил. Очень вероятно на демо определена директива SMU_PROCESS=true, которая отключает очистку кеша по измененным страницам и создание виртуальных копий новых элементов во всех виртуальных родителях.

К чему приведет выставление этой директивы (SMU_PROCESS) в true я не очень понял. Т.е. не будет очищаться кэш у страниц которые были изменены в админке и нужно будет делать это руками?
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: ilyar от 31 Марта 2014, 16:48:26
К чему приведет выставление этой директивы (SMU_PROCESS) в true я не очень понял. Т.е. не будет очищаться кэш у страниц которые были изменены в админке и нужно будет делать это руками?

Не проверял, могу предположить это важно при активированном механизме кеширования и если SMU_PROCESS=true то при изменении контента, посетители не увидят изменений до тек пор пока не кеш просрочится.
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: andrey от 07 Апреля 2014, 17:24:49
После некоторого давления тех поддержка тоже согласилась с доводами. Осталось написать кастом, который будет удалять эти копии
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: ilyar от 08 Апреля 2014, 17:16:14
После некоторого давления тех поддержка тоже согласилась с доводами. Осталось написать кастом, который будет удалять эти копии

Добавить отключение этого поведения через конфиг они не рассматривают?
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: andrey от 10 Мая 2014, 17:32:59
Добавить отключение этого поведения через конфиг они не рассматривают?
Я уже не стал вести диалог дальше
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: ilyar от 10 Мая 2014, 21:18:10
Я уже не стал вести диалог дальше

Для отключения этого поведения планируется выпустить патч, сейчас он в Черновике проекта UMI.CMS patchs (http://team.emom.ru/umicms/patchs/tree/master/draft),  если тебе это актуально скажи об этом в Issues.
Название: Re:Прошу помощи в проблемах виртуальных копий umi
Отправлено: andrey от 15 Мая 2014, 14:43:48

Для отключения этого поведения планируется выпустить патч, сейчас он в Черновике проекта UMI.CMS patchs (http://team.emom.ru/umicms/patchs/tree/master/draft),  если тебе это актуально скажи об этом в Issues.

Актуально ещё как, а всё почему..

Потому что реализация отключения такого функционала был сделана через глубокие дебри...

Итак.
1. вешаемся на событие systemCreateElement, режим after
Вызываем
umiHierarchy::getInstance()->getObjectInstances( $objectId );
и обнаруживаем глобальный облом - копий ещё нету   :(
2. Ладно, создаем скрытое поле для всех страниц, куда в systemCreateElement пишем HierarchyId
3. вешаемся на событие sysytemBeginPageEdit где смотрим в это поле и если там не ноль удаляем все копии. И заносим в поле 0 в любом случае.

Таким образом если пользователь жмет просто сохранить, то он вообще ничего не замечает, если жмет "сохранить и" копии появляются, но как только он заходит либо в копию либо в оригинал - копии удаляются. Действует только при первом редактировании, потом можно юзать вирт.копии

Мой костыль расстраивает меня, если кто знает более элегантный подход - буду рад.