Роман

Роман

С нами с 06 октября 2013; Место в рейтинге пользователей: #322
Роман
16 февраля 2021, 14:57
0
Благодарю! Консоль, точно, как то работал с этим компонентом.
Роман
25 января 2021, 11:33
0
Да, именно, у меня такая же ситуация, сторонний сервис как 1C, и приходиться в tv отдельную писать уникальные их id.
Роман
25 января 2021, 02:09
0
Спасибо большое, но не могу id писать в pagetitle, это индексируется поисковиками, не должно быть лишнего в заголовке.

с ключом parent не понял, в modResource можно только id указать, написал так
$resource=$modx->getObject ('modResource', 2, array('pagetitle'=>$media['title']));
Роман
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] => 
                )
        )
)
Роман
25 января 2021, 01:39
0
Да, удалил свой второй цикл в основном цикле.
Роман
25 января 2021, 01:39
0
Понял :) так работает, но все таки как при таком варианте ограничить по parent можно? И все таки сравнивать не title a tv.
Роман
25 января 2021, 01:33
0
Вот код сниппета, убрал код API другого ресурса откуда массив заполняется, он не нужен, сам массив для примера оставлю, но тут все хорошо, ресурсы добавляются поля заполняются

Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [id] => 17866422587162642
                    [media_url] => 
                )
            [1] => Array
                (
                    [id] => 18073012534211706
                    [media_url] => 
                )
            [2] => Array
                (
                    [id] => 17878486537701170
                    [media_url] => 
                )
        )
)		

foreach($usersMedia['data'] as $media){
////
    $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['id']);       // Записываем в TV значение
    $idpost->save();
   
    unset($rss); 
    unset($idpost);
   
    $modx->cacheManager->clearCache();      // Кэш тоже чистим
////
 
}
Роман
25 января 2021, 01:26
0
Да да да, я тоже сейчас понимаю что два цикла это неправильно, основной цикл перебор массива полей для новых ресурсов, и в нем я еще раз запускаю цикл, который смотрит все ресурсы и сравнивает поле нового ресурса со старым, и решает если нет ресурса с таким же значением в поле то добавлять. Поэтому думаю и не работает. Одна итерация, с одной записью.

НО я НЕ ЗНАЮ как в массиве через in_array проверить значение в TV поле. Не так силен в php
Роман
25 января 2021, 01:15
0
Да, я тоже подозреваю что в foreach при добавлении я запускаю еще один foreach пробегая по существующим ресурсам это не правильно как то. Можно пример с newQuery?
Я думаю надо как то смотреть наличие поля в массиве в целом, но не понимаю как tv в массиве посмотреть без цикла :(
Роман
25 января 2021, 01:13
0
Но мне не нужно получать ресурс по TV, смысл такой, при создании в цикле, я смотрю в папку parent 2 ВСЕРЕСУРСЫ, смотрю tv idpost, и сравниваю его с новым добавляющимся ресурсом с таким же полем. Если среди ресурсов есть ресурс с таким же значением, пропустить.
Роман
25 января 2021, 01:02
0
А можно вместо title все таки сравнивать в существующих страницах с полем TV idpost а в новых $media['id']?
Просто в этом поле уникальных номер такой например 18073012534211706
Роман
25 января 2021, 00:57
0
Дело в том что дублей как раз в $usersMedia нет, дубли получаются при добавлении в MODX, я вызываю снипет на странице. Если обновлю страницу два раза, страницы добавятся одни и те же. Вот пытаюсь при добавлении пропускать уже добавленные страницы. Сравнивая поле у новых страниц с таким же молем у старых, и что то не получается моя проверка не срабатывает :(
Роман
25 января 2021, 00:44
0
к сожалению не работает, на странице где вызываю сниппет, обновил страницу два раза, добавились страницы одни и те же два раза
сделал так

foreach($usersMedia['data'] as $media){

$resource=$modx->getObject ('modResource', array('pagetitle'=>$media['title']));
if(!$resource){

//Создаём новый ресурс
    $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(); 
////

}
}
Роман
24 января 2021, 23:43
0
Вы все правильно понимаете, да, но как правильно проверить на pagetitle или idpost???
Это все уникальные поля. idpost в этом поле id с другого сервиса, он уникальный так же как и pagetitle. НО pagetitle может и повториться теоретически.
Роман
18 января 2021, 21:07
0
Ок, спасибо, думал есть что то в API для этого, сделал просто на php и порядок.

$url = $value['media_url'];
$path = './images/'.$value['id'].'.jpg';
file_put_contents($path, file_get_contents($url));
Роман
18 января 2021, 20:43
0
не работает, а если проще, есть url картинки например,

upload.wikimedia.org/wikipedia/commons/thumb/9/97/The_Earth_seen_from_Apollo_17.jpg/1200px-The_Earth_seen_from_Apollo_17.jpg

Как его положить в папку на хостинге? С применением MODX API
Роман
18 января 2021, 20:15
0
Подскажите пожалуйста, а что должно быть в переменной $file_content?
И зачем нужен временный каталог? Почему нельзя сразу сохранить куда нужно и все?
Роман
22 мая 2020, 21:23
0
БЛАГОДАРЮ! Почему то этого параметра в описании сниппета нет. Ни в pdoNeighbors ни в pdoResources
Роман
22 мая 2020, 12:33
0
Спасибо, да уже применил, там единственный косяк, может знаете как побороть. Это то что он в цикле показывает следующие записи. Мне нужны только следующие 2 записи, на странице текущей. Когда мы открываем последнюю запись, то он начинает показывать ПЕРВУЮ как следующую. Поделитесь пожалуйста если знаете как этот момент пофиксить?