Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - andrey

Страницы: [1] 2 3
1
Разобрались с тех.поддержкой, нужно стартануть сессию, почему то в примерах этого нет

@session_start();

header("Content-type: text/html; charset=utf-8");
include realpath("standalone.php");

$user_id = permissionsCollection::getInstance()->getUserId();
var_dump($user_id);

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

Никто не сталкивался?

3
Пытаюсь получить id пользователя через отдельный скрипт, код стандартный из доков
 header("Content-type: text/html; charset=utf-8");
include realpath("standalone.php");

// Получаем id текущего пользователя, если Вы передадите id Гостя, то ничего не увидите, т.к. Гость не имеет группы.
$user_id = permissionsCollection::getInstance()->getUserId();
var_dump($user_id);
Но всегда возвращает id 13 - гость, а я авторизован в админке, что делать не пойму

4
Либо мне всегда везло, либо не во всех случаях apc ломает фильтр. И кстати, а как именно у вас ломается фильтр при включенном apc?
Просто всегда состояние "до фильтрации"
Меня тоже это смутило, поэтому я задал вопрос в техподдержку. Вообще у меня используются кастомные функции для генерации фильтров и вывода материала, но на основе родных. Там ничего на этот счет найдено не было. Но стандартные у меня тоже не работают
Если у вас работают, то опять же ахтунг техподдержке. Они ничего дельного сказать не могли - так и должно


За то время, что работаю с UMI, заметил одну очень интересную тенденцию - если сайт на UMI работает долго - значит, что используются неоптимальные шаблоны и макросы. Мое "лекарство" - оптимизация шаблонов (если tpl, то перевести на xslt, если xslt - проверить, насколько они "чистые"), оптимизация кастомов (видел решения, в которых selector запускался внутри цикла на 1000 итераций и программист очень долго уверял меня в том, что так и должно быть) + настройка избирательного кеширования с помощью xsltCache.

Если нужно помочь - пишите в ЛС.
Да, я ощущаю как я нагрешил в некоторых местах) Вызовов в цикле, конечно, нет, но все же) Но это всё из-за заказчика, который меняет свои требования и добавляет новые хотелки плюс моей некой неосведомленности вначале.

Сейчас я бы не отказался от советов как все же начать кэшировать. Может что-то в этом духе? http://wiki.umisoft.ru/%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%B4%D0%BB%D1%8F_%D0%BA%D1%8D%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_xml-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_XSLT

5
Добрый день,
У меня включено кэширование apc для xslt-шаблонизатора

И как выясняется при нем не работают фильтры каталога. Техподдержка предложила лишь отключить кэш для этих запросов. Ладно отключить кэш для генерации самого фильтра не такая уж проблема, но результаты выборки - это самые тяжелые запросы на сайте и как раз ради них кэш включен.

Кто как выходил из этой ситуации. Пожалуйста, поделитесь опытом

6
Хотелось бы уточнить, настроил кеширование udata. Но мне нужно, чтобы результат определенного вызова не кешировался. Пробовал установить ?expire=0 не помогло. А с ?expire=-1 вроде работает.

Это верное решение?

7

Для отключения этого поведения планируется выпустить патч, сейчас он в Черновике проекта UMI.CMS patchs,  если тебе это актуально скажи об этом в Issues.

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

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

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

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

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

8
Добавить отключение этого поведения через конфиг они не рассматривают?
Я уже не стал вести диалог дальше

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

10
Спасибо всем за ваши исследования и ответы!)

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

К чему приведет выставление этой директивы (SMU_PROCESS) в true я не очень понял. Т.е. не будет очищаться кэш у страниц которые были изменены в админке и нужно будет делать это руками?

11
локалпак, версия 2.9.5, ревизия 22471

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

Осталось понять как бы это побороть

12

Ребята, поясните что вы имеете ввиду, проверил это поведение на демо, сделал виртуальную копию категории, а потом создал в одной из этих виртуальных копий объект, новый объект был создан только в одной категории. Может быть я не правильно понял и описывается другое?

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

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

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

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

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

13
Ситуация есть каталог. В нем есть категории, некоторые из них имеют виртуальные копии.
Когда я создаю внутри таких обьект, его виртуальные копии создаются и в остальных категориях.
Тех поддержка говорит, что это не так, на что я покопавшись в системы нахожу

Цитировать
Создаем объект, внутри виртуальной копии категории, вызывается:
/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

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

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

Вобщем объясните мне в чем я не прав. Ведь копии создаются и я даже могу сказать в каком месте в коде.

14
Есть пару вопросов, так как я не вполне уверен, что правильно понял.

1. Если вносить изменения в любые поля оригинала, изменения отобразятся в копии?

2. Если вносить изменения в копию изменения отобразятся в оригинале?

3. Почему из оригинала я не могу удалить копию? (кнопку крестик не работает)

4. Если какие то проблемы при широком использовании копий?

5. Если мне нужно сделать копию раздела каталога. Я сначала делаю копию раздела и потом копию всех его обьектов?

15
Макросы UMI.CMS / Re:По umiField получить значения
« : 24 Февраля 2014, 14:32:41 »
При помощи тех.поддержки набросал такое решение:

// Максимальное и минимальное значения поля, приводится к int
public function fieldMinMax( $fieldId, $object_type_id )
{
$field = umiFieldsCollection::getInstance()->getField( $fieldId );
$field_name = $field->getName();


//Получаем все страницы с полученными типами
$sel = new selector( 'pages' );
$sel->types( 'object-type' )->id( $object_type_id );


//Находим минимальное и максимальное значение
$max = 0;
$min = 10000000;
foreach ( $sel as $page )
{
$val = intval( $page->getValue( $field_name ) );
if ( $val > $max )
{
$max = $val;
}

if ( $val < $min )
{
$min = $val;
}
}

return array(
'min' => $min,
'max' => $max
);
}

Страницы: [1] 2 3