Просмотр круговых сферических 360° панорам в JoomGallery

Небольшие заметки о html, css, sql, php

Модератор: Valery

Правила форума
Гость видит 250 символов 1 сообщения
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22326
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Решено Просмотр круговых сферических 360° панорам в JoomGallery

Сообщение Valery »

Панорамные снимки отлично передают красоту больших объектов и внутреннюю атмосферу интерьера помещения. Такая фотография позволяет создать эффект присутствия и возможность посмотреть во все вокруг точки съемки перемещая или приближая изображение.

Перебрал много скриптов и расширений для Joomla, но лучше всех оказался этот: демо посмотреть тут - Внешняя ссылка

Да и ради десятка другого панорам городить отдельное расширение не хочется.

1. Создаем папку
сайт\images\photo-sphere\
Туда копируем файлы скрипта Photo Sphere Viewer v2.9

Код: Выделить всё

photo-sphere-viewer.js
photo-sphere-viewer.min.js
three.min.js
2. В файл \components\com_joomgallery\views\detail\tmpl\default.php в начало добавляем условие для загрузки скрипта панорамы (это категория 43):

Код: Выделить всё

<!-- load script 360 panorama -->
	  <?php if($this->image->catid == '43'): ?>
		<script src="/images/photo-sphere/three.min.js" async="async"></script>
		<script src="/images/photo-sphere/photo-sphere-viewer.min.js" async="async"></script>
	  <?php   endif;?>
<!------------------------>
3. После

Код: Выделить всё

 if($this->params->get('image_linked')): ?>
Меняем код на:

Код: Выделить всё

<!-- load link photo-sphere panorama -->
	<?php if($this->image->catid == '43'): ?>
		<a href="/go/?/images/com_joomgallery/pano360/<?php echo $this->image->id;?>.html" class="modal" rel="{size:{x:800,y:600}}">
			<img src="<?php echo $this->image->img_src; ?>" class="jg_photo-detail" id="jg_photo_big" width="<?php echo $this->image->width; ?>" height="<?php echo $this->image->height; ?>" alt="<?php echo $this->image->imgtitle;?>" title="<?php echo $this->image->imgtitle;?>" />
		</a>
	<?php endif;?>

	<?php if($this->image->catid <> '43'): ?> 
		<a <?php echo $this->image->atagtitle; ?> href="<?php echo $this->image->link; ?>" rel="lightbox">
	<?php endif;?>


<?php endif; ?>
	<?php if($this->image->catid <> '43'): ?> 
      <img src="<?php echo $this->image->img_src; ?>" class="jg_photo-detail" id="jg_photo_big" width="<?php echo $this->image->width; ?>" height="<?php echo $this->image->height; ?>" alt="<?php echo $this->image->imgtitle;?>" title="<?php echo $this->image->imgtitle;?>" <?php echo $this->extra; ?> />
<?php if($this->params->get('image_linked')): ?>
    </a>
	<?php endif;?>
<!------------------------>
4. Создаем папку pano360 в \images\com_joomgallery\pano360\
В нее ложим html файлы вывода панорам, имена которых соответствуют ID фотографии такого содержания:

Код: Выделить всё

<!DOCTYPE html>
<html>
 <head>
  <meta name="robots" content="noindex">
 <head>
	<body>
	<style>
		HTML,body{margin:0;width:100%;height:500px;}
		#container{width:100%;height:100%;}			
	</style>
		
		<div id="container"></div>

		<script>
			var div = document.getElementById('container');
			var PSV = new PhotoSphereViewer({
					panorama: '../../images/com_joomgallery/img_originals/43-pano-360/full-panorama.jpg',
					container: div,
					time_anim: 3000,
					navbar: true,
					navbar_style: {
					backgroundColor: 'rgba(58, 67, 77, 0.7)'
					},
				});
		</script>
	</body>

</html>

Напр. с именем 5624.html

С таким решением файлы фотографий могут находиться даже на другом сервере.

При просмотре фото ID = 4654 из категории 43 при клике на детальное изображение открыто будет не большое фото, а ссылка на вывод панорамы по ссылке

Код: Выделить всё

\images\com_joomgallery\pano360\5624.html
Прямое обращение по ссылке к этому файлу ничего не даст, т.к. скрипт вывода панорамы не загружен.
Посмотреть вывод панорам в деле - Панорама 360 3D
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.

Теги:
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22326
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Просмотр круговых сферических 360° панорам и фототуров Pano2VR6 в Joom Gallery

Сообщение Valery »

