@FlawyOSM

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

Доброго времени суток. Есть сайт компании, на нем Яндекс карта, на которой отмечены торговые точки. При нажатии на точку раскрывается балун, который содержит информацию о торговой точке (текстового формата). Появилась задача добавить в балун логотип торгового бренда. Информация о торговой точке тянется из 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;
}
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы