Alexey

Alexey

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

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

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

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

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

location.reload();

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

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

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

«зачем tv»?

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

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

так должно быть
Alexey
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();

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

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

languages:required[]

Вроде бы, у FormIt нет такого валидатора — required[], есть required
Alexey
22 января 2021, 16:20
0
А если юзер после успешной оплаты закроет вкладку и не перейдет на страницу site.ru/payment-success?

Логичнее было бы повесить такой функционал на страницу сайта, которая принимает POST-данные с сервиса оплаты и валидирует по хешу. Наверняка, такая есть? Там уж точно «левый» юзер даже случайно не зарегается.
Alexey
21 января 2021, 16:05
0
А почему на третьей рекапче что-то должно всплывать? Только это видно — skrinshoter.ru/s/210121/aLpJ7CbL

Не путаете со второй?
Alexey
16 января 2021, 11:54
+1
Привет!

modx.pro/development/8984

Параметр request_method_strict
Alexey
13 января 2021, 08:35
0
Привет!

docs.modx.pro/komponentyi/ms2gallery/primeryi/slajder-bootstrap3

Вот тут пример для слайдера, реализован через pdoResources. Значит, думаю можно прикрутить pdoPage с его режимом ajaxMode=button
Alexey
11 января 2021, 21:41
+1
Вот такой вариант должен сработать (с массивом в where и модификатором split, который разбивает $published_brands по запятой):

{set $published_brands = '!pdoResources' | snippet : [
            'parents'       => 2,
            'depth'         => 0,
            'limit'         => 0,
            'returnIds'     => 1
] | split : ','}

{'!mFilter2' | snippet : [
            'parents'   => $_modx->resource.id,
            'includeTVs' => 'brand',
            'where'     => ["TVbrand.value:IN" => $published_brands],
            'class'     => 'msProduct',
            'element'   => 'msProducts',            
            'sortby'    => 'editedon',
            'sortdir'   => 'DESC',
            'limit'     => 18
            ...
            ]
        }

Почему-то JSON не принимает переменную $published_brands. Я сходу не разобрал, как её корректно подставить…