RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-593110

Валерий's questions

Martin Hope
Валерий
Asked: 2024-08-05 18:34:51 +0000 UTC

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

  • 5

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

有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 个回答
  • 45 Views
Martin Hope
Валерий
Asked: 2024-05-23 17:02:22 +0000 UTC

将图像加载到 png 时: imagesx(): 参数 #1 ($image) 必须是 GdImage 类型,给定 bool

  • 5

我需要你的帮助。init.php 中有一个函数,可以在创建和更新产品时为图像添加水印。你以jpg格式上传,一切都很好,但它不想以png格式加载。

初始化文件

class SrWatermark
{
   static function OnBeforeIBlockElementAdd (&$arFields)
   {
      if (strlen($arFields["DETAIL_PICTURE"]["tmp_name"]) > 0 && $arFields["PROPERTY_VALUES"][71][0]["VALUE"] != 79)
      {
         $filepath = $arFields["DETAIL_PICTURE"]["tmp_name"];
         $result = tempnam("/tmp", "FOO").".jpg";

         $font = $_SERVER['DOCUMENT_ROOT']."/arial.ttf";

         $watermark = new watermark1();
         $img = imagecreatefromjpeg($filepath);
         $im = $watermark->create_watermark($img, "www.profinventar.ru", $font); ('/var/www/u2487576/data/www/profinventar.ru/bitrix/php_interface/init.php:205' - эта ошибка ругается на эту строку)
         $rez = imagejpeg($im, $result, 100);
         if ($rez)
         $arFields["DETAIL_PICTURE"]["tmp_name"] = $result;
      }

     // MORE_PHOTO resize and watermark

     foreach($arFields["PROPERTY_VALUES"]["6"] as $pid=>$arProperty)
     {
        if (strlen($arProperty["VALUE"]["tmp_name"]) > 0)
        {
          $filepath = $arProperty["VALUE"]["tmp_name"];
          // resize
          $imageMaxWidth = 800;
          $imageMaxHeight = 800;
          $imsize = getimagesize($filepath);
          if($imsize[0] > $imageMaxWidth or $imsize[1] > $imageMaxHeight)
          {
            $arFile = CFile::MakeFileArray($filepath);
            $arNewFile = CIBlock::ResizePicture($arFile, array(
               "WIDTH" => $imageMaxWidth,
               "HEIGHT" => $imageMaxHeight,
               "METHOD" => "resample",
            ));
          }
          // watermark
          $result = tempnam("/tmp", "FOO").".jpg";
          $font = $_SERVER['DOCUMENT_ROOT']."/arial.ttf";

          $watermark = new watermark1();
          $img = imagecreatefromjpeg($filepath);
          $im = $watermark->create_watermark($img, "www.profinventar.ru", $font);
          $rez = imagejpeg($im, $result, 100);
             AddMessage2Log($rez,"");
          if ($rez)
          $arFields["PROPERTY_VALUES"]["6"][$pid]["VALUE"]["tmp_name"] = $result;
        }
     }
   }

   static function OnBeforeIBlockElementUpdate (&$arFields)
   {
      //AddMessage2Log("<br/><br/><pre>".print_r($arFields,true)."</pre><br/><br/>", "test");
      
      if (strlen($arFields["DETAIL_PICTURE"]["tmp_name"]) > 0 && $arFields["PROPERTY_VALUES"][71][0]["VALUE"] != 79)
      {
         $filepath = $arFields["DETAIL_PICTURE"]["tmp_name"];
         $result = tempnam("/tmp", "FOO").".jpg";
         $font = $_SERVER['DOCUMENT_ROOT']."/arial.ttf";

         $watermark = new watermark1();
         $img = imagecreatefromjpeg($filepath);
         $im = $watermark->create_watermark($img, "www.profinventar.ru", $font);
         $rez = imagejpeg($im, $result, 100);

         if ($rez)
         $arFields["DETAIL_PICTURE"]["tmp_name"] = $result;
      }

     // MORE_PHOTO resize and watermark

     foreach($arFields["PROPERTY_VALUES"]["6"] as $pid=>$arProperty)
     {
        if (strlen($arProperty["VALUE"]["tmp_name"]) > 0)
        {
          $filepath = $arProperty["VALUE"]["tmp_name"];
          // resize
          $imageMaxWidth = 800;
          $imageMaxHeight = 800;
          $imsize = getimagesize($filepath);
          if($imsize[0] > $imageMaxWidth or $imsize[1] > $imageMaxHeight)
          {
            $arFile = CFile::MakeFileArray($filepath);
            $arNewFile = CIBlock::ResizePicture($arFile, array(
               "WIDTH" => $imageMaxWidth,
               "HEIGHT" => $imageMaxHeight,
               "METHOD" => "resample",
            ));
          }
          // watermark
          $result = tempnam("/tmp", "FOO").".jpg";
          $font = $_SERVER['DOCUMENT_ROOT']."/arial.ttf";

          $watermark = new watermark1();
          $img = imagecreatefromjpeg($filepath);
          $im = $watermark->create_watermark($img, "www.profinventar.ru", $font);
          $rez = imagejpeg($im, $result, 100);
             AddMessage2Log($rez,"");
          if ($rez)
          $arFields["PROPERTY_VALUES"]["6"][$pid]["VALUE"]["tmp_name"] = $result;
        }
     }
   }
}

出现以下错误

 [TypeError] 
imagesx(): Argument #1 ($image) must be of type GdImage, bool given (0)
/var/www/u2487576/data/www/profinventar.ru/bitrix/php_interface/lib/watermark.php:6
#0: imagesx(boolean)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/php_interface/lib/watermark.php:6
#1: watermark1->create_watermark(boolean, string, string)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/php_interface/init.php:205
#2: SrWatermark::OnBeforeIBlockElementAdd(array)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/modules/main/tools.php:4734
#3: ExecuteModuleEventEx(array, array)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/modules/iblock/classes/general/iblockelement.php:5202
#4: CAllIBlockElement->CheckFields(array)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/modules/iblock/classes/general/iblockelement.php:3970
#5: CAllIBlockElement->Add(array, boolean, boolean, boolean)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/modules/iblock/admin/iblock_element_edit.php:1193
#6: require(string)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/admin/iblock_element_edit.php:1

水印.php

class watermark1   
{   
   function create_watermark($main_img_obj, $text, $font, $r = 128, $g = 128, $b = 128, $alpha_level = 100 )   
   {   
      $width = imagesx($main_img_obj);   
      $height = imagesy($main_img_obj);   
      $angle =  -rad2deg(atan2((-$height),($width)));   

      $text = " ".$text." ";   
      
      $c = imagecolorallocatealpha($main_img_obj, $r, $g, $b, $alpha_level);   

      $size = ( ($width+$height) / 2 ) * 2 / strlen($text) - 2; 
      $box  = imagettfbbox ($size, $angle, $font, $text );   

      $x = $width/2 - abs($box[4] - $box[0])/2;   
      $y = $height/2 + abs($box[5] - $box[1])/2;   
      
      imagettftext($main_img_obj,$size ,$angle, $x, $y, $c, $font, $text);   
      return $main_img_obj;   
   }   
}
битрикс
  • 1 个回答
  • 11 Views

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