Всего 125 668 комментариев

Илья Александрович
29 января 2021, 19:46
0
в первой версии msPromoCode есть такое
Кейсы — Именные промокоды для пользователя

во второй версии это есть?
Артур Шевченко
29 января 2021, 18:39
0
Спасибо всем участвующим. Будем считать вопрос решённым.
Артем
29 января 2021, 18:21
0
Зачем высчитывать все эти расхождения, если можно просто заново проиндексировать массив на основе нового значения?
Я предполагаю, что в этом массиве у тебя собраны сразу все необходимые id:
<?php

$array = [246 => 1, 267 => 2, 296 => 3, 308 => 4, 309 => 5];
$affectedResource = 308;
$newIndex = 2;

$array[$affectedResource] = $newIndex - 0.5;
asort($array);
$index = 1; // индексирование будет начато с единицы
foreach ($array as $id => &$oldIndex) {
    $oldIndex = $index;
    $index++;
}

return $array;

Если тебе не принципиально, чтобы первый индекс был единицой, то можно еще проще:
<?php

...
asort($array);
return array_flip(array_keys($array));
Артур Шевченко
29 января 2021, 16:01
0
Ну суть та же, только я хотел обойтись без промежуточного массива. По факту
$resources = $modx->getIterator('msProduct', array('parent' => $resource->get('parent')));
Массив для пункта 1 можно вытащить только перебрав $resources. И да, с массивом работать удобнее, но п.3 это проблема. Давайте псевдокод напишу
$oldValue // старое значение позиции текущего ресурса
$newValue // новое значение
$resources // массив со всеми значениями [id => menuindex]
//По идее надо перебрать $resources предварительно сравнив $oldValue и $newValue
if($newValue < $oldValue){
foreach($resources as $r){
//надо прибавить  1 ко всем menuindex которые соответствуют  $newValue <= menuindex < $oldValue
}
else{
//надо отнять  1 ото всех menuindex которые соответствуют  $newValue > menuindex >= $oldValue
}
}
Но получается что если $newValue < $oldValue, то последнее значение не меняется.
Alexey
29 января 2021, 15:25
0
Если честно, я не сильно вчитывался в код, приведенный в условии. Но я бы в принципе по-другому пути пошел.

  1. Вначале вытащил бы в отдельный массив данные нужных ресурсов (ключ-id, значение-menuindex)
  2. Сохранил бы в отдельные переменные новый menuindex и его id (в плагине он и так доступен)
  3. И спокойно бы раскурочил массив из п.1 так как нужно — не в пример нагляднее, чем перебирать ресурсы. Есть методы сортировки, array_flip и так далее..
  4. Полученный в результате «пыток» в п.3 массив должен содержать: ключ — id ресурса, значение — новое значение menuindex, которое соответствует условиям
  5. Сохраняем menuindex из массива в ресурсы, id которых в ключе

Тут всё наглядно, при работе с массивом можно каждый шаг дебажить и тестить. А так с наскока — перебирая ресурсы — мне, к примеру, тяжеловато сообразить
blackseabreathe
29 января 2021, 13:19
0
tryUpload — вообще выглядит так tryUpload($file), а также попытался передать аргумент $modx tryUpload($file, $modx) — та же ошибка
blackseabreathe
29 января 2021, 13:17
0
$image = $_SERVER['DOCUMENT_ROOT'] . '/user_upload/' . $fileName;
— так тоже пытался сделать, установил pthumb. В логах php ошибка

PHP Fatal error: Uncaught Error: Call to a member function runSnippet() on null in /home/…/public_html/theme/RedirectModxApiAjax/RedirectModxApiAjax.php:225\nStack trace:\n#0 /home/…public_html/theme/RedirectModxApiAjax/RedirectModxApiAjax.php(248): tryUpload(Array)\n#1 {main}\n thrown in /home/…/public_html/theme/RedirectModxApiAjax/RedirectModxApiAjax.php on line 225, referer https://site.com/sign-up?
tryUpload() ф-ия, где я аытаюсь запустить runSnippet. runSnippet как раз строка №225

Еще в начале ф-ии tryUpload() написал
global $modx;
на всякий случай.

Как можно проверить инициализировался ли и работает ли $modx object?
Роман
29 января 2021, 11:41
0
Попробуйте в опциях оставить только длину и ширину. Обязательно укажите локальную ссылку:
$image = $_SERVER['DOCUMENT_ROOT'] . '/user_upload/' . $fileName;
А так у вас серверная ошибка, смотрите логи, на крайняк попробуйте установить pThumb и попробуйте через него генерировать изображения.
Илья Уткин
29 января 2021, 11:25
0
Да, треды сами ни к чему не привязаны, можно их создавать отдельно и прикреплять к ним любых пользователей.
Артур Шевченко
29 января 2021, 11:00
0
И вообще TV на самая большая проблема в этой задаче, самая большая проблема это я, потому что я не понимаю что не так, в голове и на бумаге логика безупречна, а код работает не правильно.
Артур Шевченко
29 января 2021, 10:58
0
Сорри, слово before не заметил)))
Артур Шевченко
29 января 2021, 10:50
0
Сразу скажу, с PayAndSee не работал, но он тут и не причём, вам нужно к информации о пользователе добавлять id оплаченной конфигурации, после чего уже при выводе проверять какая конфигурация(и) оплачена(ы), те и показывать. Логика простая, вот реализация у неподготовленного человека может вызвать проблемы. В самом простом варианте для записи данных о купленных модификациях я бы повесил плагин на создание заказа или на смену статуса, саму запись делал бы в поле extended объекта modUser, ну и для вывоза написал бы сниппет, который бы проверял что куплено и в соответствии с этим показывал только доступные файлы. Я бы действовал так. Думаю это не лучшее из возможных решений, но точно одно из простых.
Alexey
29 января 2021, 10:44
0
>>>У меня не далее как вчера сохранялась.
Серьезно? На событие OnBeforeDocFormSave? skrinshoter.ru/s/290121/E2iWCCxq

>>>т.е. в плагин приходит уже новое значение.
В плагин на событие OnBeforeDocFormSave приходит новые значение, а вы заметили, откуда я извлекаю старое? Пытались мой пример протестить?
Артур Шевченко
29 января 2021, 10:39
0
Почему вы считаете, что TV не сохраняется из плагина? У меня не далее как вчера сохранялась. И второй момент, почему вы считаете, что TV не нужно, ведь значение menuidex сохраняемого ресурса меняет не плагин, а пользователь, т.е. в плагин приходит уже новое значение.
Alexey
29 января 2021, 09:44
0
Если плагин повесить на OnBeforeDocFormSave, то можно обойтись без промежуточного TV

<?php
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeDocFormSave':
        $menuindex = $modx->getObject('modResource', $id)->get('menuindex');
        $new_menuindex = strip_tags($_POST['menuindex']);
        
        $modx->log(1, print_r($menuindex, 1));
        $modx->log(1, print_r($new_menuindex, 1));
        
        break;
}

В этом случае нужно помнить, что не срабатывает сохранение TV-поля из плагина. Но оно в данном случае нам и не нужно.
Сергей
29 января 2021, 09:39
0
Ясно. А такая задача: создавать несколько тредов с одним и тем же, только под разными темами как форум. Возможно?
Щукин Дмитрий
29 января 2021, 05:28
0
Тоже столкнулся с этим, после обновления на minishop2 версий 2.7 — 2.8, ошибка выходит на страницах каталога с mSearch2
Саша
28 января 2021, 22:44
0
Здравствуйте.
Возникла ошибка которую никак не могу решить.
Не генерирует pdf у товаров где в название слеш, например 4sto.by/katalog/legkovyie/podemniki/2-x-stoechnyie/avtopodemnik-dvuxstoechnyij-rossvik-v2-5.5l-g/p-5.5t,-380v/
Что это может быть?
Александр Туниеков
28 января 2021, 22:02
0
Ну вот… а я поисковый запрос не смог сформулировать и не нашел. Так бы не парился с сервисом и сделал выложил бы компонент еще полгода назад. Но по любому счас на их сервис добавить настройку надо будет. Свой сервис смысла держать вроде нет. Оплаченных полгода проработает и если клиенты на него не пойдут, то отключу его нафиг :-).