RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1589578
Accepted
Валерий
Валерий
Asked:2024-08-05 18:34:51 +0000 UTC2024-08-05 18:34:51 +0000 UTC 2024-08-05 18:34:51 +0000 UTC

按属性检查信息块中是否存在现有元素 (Bitrix)

  • 772

朋友们,提前请你们不要把问题看得太严格,我是第一次写剧本。

有2个信息块:

  1. Infoblock (ID=2) 包含商品,我在那里收集了一个包含 WB 文章的数组;
  2. Infoblock (ID=7),我在其中添加评论本身(我通过 API 收集)。

脚本功能:使用 API,我从 WB 接收对某些产品的评论(通过 WB 文章,与产品一起列在信息块中),并将元素添加到包含评论的信息块中。

请告诉我如何确保在执行函数时检查是否存在此评论(即重新运行脚本时,不会添加已经存在的评论),WB 的每个评论都有一个唯一ID(例如:kzgXM4MB65w5GC7j5vjK),基于此元素属性信息块与评论(ID 7)并检查是否存在评论。

预先感谢大家的帮助!

<?php
// подключение функций пролога
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

set_time_limit(60);

CModule::IncludeModule("main"); // CFile
CModule::IncludeModule("iblock"); // CIBlockElement

$PRODUCT_IBLOCK = '2';
$REVIEWS_IBLOCK = '7';

function getRequestResult($request)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $request);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $headers = array();
    $headers[] = 'Content-Type: application/json';
    $headers[] = 'Authorization: ........';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $result = curl_exec($ch);
    if (curl_errno($ch)) { 
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    return $result;
}

function parseAndAdd($artnum, $PRODUCT_IBLOCK) {
    $org_url = 'https://feedbacks-api.wildberries.ru/api/v1/feedbacks?isAnswered=true&nmId='. $artnum .'&take=5000&skip=0';
    $html = getRequestResult($org_url);
    
    $arr = json_decode($html, true);
    $counter = 0;
    
    foreach($arr['data']['feedbacks'] as $value){
    
        //Свойства
        $PROP = array();
        $i = 0;
        if (!empty($value['photoLinks'])) {
            foreach ($value['photoLinks'] as $morePhoto) {
                $arMorePhoto['n'.$i] = array("VALUE"=>CFile::MakeFileArray($morePhoto['fullSize']));
                $i++;
            }
        }
        $PROP['ART_WB'] = $value['productDetails']['nmId'];
        $PROP['RAITING'] = $value['productValuation'];
        $PROP['ISTOCHNIK'] = $value['state'];
        $PROP['PHOTO'] = $arMorePhoto;
        $PROP['REVIEWSID'] = $value['id'];
        
        //$photolinks[] = $value['photoLinks'];
        /*if (!empty($photolinks)) {
            foreach($photolinks as $photo){
                $photo = $photo['fullSize'];
            }
        }*/
        
        $el = new CIBlockElement;
        $fields = [
            'ACTIVE' => "Y",
            'IBLOCK_ID' => 7,
            "IBLOCK_SECTION_ID" => false,
            "NAME" => $value['userName'],
            "PREVIEW_TEXT" => $value['text'],
            "PREVIEW_PICTURE" => $imgUrl ? CFile::MakeFileArray($imgUrl) : CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/local/api/wb/avatar.png"),
            "PROPERTY_VALUES" => $PROP,
            //'ACTIVE_FROM' => $date, // Начало активности
            //'DATE_CREATE' => $date, // Дата создания
        ];
        
        if ($PRODUCT_ID = $el->Add($fields)) {
            echo 'Добавлен отзыв, ID: ' . $PRODUCT_ID . '<br />';
            $counter++;
        } else {
            echo "Error[" . $PRODUCT_ID . "]: " . $el->LAST_ERROR . '<br />';
        }
        
    }
    
    echo 'Отзывы по товару с артикулом '.$artnum . ' добавлены. Количество '. $counter. '<br>';
    
}

//print_r($photo);
//print_r(parseAndAdd(113509876, 6));

$places_ids = []; // Храню артикулы всех товаров, по которым будет забирать отзывы
$arSelect = ["NAME","PROPERTY_ART_WB"];
$arFilter = ["IBLOCK_ID" => $PRODUCT_IBLOCK,"ACTIVE" => "Y",];
$resp = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while($ob = $resp->GetNextElement()) {
    $arFields = $ob->GetFields(); // Получаю значения полей элемента
    $places_ids[] = $arFields['PROPERTY_ART_WB_VALUE']; // Заполняю массив с артикулами
}

foreach ($places_ids as $arrwb) {
    if (!empty($arrwb)) {
        parseAndAdd($arrwb, 7);
    }
}
?>
php
  • 2 2 个回答
  • 45 Views

2 个回答

  • Voted
  1. Виктор Карев
    2024-08-05T20:40:10Z2024-08-05T20:40:10Z

    您不需要通过属性值检查信息块元素是否存在。

    每个信息块元素都有一个专门用于这种情况的特殊 XML_ID 字段。该字段用于存储外部索引。因此,不要将您的 value['id'] 写入 REVIEWSID 属性,而是写入 XML_ID 字段:

    $fields = [
            'ACTIVE' => "Y",
            'IBLOCK_ID' => 7,
            "IBLOCK_SECTION_ID" => false,
            "NAME" => $value['userName'],
            "PREVIEW_TEXT" => $value['text'],
            "PREVIEW_PICTURE" => $imgUrl ? CFile::MakeFileArray($imgUrl) : CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/local/api/wb/avatar.png"),
            "PROPERTY_VALUES" => $PROP,
            "XML_ID" => value['id'],
            //'ACTIVE_FROM' => $date, // Начало активности
            //'DATE_CREATE' => $date, // Дата создания
        ];
    

    嗯,通过字段值检查是否存在已经很简单了。

    • 0
  2. Best Answer
    Валерий
    2024-08-05T21:03:33Z2024-08-05T21:03:33Z

    维克多,再次感谢,但你给了我一个主意。

    也就是说,我使用了符号代码“CODE”,而不是属性和 XML_ID。

    $fields = [
            'ACTIVE' => "Y",
            'IBLOCK_ID' => 7,
            "IBLOCK_SECTION_ID" => false,
            "NAME" => $value['userName'],
            "PREVIEW_TEXT" => $value['text'],
            "PREVIEW_PICTURE" => $imgUrl ? CFile::MakeFileArray($imgUrl) : CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/local/api/wb/avatar.png"),
            "PROPERTY_VALUES" => $PROP,
            "CODE" => value['id'],
            //'ACTIVE_FROM' => $date, // Начало активности
            //'DATE_CREATE' => $date, // Дата создания
        ];
    

    在“字段”选项卡的信息块设置中,在“字符代码”字段中勾选:勾选“必填”和“如果指定了代码,则检查唯一性”。

    因此,当重新启动时,它没有加载。并且出现错误“具有此符号代码的元素已存在。”

    • 0

相关问题

  • mysqli 类的对象无法转换为字符串

  • 您的系统中缺少 ext-http *,您的系统中缺少 ext-mysql_xdevapi *

  • 如何从csv中删除bom?

  • 当我按下 Enter 键时,如何让 PhpStorm 的 Emmet 插件触发,就像 VS Code 一样?

  • 注释在 Symfony5 中不起作用

  • 搜索最近的地理位置点

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5