Как вставить картинку (из Excel файла) в балун?

Рейтинг: 0Ответов: 0Опубликовано: 27.08.2023

Есть сайт компании, на нем Яндекс карта, на которой отмечены торговые точки. При нажатии на точку раскрывается балун, который содержит информацию о торговой точке (текстового формата). Появилась задача добавить в балун логотип торгового бренда. Информация о торговой точке тянется из Excel файла. Как просто вставить логотип в балун знаю. Вопрос в том как вставить определенный логотип из xlsx файла.

JS код:

ymaps.ready(init);
function init(){
    var myMap = new ymaps.Map("map", {
        center: [55.76, 37.64],
        zoom: 12,
        controls: ['smallMapDefaultSet']
    });

    ymaps.geolocation.get({
        provider: 'browser',
    }).then(function (result) {
        myMap.setCenter(result.geoObjects.position);
    });

    var clusterer = new ymaps.Clusterer({
        preset: 'islands#invertedDarkGreenClusterIcons', 
    groupByCoordinates: false
    });

    var geoObjects = [];

    $.ajax({ 
      type: 'GET', 
      url: 'https://oem-einvoice.ru/map/sbrf/backend/partners.php', 
      data: {}, 
      dataType: 'json',
      success: function (data) { 
          $.each(JSON.parse(data), function(i, el) {
            var objectOptions = {};

            if (el.brandIconName != "") {
                objectOptions = {
                    iconLayout: 'default#image',
                  iconImageHref: 'assets/images/icons/brands/' + el.brandIconName,
                  iconImageSize: [65, 65],
                  iconImageOffset: [-5, -30]
                };
            }
            else if (el.type != "") {
                var iconImageName = "";

                switch (el.type) {
            case "АЗС":
                iconImageName = "azs.png";
                break;
              case "Красота":
                iconImageName = "beauty.png";
                break;
              case "Кафе":
                iconImageName = "cafe.png";
                break;
              case "Для дома":
                iconImageName = "home.png";
                break;
              case "Медицина":
                iconImageName = "medic.png";
                break;
              case "Отели":
                iconImageName = "model.png";
                break;
              case "Запчасти":
                iconImageName = "parts.png";
                break;
              case "Продукты":
                iconImageName = "products.png";
                break;
              case "СТО":
                iconImageName = "sto.png";
                break;
              default:
                iconImageName = "universe.png";
          }

          if (iconImageName != "") {
            objectOptions = {
                        iconLayout: 'default#image',
                    iconImageHref: 'assets/images/icons/categories/' + iconImageName,
                    iconImageSize: [65, 65],
                    iconImageOffset: [-5, -30]
                    };
          }
            }
            
              geoObjects.push(new ymaps.Placemark(
                el.coords,
                {
                    balloonContentHeader: `<h1 class='baloon-header'>` + el.brand + `</h1>`,
                    balloonContentBody: `
            <div class="baloon-body">
              <img src='assets/images/icons/logo/' height='100px' weight='50px'>`+ el.logoCompany +`</img>
                      <p>`+ el.products +`</p>
                      <p><span class="data-type-title">Адрес:</span> <span>`+ el.region +`, ` + el.address + `</span></p>
                      <p><span class="data-type-title">Скидка:</span> <span>`+ el.discount +`</span></p>
                      <p><span class="data-type-title">НДС:</span> <span>`+ el.tax +`</span></p>
                      <p><span class="data-type-title">Координаты:</span> <span>`+ el.coords.join(',') +`</span></p>
                      <p><span class="data-type-title">Доп.условия:</span> <span>`+ el.additionalTerms +`</span></p>
                    </div>
                    `,
                }, objectOptions
              ));
          });

          clusterer.add(geoObjects);
            myMap.geoObjects.add(clusterer);
      }
  });
}

PHP код:

<?php

require_once(__DIR__ . '/vendor/autoload.php');

$xlsxPartnersFileName = 'partners.xlsx';
$xlsxParnersFilePath = __DIR__ . '/' . $xlsxPartnersFileName;

$jsonPartnersFileName = 'partners.json';
$jsonPartnersFilePath = __DIR__ . '/' . $jsonPartnersFileName;

if (file_exists($jsonPartnersFilePath)) {
  $xlsxParnersFileModTime = filemtime($xlsxParnersFilePath);
  $jsonPartnersFileModTime = filemtime($jsonPartnersFilePath);

  if ($xlsxParnersFileModTime > $jsonPartnersFileModTime) {
    jsonPartnersFileUpdate($xlsxParnersFilePath, $jsonPartnersFilePath);
  }
}
else {
  jsonPartnersFileUpdate($xlsxParnersFilePath, $jsonPartnersFilePath);
}

$jsonPartners = file_get_contents($jsonPartnersFilePath);
header('Content-Type: application/json; charset=utf-8');
echo json_encode($jsonPartners);


function jsonPartnersFileUpdate($xlsxFilePath, $jsonFilePath)
{
  $partners = getXlsxPartners($xlsxFilePath);
  file_put_contents($jsonFilePath, json_encode($partners));
}

function getXlsxPartners($filePath)
{
  $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
  $reader->setReadDataOnly(true);
  $spreadsheet = $reader->load($filePath);
  $sheet = $spreadsheet->getSheet($spreadsheet->getFirstSheetIndex());
  $rawData = $sheet->toArray();

  $partners = [];
  for ($i=1; $i<count($rawData); $i++) {
    if (!empty($rawData[$i][8])) {
      $partners[] = [
        'type' => (!empty($rawData[$i][0])) ? $rawData[$i][0] : '',
        'company' => (!empty($rawData[$i][1])) ? $rawData[$i][1] : '',
        'brand' => (!empty($rawData[$i][2])) ? $rawData[$i][2] : '',
        'region' => (!empty($rawData[$i][3])) ? $rawData[$i][3] : '',
        'address' => (!empty($rawData[$i][4])) ? $rawData[$i][4] : '',
        'products' => (!empty($rawData[$i][5])) ? $rawData[$i][5] : '',
        'discount' => (!empty($rawData[$i][6])) ? $rawData[$i][6] : '',
        'tax' => (!empty($rawData[$i][7])) ? $rawData[$i][7] : '',
        'coords' => explode(',', $rawData[$i][8]),
        'brandIconName' => (!empty($rawData[$i][9])) ? $rawData[$i][9] : '',
        'additionalTerms' => (!empty($rawData[$i][10])) ? $rawData[$i][10] : '',
        'logoCompany' => (!empty($rawData[$i][11])) ? $rawData[$i][11] : '',
      ];
    }
  }

  return $partners;
}

Ответы

Ответов пока нет.