Alexey

Alexey

С нами с 02 августа 2015; Место в рейтинге пользователей: #109
27 января 2021, 18:37
+1
Да, Александр, вы правы — фигня получается с файлом, я погорячился. Причем — если товары удалить поочереди, то норм срабатывает. А если кнопкой очистки, то ни в какую… странно
27 января 2021, 18:36
+1
skrinshoter.ru/s/270121/azIIhCFR

вот тут нужно чекнуть событие msOnEmptyCart и сохранить
27 января 2021, 17:58
0
skrinshoter.ru/s/270121/XCmhIbfX

если так товар удалить, то редирект на главную идет
27 января 2021, 17:56
0
Возможно, это мешает?

skrinshoter.ru/s/270121/WoCGrwOB?a

И ещё:

skrinshoter.ru/s/270121/WRgO1cF4?a

тут, конечно, желательно свой домен прописать)))
27 января 2021, 17:41
0
Можно ссылку на сайт?
27 января 2021, 17:40
0
Кеш браузера и админки чистил?
27 января 2021, 16:30
+1
Вначале я тоже насчет плагина подумал. Но потом решил, что если логика написана на js, то менять её лучше там же. В том плане, что если логику понадобится чуть усложнить (ну там, модалку вывести после очистки), то через плагин сходу не реализовать.

А так-то да — в плане новых версий плагин предпочтительнее
27 января 2021, 13:57
0
Даже с переопределением файла?
27 января 2021, 13:13
0
Как-то так?

document.location.href = "https://mySite.ru/";
27 января 2021, 08:51
0
Привет!

github.com/Ibochkarev/miniShop2/blob/68e454bb000ce9182415c0c7719a9212a3042cfd/assets/components/minishop2/js/web/default.js#L287

Переопределяем файл в настройках минишопа, вместо

location.reload();

добавляем свою логику.
26 января 2021, 18:29
0
Выглядит круто, спасибо!

Илья, а есть возможность анонимам писать сообщения?
25 января 2021, 11:34
0
На самом деле, я тоже стараюсь не плодить TV без надобности. Но многие клиенты прямо настаивают, чтобы в отдельной вкладочке все настройки ресурса были, привыкли к доп. полям с категориями.
25 января 2021, 10:48
0
«зачем проверять наличие ресурсов в родителе?»

Ну, в исходном скрипте есть проверка через getCollection, я ХЗ зачем она, спросите автора топика.

«зачем tv»?

А чем не вариант? Есть много реализаций, к примеру, импорт из 1С, где в отдельную тивиху сохраняли ID товара из файла импорта, как уникальное поле — skrinshoter.ru/s/250121/tgpRylds
25 января 2021, 10:04
0
Ошибочка:

if (!in_array($media['id'], $tvs)) {
        //добавляю ресурс
        .......
    }

так должно быть
25 января 2021, 09:39
1
+1
В общем, как-то так:

<?php
$parent_id = 2; // выносим id родителя в переменную
$tv_id = 6; // тут указать id своего tv-поля

// проверяем наличие ресурсов в родителе
$c = $modx->newQuery('modResource');
$c->where(['parent' => $parent_id, 'published' => 1, 'deleted' => 0, 'searchable' => 1]);
$count = $modx->getCount('modResource', $c);

if($count == 0) return;

// вытаскиваем массив значений tv-полей ресурсов указанного родителя
$q = $modx->newQuery('modResource');
$q->leftJoin('modTemplateVarResource', 'TVS', 'modResource.id = TVS.contentid AND TVS.tmplvarid = '.$tv_id);
$q->select('TVS.value');
$q->where(['parent' => $parent_id]);
if ($q->prepare() && $q->stmt->execute()) {
	$tvs = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
}
//убираем пустые элементы массива tv-полей
$tvs = array_diff($tvs, array(''));

foreach($usersMedia['data'] as $media){
    // проверка наличия $media['id'] в массиве $tvs
    if (in_array($media['id'], $tvs)) {
        //добавляю ресурс
        .......
    }
}
//очистку кеша выносим из цикла
$modx->cacheManager->clearCache();

Не проверял! По идее, должно сработать.
25 января 2021, 02:11
0
Пока что предлагаю такой вариант: отдельным циклом пройтись по всем ресурсам родителя, все значения их tv -полей забить в отдельный массив. И потом уже — перебирая основной массив с данными сервиса — проверять через in_array, есть ли в массиве tv-шек значение элемента $media['id']. Соответственно, если нет — создаем новый ресурс.

Обращаю внимание, что массив всех tv-шек извлекаем в цикле ДО начала цикла с данными сервиса.
25 января 2021, 01:42
0
Я сейчас не у компа, а код писать со смартфона — так себе занятие… Завтра постараюсь пример набросать. Если ещё будет актуально)
25 января 2021, 01:11
0
Я понял) Внутренний форыч по существующим ресурсам с проверкой внутри не подходит. Нужно на каждой итерации массива $usersMedia['data'] одним запросом проверить, есть ли такое TV- поле в ресурсах указанного родителя. К примеру, через newQuery составить запрос. И если поля нет, то создавать ресурс.
25 января 2021, 00:52
0
Я бы вначале удалил дубли из самого массива $usersMedia['data'], а результат, который заведомо без дублей, уже перебирал бы форычем, вот тут хороший пример.
23 января 2021, 12:25
+1
Привет! Возможно, из-за этого?

languages:required[]

Вроде бы, у FormIt нет такого валидатора — required[], есть required