По ходу пьесы выяснилсь, что есть более продвинутые версии создателей панорам и фототуров как то krpano или Pano2VR. Они в отличие от photo-sphere-viewer создают единую панораму из множества файлов, а не одного - что облегчает ее загрузку и просмотр.
Pano2VR6 в Joom Gallery
Поскольку модальность в Joomla уже встроена - подключать плагины и дополнительные скрипты нет надобности, достаточно добавить в ссылку

Код: Выделить всё

class="modal" rel="{handler:'iframe',size:{x:800,y:600}}"
и она откроется в модальном окне.


1. В файл \components\com_joomgallery\views\detail\tmpl\default.php в ссылку добавляем условие для открытия ее в модальном окне (это категория 43) для вывода панорамы во всплывающем окне:
Найти:

Код: Выделить всё

    <a <?php echo $this->image->atagtitle; ?> href="<?php echo $this->image->link; ?>">
<?php endif; ?>
      <img src="<?php echo $this->image->img_src; ?>" class="jg_photo" id="jg_photo_big" width="<?php echo $this->image->width; ?>" height="<?php echo $this->image->height; ?>" alt="<?php echo $this->image->imgtitle;?>" <?php echo $this->extra; ?> />
<?php if($this->params->get('image_linked')): ?>
    </a>

Код: Выделить всё

<!-- load link panorama -->
 <?php if($this->image->catid == '43'): ?>
   <object id="pano_icon" type="image/svg+xml" data="/images/script/pano2vr/360-***" width="36" height="36">
	Your browser does not support SVG!
   </object>
		<a href="/go/?/images/com_joomgallery/pano-360/<?php echo $this->image->id;?>/index.php" title="<?php echo $this->image->imgtitle;?>" class="modal" rel="{handler:'iframe',size:{x:800,y:600}}">
			<img src="<?php echo $this->image->img_src; ?>" class="jg_photo-detail" id="jg_photo_big" width="<?php echo $this->image->width; ?>" height="<?php echo $this->image->height; ?>" alt="<?php echo $this->image->imgtitle;?>" title="<?php echo $this->image->imgtitle;?>" />
		</a>
	<?php endif;?>

	<?php if($this->image->catid <> '43'): ?> 
		<a <?php echo $this->image->atagtitle; ?> href="<?php echo $this->image->link; ?>" rel="lightbox">
	<?php endif;?>
<?php endif; ?>
	<?php if($this->image->catid <> '43'): ?> 
      <img src="<?php echo $this->image->img_src; ?>" class="jg_photo-detail" id="jg_photo_big" width="<?php echo $this->image->width; ?>" height="<?php echo $this->image->height; ?>" alt="<?php echo $this->image->imgtitle;?>" title="<?php echo $this->image->imgtitle;?>" <?php echo $this->extra; ?> />
<?php if($this->params->get('image_linked')): ?>
    </a>
	<?php endif;?>
<!----------END-------------->
2. Поскольку вместо оригинального изображения открывается файл index.php - размер оригинального изображения не несет правильной информации и его необходимо скрыть:
Найти:

Код: Выделить всё

if($this->_config->get('jg_showoriginalfilesize')): ?>
Заменить после на:

Код: Выделить всё

<?php //Hide filesize if catid = 43?>
	<?php if($this->image->catid <> '43'): ?>		
      <div id="filesize" class="jg_row<?php $this->i++; echo ($this->i % 2) + 1; ?>">
        <div class="jg_photo_left">
          <?php echo JText::_('COM_JOOMGALLERY_DETAIL_INFO_FILESIZE_ORIGINAL'); ?>
        </div>
        <div class="jg_photo_right" id="jg_photo_filesizeorg">
          <?php echo JText::sprintf('COM_JOOMGALLERY_COMMON_IMG_HW',
                                    $this->image->orig_size,
                                    $this->image->orig_width,
                                    $this->image->orig_height) ?>
        </div>
      </div>
<!--Hide filesize if catid = 43-->
3. Панорамы хранятся в папке images\com_joomgallery\pano-360\
Файл панорамы index.html переименовываем в index.php и в начало файла добавляем запрет доступа по прямой ссылке:

Код: Выделить всё

<?php
error_reporting(0); //Запрет создания логов
function reset_url($url) {
    $value = str_replace ( "http://", "", $url );
    $value = str_replace ( "https://", "", $value );
    $value = str_replace ( "www.", "", $value );
    $value = explode ( "/", $value );
    $value = reset ( $value );
    return $value;
}
    $_SERVER['HTTP_REFERER'] = reset_url ( $_SERVER['HTTP_REFERER'] );
    $_SERVER['HTTP_HOST'] = reset_url ( $_SERVER['HTTP_HOST'] );

    if ($_SERVER['HTTP_HOST'] != $_SERVER['HTTP_REFERER']) {
        @header ( 'Location: ' . $config['http_home_url'] );
        die ( "Access denied!<br /><br />Please visit: <a href=\"/phgallery/43-panorama-360.html\">Main Panorama page</a>" );
    }
?>
4.1 Скрипты панорамы генерируются каждый раз при ее создании, и хранятся в папке с панорамой. Но нет смысла каждый раз загружать их с сервера при просмотре очередной панорамы, поэтому я их вынес в отдельную папку в index.php:

Код: Выделить всё

<script src="/images/script/pano2vr/pano2vr_player.js"></script>
<script src="/images/script/pano2vr/skin.js"></script>
<script src="/images/script/pano2vr/webvr/three.min.js" async="async"></script>
<script src="/images/script/pano2vr/webvr/webvr-polyfill.min.js" async="async"></script>
4.2 Если для какой-то панорамы или виртуального тура требуется свой скин - например с картой, в Output в поле Advanced прописываем назание создаваемого файла js для своего скина, напр. vodkomoto_v6-map.js:
Скин pano2VR

Скин pano2VR

После рендера панорамы он штатно прописывается в index.html так:

Код: Выделить всё

<script type="text/javascript" src="vodkomoto_v6-map.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?v=3&key=API_KEY"></script>
В таком случае файл скина vodkomoto_v6-map.js добавляем в папку /images/script/pano2vr/, а в файле
index.html или index.php меняем путь.

Наверняка новый скин ведь не делается для каждой новой панорамы. ;)

Поле Автор = ссылка на страницу автора

Код: Выделить всё

\vodkomotornik\components\com_joomgallery\views\detail\tmpl\default.php
Найти:

Код: Выделить всё

<?php echo $this->image->author; ?>
Заменить на:

Код: Выделить всё

 <?php if($this->image->author == '360'): ?>
  <a href="/poleznoe/photo-articles/6-create-3d-panorama.html" title="Откроется в новом окне" class="sitelinkx" target="_blank">Создание 3D панорам в Калининграде</a>
	<?php else : ?>
			<?php echo $this->image->author; ?>
 <?php endif; ?>
При редактировании фото на вкладке Публикация - Автор указываем 360 и в детальном виде будет отображаться ссылка на страницу автора.


Чтобы всем фотографиям категории записать автора как "360" достаточно выполнить запрос к БД:

Код: Выделить всё

UPDATE jos_joomgallery SET jos_joomgallery.imgauthor = "360"
WHERE jos_joomgallery.catid = 43;

Отображение панорамы, загруженной на сервис 360cities
Полученный код iframe добавляем в index.php:

Код: Выделить всё

<body>
 <div id="container" style="width:100%;height:100%;overflow:hidden;">
   <iframe src="https://www.360cities.net/embed_iframe/holiday-inn-kaliningrad" width="100%" height="100%" frameborder="0" bgcolor="#000000" target="_blank" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>
 </div>
</body>
width и height меняем на 100%
Строки загрузки скриптов удалить за ненадобностью.
Таким образом можно экономить место и нагрузку на хостинге.
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22326
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Просмотр круговых 360 градусов панорам в JoomGallery

Сообщение Valery »

Если есть необходимость открытия панорам по ссылке (т.е. без посещения страницы с ее описанием)
необходимо убрать запрет доступа по прямой ссылке (см.выше) и желательно добавить метатеги, чтобы в мессенджерах и соцсетях к ссылке подтягивалась картинка:

Код: Выделить всё

<!-- fb & Whatsapp -->
	<meta property="og:site_name" content="Панорамная съемка и создание 3D туров" />
	<meta property="og:title" content="Виртуальный 3D тур по квартире 360°" />
	<meta property="og:description" content="Образец полноценного 3D виртуального тура с применением аэросъемки!" />
	<meta property="og:url" content="" />
	<meta property="og:type" content="website" />
	<meta property="og:image" content="https://www.vodkomotornik.ru/images/com_joomgallery/img_details/005/43-panorama-360/5685_20200506_1911138489.jpg" />		
	<meta property="og:image:type" content="image/jpeg">
	<meta property="og:image:width" content="300">
	<meta property="og:image:height" content="300">		
Образец - 3D тур по квартире
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.