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

Madao
25 января 2021, 12:02
0
3. Сделать этот функционал как отдельную страницу на фронте доступную только админу.
А разве на фронте можно редактировать уже оформленный заказ? Есть ссылка на документацию по этому направлению?
Alexey
25 января 2021, 11:34
0
На самом деле, я тоже стараюсь не плодить TV без надобности. Но многие клиенты прямо настаивают, чтобы в отдельной вкладочке все настройки ресурса были, привыкли к доп. полям с категориями.
Роман
25 января 2021, 11:33
0
Да, именно, у меня такая же ситуация, сторонний сервис как 1C, и приходиться в tv отдельную писать уникальные их id.
Артур Шевченко
25 января 2021, 11:29
+1
Ну вариант, конечно, когда полей много и стандартных не хватает, а тут-то зачем? Ну да ладно, хочется автору через tv пусть будет так))
Артур Шевченко
25 января 2021, 11:22
0
Ну да, по товарам. Если поменять класс будет работать по любым ресурсам.
Роман
25 января 2021, 11:11
0
Как можно не учесть, если внутри админки есть поиск. Ну да ладно. На сколько я понял, ваш поиск работает только по товарам?
Alexey
25 января 2021, 10:48
0
«зачем проверять наличие ресурсов в родителе?»

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

«зачем tv»?

А чем не вариант? Есть много реализаций, к примеру, импорт из 1С, где в отдельную тивиху сохраняли ID товара из файла импорта, как уникальное поле — skrinshoter.ru/s/250121/tgpRylds
Артур Шевченко
25 января 2021, 10:32
0
Может быть вы мне объясните, зачем tv и зачем проверять наличие ресурсов в родителе?
Michael
25 января 2021, 10:20
0
Подскажите как его установить? через Установщик пакетов не находит, а скаженный пакет на гитхабе не могу понять как установить. Подскажите пожалуйста.
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();

Не проверял! По идее, должно сработать.
Артур Шевченко
25 января 2021, 02:12
1
+1
$resource=$modx->getObject ('modResource', array('pagetitle'=>$media['title'], 'parent' => 2));
Индексируется страница, а на странице можно вывести например longtitle.
Alexey
25 января 2021, 02:11
0
Пока что предлагаю такой вариант: отдельным циклом пройтись по всем ресурсам родителя, все значения их tv -полей забить в отдельный массив. И потом уже — перебирая основной массив с данными сервиса — проверять через in_array, есть ли в массиве tv-шек значение элемента $media['id']. Соответственно, если нет — создаем новый ресурс.

Обращаю внимание, что массив всех tv-шек извлекаем в цикле ДО начала цикла с данными сервиса.
Роман
25 января 2021, 02:09
0
Спасибо большое, но не могу id писать в pagetitle, это индексируется поисковиками, не должно быть лишнего в заголовке.

с ключом parent не понял, в modResource можно только id указать, написал так
$resource=$modx->getObject ('modResource', 2, array('pagetitle'=>$media['title']));
Артур Шевченко
25 января 2021, 01:53
0
Там где получаете ресурс в массив добавьте ещё один элемент с ключом parent вот и будет вам ограничение по родителю. А про tv умоляю вас, забудьте, они не для этого, для программной работы с ресурсами используйте поля описанные в модели их обычно хватает, а tv это для дополнительной информации когда прям без вариантов. В вашем случае лучше писать уникальный id в pagetitle.
Роман
25 января 2021, 01:46
0
Это из сервиса другого, такой массив прилетает, там просто поля с данными, я просто его распечатываю foreach и все. Тут проблем нет, эти поля записываю уже в MODX, например [id] => 17866422587162642 записываю в TV idpost при создании ресурса

Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [id] => 17866422587162642
                    [media_url] => 
                )
            [1] => Array
                (
                    [id] => 18073012534211706
                    [media_url] => 
                )
            [2] => Array
                (
                    [id] => 17878486537701170
                    [media_url] => 
                )
        )
)
Alexey
25 января 2021, 01:42
0
Я сейчас не у компа, а код писать со смартфона — так себе занятие… Завтра постараюсь пример набросать. Если ещё будет актуально)