116 lines
3.8 KiB
PHP
116 lines
3.8 KiB
PHP
<?php
|
|
/**
|
|
* Контакты + Яндекс.Карта
|
|
* .bento .pksh-section #pksh-contact
|
|
*
|
|
* @package Dekart
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
$data = Pksh_Data::instance();
|
|
$opt_phone = $data->get_phone();
|
|
$opt_email = $data->get_email();
|
|
$opt_address = $data->get_address();
|
|
$opt_social = $data->get_social_links();
|
|
$opt_coords = $data->get_coords();
|
|
$opt_name = $data->get_name();
|
|
?>
|
|
<section class="bento pksh-section" id="pksh-contact" aria-label="Контакты">
|
|
<div class="bento__full section-header--centered">
|
|
<span class="bento-label">Контакты</span>
|
|
<h2 class="bento-h2">Наш адрес</h2>
|
|
<p class="bento-p">Ждём вас в гости — удобно добираться из любого района города</p>
|
|
</div>
|
|
<div class="bento__full pksh-contact">
|
|
<div class="pksh-contact__wrapper">
|
|
<div class="pksh-contact__info">
|
|
<?php if ( ! empty( $opt_phone ) ) : ?>
|
|
<div class="pksh-contact__subtitle">Телефон:</div>
|
|
<a class="pksh-contact__value" href="tel:+<?php echo preg_replace( '/[^0-9]/', '', $opt_phone ); ?>"><?php echo esc_html( $opt_phone ); ?></a>
|
|
<?php endif; ?>
|
|
|
|
<?php if ( ! empty( $opt_email ) ) : ?>
|
|
<div class="pksh-contact__subtitle">Почта:</div>
|
|
<a class="pksh-contact__value" href="mailto:<?php echo esc_attr( $opt_email ); ?>"><?php echo esc_html( $opt_email ); ?></a>
|
|
<?php endif; ?>
|
|
|
|
<?php if ( ! empty( $opt_address ) ) : ?>
|
|
<div class="pksh-contact__subtitle">Адрес:</div>
|
|
<div class="pksh-contact__value"><?php echo esc_html( $opt_address ); ?></div>
|
|
<?php endif; ?>
|
|
|
|
<?php if ( ! empty( $opt_social ) && is_array( $opt_social ) ) : ?>
|
|
<div class="pksh-contact__subtitle">Наши соцсети:</div>
|
|
<div class="pksh-contact__social">
|
|
<?php foreach ( $opt_social as $item ) :
|
|
$link = $item['url'] ?? '';
|
|
$name = $item['name'] ?? '';
|
|
if ( $link ) : ?>
|
|
<a class="pksh-contact__social-link" href="<?php echo esc_url( $link ); ?>" target="_blank" rel="noopener noreferrer" title="<?php echo esc_attr( $name ); ?>">
|
|
<?php echo esc_html( $name ?: $link ); ?>
|
|
</a>
|
|
<?php endif; ?>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
<div class="pksh-contact__map">
|
|
<div id="ya-map" style="width: 100%; height: 100%; min-height: 400px;"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<script>
|
|
(function() {
|
|
var mapCoords = [<?php echo esc_js( $opt_coords ?: '55.7558,37.6173' ); ?>];
|
|
var mapLabel = '<?php echo esc_js( $opt_name ); ?>';
|
|
var mapLoaded = false;
|
|
var apiLoading = false;
|
|
|
|
function initMap() {
|
|
ymaps.ready(function() {
|
|
var map = new ymaps.Map('ya-map', {
|
|
center: mapCoords,
|
|
zoom: 16
|
|
}, {
|
|
searchControlProvider: 'yandex#search'
|
|
});
|
|
var placemark = new ymaps.Placemark(
|
|
mapCoords,
|
|
{ iconContent: mapLabel },
|
|
{ preset: 'islands#redStretchyIcon' }
|
|
);
|
|
map.geoObjects.add(placemark);
|
|
mapLoaded = true;
|
|
});
|
|
}
|
|
|
|
function loadYandexMaps() {
|
|
if (mapLoaded || apiLoading) return;
|
|
apiLoading = true;
|
|
var script = document.createElement('script');
|
|
script.src = 'https://api-maps.yandex.ru/2.1/?lang=ru_RU';
|
|
script.onerror = function() { <?php if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) : ?>console.warn("Yandex Maps API failed to load");<?php endif; ?> apiLoading = false; };
|
|
script.onload = initMap;
|
|
document.head.appendChild(script);
|
|
}
|
|
|
|
function onScroll() {
|
|
if ((window.pageYOffset || document.documentElement.scrollTop) > 100) {
|
|
loadYandexMaps();
|
|
window.removeEventListener('scroll', onScroll);
|
|
}
|
|
}
|
|
window.addEventListener('load', function() {
|
|
setTimeout(function() {
|
|
if (!mapLoaded && !apiLoading) loadYandexMaps();
|
|
}, 3000);
|
|
});
|
|
window.addEventListener('scroll', onScroll, { passive: true });
|
|
})();
|
|
</script>
|