Почему в /wa-apps/shop/lib/config/data/thumb.php невозможно получить wa('shop')->getRouting()->getRoute('theme') ?

Нужно получить Дополнительные параметры витрины магазина в /wa-apps/shop/lib/config/data/thumb.php.

Как можно их получить в /wa-apps/shop/lib/config/data/thumb.php ?

1 ответ

  • 1
    Алексей Webasyst 4 августа 2020 14:47 #

    Зачем вам этот файл если есть хуки на генерацию эскизов?

    • +1
      Nail Nail 4 августа 2020 14:55 #

      Какие хуки?

      Мне нужно встроить во все генерируемые публичные эскизы некоторые IPTC(EXIF) данные используя iptcembed https://www.php.net/manual/ru/...

      Домен и название магазина добавляются:

      $domain = parse_url(wa()->getConfig()->getRootUrl(true), PHP_URL_HOST);
      $shopname = wa('shop')->getConfig()->getGeneralSettings('name');
      $copyright = wa('shop')->getRouting()->getRoute('copyright');

      А вот copyright - который прописан в Дополнительных параметрах витрины магазина - не добавляется.

      • +1
        Алексей Алексей Webasyst 4 августа 2020 15:12 #

        То что относится к изображениям

        • +1
          Nail Nail 4 августа 2020 15:26 #

          Спс. Похоже, то, что нужно...

          Если сработает как надо - отмечу как решение.

          ps: совсем забыл про хуки :)

        • +1
          Nail Nail 7 августа 2020 13:28 #

          Почему-то iptcembed возвращает false при попытке обработать любое jpg изображение внутри конструкции:

          public function imageThumb(waImage $image) {
          
                  $request_file = wa('shop')->getConfig()->getRequestUrl(true, true);
                  $request_file = preg_replace("@^thumb\.php(/products)?/?@", '', $request_file);
                  $public_path = wa()->getDataPath('products/', true, 'shop');
                  $thumb_path = $public_path.$request_file;
          
                  $domain = parse_url(wa('shop')->getConfig()->getRootUrl(true), PHP_URL_HOST);
                  $copyright = wa('shop')->getRouting()->getRoute('copyright');
                  $shopname = wa('shop')->getConfig()->getGeneralSettings('name');
                  $file_info = pathinfo($thumb_path);
          
                  if ($file_info['extension'] == 'jpg' || $file_info['extension'] == 'jpeg') {
                      $utf8seq = chr(0x1b).chr(0x25).chr(0x47);
                      $length = strlen($utf8seq);
                      $data = chr(0x1C).chr(1).chr('090').chr($length >> 8).chr($length & 0xFF).$utf8seq;
                      $iptc = array(
                          '2#080' => $shopname,
                          '2#110' => $domain,
                          '2#115' => $domain,
                          '2#116' => $copyright,
                      );
                      foreach($iptc as $tag => $string) {
                          $tag = substr($tag, 2);
                          $data .= $this->iptc_make_tag(2, $tag, $string);
                      }
                      $content = iptcembed($data, $thumb_path);
                      $fp = fopen($thumb_path, "wb");
                      fwrite($fp, $content);
                      fclose($fp);
                  }
          
                  waLog::dump($content, 'shop/myplugin/image-thumb.log');
              }
              public function iptc_make_tag($rec, $data, $value) {
                  $length = strlen($value);
                  $retval = chr(0x1C).chr($rec).chr($data);
                  if ($length < 0x8000) {
                      $retval .= chr($length >> 8).chr($length & 0xFF);
                  } else {
                      $retval .= chr(0x80).chr(0x04).chr(($length >> 24) & 0xFF).chr(($length >> 16) & 0xFF).chr(($length >> 8) & 0xFF).chr($length & 0xFF);
                  }
                  return $retval.$value;
              }

          То есть $content всегда равен false.

          А вот внутри thumb.php все работает как надо.

          $data и $thumb_path в логах выдают те же данные - что и при работе iptcembed в thumb.php.

          Что делаю не так ? )

          • +1
            Nail Nail 7 августа 2020 18:34 #

            Нашел в логах ошибку:

            iptcembed()  Unable to open..... 

            Если в $thumb_path подставлять $image->file - то $content уже нормальный(изображение с заполненными данными iptc) - но в итоге в в public сохраняется все-равно без внесенных изменений.

            Получается при вызове хука image_thumb - запрашиваемый эскиз блокируется на чтение-запись для определённых функций или в чем проблема?

            Каким образом надо действовать - чтобы iptcembed записал данные в созданный эскиз?

        • +1
          Nail Nail 7 августа 2020 15:13 #

          Почему после срабатывания хука image_thumb в $image ссылка на оригинальное изображение, а не на сам запрашиваемый эскиз:

          2020-08-07 15:05:53 178.176.166.153
          dumped from /home/test/www/site.ru/wa-apps/shop/plugins/myplugin/lib/shop Myplugin.plugin.php line #227:
          waImageImagick object {
            �*�im => Imagick object {}
            width => 1108
            height => 739
            file => '/home/test/www/site.ru/wa-data/protected/shop/products/16/09/916/images/125.jpg'
            type => 2
          }

          ?

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите