MODX REVO API как при добавлении ресурсов из массива пропустить дубликаты?
Приветствую, подскажите пожалуйста, вопрос скорее про php больше чем API modx revo, но только учусь, и не могу понять как пропустить дубли ресурсов при добавлении через API.
Есть некий массив $usersMedia['data'] с полями.
Через API MODX REVO добавляю ресурсы в цикле, все ок, но встречаются одинаковые страницы в массиве.
Я их решил исключить по уникальному ID которое при создании сохраняю в TV поле idpost
Сделал так.
Как исключить добавление уже добавленных страниц? По уникальному IDPOST
Есть некий массив $usersMedia['data'] с полями.
Через API MODX REVO добавляю ресурсы в цикле, все ок, но встречаются одинаковые страницы в массиве.
Я их решил исключить по уникальному ID которое при создании сохраняю в TV поле idpost
Сделал так.
if(!$docs = $modx->getCollection('modResource', array(
'parent' => 2, //родитель где уже есть добавленные ресурсы
'published' => 1,
'deleted' => 0,
'searchable' => 1
))){return;}
<a name="cut"></a>
foreach($usersMedia['data'] as $media){
foreach($docs as $doc){
$issetidpost = $doc->getTVValue('idpost'); //получаю TV с уникальным id записи в уже созданных страницах
if($issetidpost != $media['id']){ //проверяю если в уже существующих страницах в TV поле idpost есть поле новой страницы, то ее не добавляю, пропускаю.
//добавляю ресурс
$rss = $modx->newObject('modResource');
$rss->set('template', 2); // Назначаем ему нужный шаблон
$rss->set('isfolder', 1); // Указываем, что это не контейнер
$rss->set('published', 1); // Неопубликован
$rss->set('createdon', time()); // Время создания
$rss->set('pagetitle', $media['title']); // Заголовок
$rss->set('content', $media['caption']); // Контент
$rss->set('alias', strtolower($media['username'].'-'.$media['id'])); // Псевдоним
$rss->set('parent', 2); // Родительский ресурс
$rss->save();
$nid = $rss->get('id'); //получаем ID созданного ресурса
$idpost = $modx->getObject('modTemplateVar',array('name'=>'idpost')); // Указываем имя нужного TV
$idpost->setValue($nid, $media['idpost']); // Записываем в TV значение
$idpost->save();
unset($rss);
unset($idpost); // Удаляем переменные
$modx->cacheManager->clearCache(); // Кэш тоже чистим
////
}
}
}Но к сожалению моя проверка IDPOST в существующих страницах и сравнения со добавляемой страницей не работает, страницы добавляются повторно. Как исключить добавление уже добавленных страниц? По уникальному IDPOST
Комментарии: 39
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Это все уникальные поля. idpost в этом поле id с другого сервиса, он уникальный так же как и pagetitle. НО pagetitle может и повториться теоретически.
сделал так
Просто в этом поле уникальных номер такой например 18073012534211706
НО я НЕ ЗНАЮ как в массиве через in_array проверить значение в TV поле. Не так силен в php
Вот весь код который нужен
с ключом parent не понял, в modResource можно только id указать, написал так
$resource=$modx->getObject ('modResource', 2, array('pagetitle'=>$media['title']));
Индексируется страница, а на странице можно вывести например longtitle.
Я думаю надо как то смотреть наличие поля в массиве в целом, но не понимаю как tv в массиве посмотреть без цикла :(
Обращаю внимание, что массив всех tv-шек извлекаем в цикле ДО начала цикла с данными сервиса.
Не проверял! По идее, должно сработать.
так должно быть
Ну, в исходном скрипте есть проверка через getCollection, я ХЗ зачем она, спросите автора топика.
«зачем tv»?
А чем не вариант? Есть много реализаций, к примеру, импорт из 1С, где в отдельную тивиху сохраняли ID товара из файла импорта, как уникальное поле — skrinshoter.ru/s/250121/tgpRylds