1 Ниже показана универсальная JS-скриптовая функция QuickPage для подгрузки страниц во всплывающее окно.
// ========================================================================
/**
* Динамическая подгрузка страницы во всплывающее окно (целевой объект)
*
* @access public
* @param string target DOM-указатель на целевой (принимающий) объект
* @param string url веб адрес подгружаемой страницы
* @param string msg текст сообщения на время подгрузки страницы
* @return boolean TRUE если цели нет и нужен переход по ссылке
*/
// ========================================================================
function QuickPage ( target, url, msg ) {
// величина сдвига всплывающего окна
var offset_x = 0,
offset_y = -200;
// ищем на странице целевой объект (первый, если несколько)
target = jQuery(target);
target = target.length ? target[0] : null;
if (typeof(target) != 'object' || target == null) return true;
// выводим в целевой объект сообщение,
// проявляем объект на экране,
// загружаем новый контент
jQuery(target).html(msg)
.show()
.load(url + '?ajax=1');
// двигаем объект к центру страницы
var w = jQuery(window).width();
var x = (w - jQuery(target).width()) / 2;
x += offset_x;
if (x < 0) x = 0;
var h = jQuery(window).height();
var y = (h - jQuery(target).height()) / 2;
y += jQuery(document).scrollTop();
y += offset_y;
if (у < 0) у = 0;
jQuery(target).animate({ left: x, top: y }, 0);
// возвращаем НЕ ПЕРЕХОДИТЬ ПО ССЫЛКЕ
return false;
}
2 Кроме того, что на макет страницы (в файл index.tpl шаблона) добавляем эту функцию, также добавляем на страницу скрытый div-контейнер (например разместим его сразу за открывающим тегом body), который и будет всплывающим окном, а также в нужные ссылки на странице добавляем вызов функции QuickPage.
<html>
<head>
...
...
<!-- здесь например подключаем тело функции QuickPage -->
</head>
<body>
<!-- всплывающее окно с подгружаемой страницей -->
<noindex>
<div id="quickPage"></div>
</noindex>
...
...
<!-- по клику ссылки подгружаем страницу в окно -->
<a href="http://site/products/url1" onclick="return QuickPage('#quickPage',
this.href,
'Загружается...')">
Подробнее о товаре 1
</a>
...
...
<!-- по клику ссылки подгружаем страницу в окно -->
<a href="http://site/products/url2" onclick="return QuickPage('#quickPage',
this.href,
'Загружается...')">
Подробнее о товаре 2
</a>
...
...
</body>
</html>
3 Еще в CSS-файл шаблона добавляем необходимые стили для всплывающего окна. Например - белый фон, тонкая серая рамка по краям, внутренние отступы от края равны 15 пикселям, ширина окна равна 600 пикселей, высота не менее 400 пикселей, окно изначально невидимое, позиционируется абсолютно.
#quiсkPage {
background: #fff;
border: #ccc 1px solid;
display: none;
margin: 0;
padding: 15px;
position: absolute;
width: 600px;
min-height: 400px;
}
Примечательно, что выше в ссылках вместо строки 'Загружается...' можем писать любой необходимый нам html-фрагмент сообщения, даже так '<img src="http://site/design/текущая-тема/images/progress.gif" />', чтобы на время подгрузки страницы во всплывшем окне крутился индикатор прогресса.
4 Далее, для правильной работы динамической подгрузки страниц в движке версии 130418 и ниже, в файл index.tpl шаблона все равно необходимо внести правку, рассматривавшуюся через два поста выше. То есть файл index.tpl должен быть таким:
{* если это динамическая подгрузка и мы в старой версии движка *}
{if $quick_content|default:false || $smarty.request.quickcontent|default:false}
|| $smarty.request.ajax|default:false}
{* отдаем только контент центральной части страницы *}
{$content|default:''}
{* иначе рисуем всю страницу как обычно *}
{else}
...
...
{/if}
5 И последняя правка, если исходить из вашей задачи о генерации файла шаблона с нестандартным именем, касается самого файла product.tpl, так как движком пока не поддерживается динамическая смена tpl-файла по указанию с клиентской стороны. То есть нет возможности обратиться к какой-нибудь странице сайта и определенным параметром в запросе страницы попросить генерировать ее другим шаблоном. Поэтому файл product.tpl нужно исправить следующим образом:
{* если это динамическая подгрузка *}
{if $smarty.request.ajax|default:false}
{* генерируем центральную часть нестандартным шаблоном *}
{include file = 'product_ajax.tpl'}
{* иначе генерируем как обычно *}
{else}
...
...
{/if}
6 Осталось создать в шаблоне файл product_ajax.tpl и закодировать в нем тот внешний вид контента, который хотите получать при динамической подгрузке.
Еще одна рекомендация касается закрытия от индексации всех адресов, которые относятся к ajax-вызовам, чтобы в поисковике не получалась каша из ссылок на полные и "полу"-страницы. Для чего в файле robots.txt пишем запрет индексации любой страницы, содержащей в адресе параметр ajax или quickcontent.
User-agent: *
...
...
Disallow: /*ajax=
Disallow: /*quickcontent=
...
...