При разработке галерии фотографий, в качестве ссылок на большие фотографии, обычно создают ряд небольших изображений (миниатюр). Открыть картинку в отдельном окне можно по такой ссылке: href='photo.jpg', или лучше href='datafiles/$data[1]', записав в дескрипторе шаблона $types[1]=file.
А что делать, если мы хотим чтобы картинка, в открываемом в окне, допустим, имела рамку, размещалась посередине окна, и вокруг нее был какой-то фон? Другими словами, как открывать изображение именно на отдельной странице, а не как файл? Ответ казалось бы прост - пойти по ссылке от миниатюры и создать новую страницу по шаблону. Но для галереи с большим количеством картинок создавать каждый раз заново новую страницу слишком трудоемко. Рассмотим другие варианты решение этой задачи.
photos.tpl (шаблон для миниатюры)
<?php foreach ($tab as $dat) echo " {$dat['edit']} <a href='?page=$dat[3]&file=$dat[2]'> <img src='datafiles/$dat[1]'> </a> "; ?>
photos.tdd (дескриптор шаблона для миниатюры)
<?php
$titles[1]='Миниатюра';
$titles[2]='Большое фото';
$titles[3]='Шаблон страницы для фольшого фото';
$types[1]='file';
$types[2]='file';
$types[3]="page template('photo')"; // Шаблон по умолчанию
$params['multi-record'] = true;
?>
photo.tpl (шаблон большого фото)
...
<img src='datafiles/{$_GET['file']}'>
...
Закачка миниатюры и большой фотографии происходит в одном окне редактирования. У этого варианта имеется небольшой недостаток - для каждой миниатюры-ссылки, хоть и автоматически, но будет создаваться страница, что проявится в доп.записях в таблицах БД: pages и blocks. Хотя, справедливости ради нужно сказать, что таблиц для самих блоков создано не будет, так как в шаблоне photo данных нет (имя файла передается через URL).
Сначала стандартным способом необходимо создать страницу с шаблоном photo.tpl (шаблон см. в предыдущем примере). Для этого, где-то должна существовать ссылка, код для которой можно записать, например, в главной панели управления. При этом ссылку, естественно, нужно сделать невидимой для посетителей с помощью конструкции {if $isUser} или закомментировать ее после создания страницы.
mainMenu.tpl
...
<a href='?page=$dat[12]'>Выбрать шаблон для большого фото</a>
mainMenu.tdd
<?php
...
$types[12]='page';
?>
Допустим мы создали страницу для большого фото, и для нее был сгенерирован идентификатор 999. В этом случае шаблон для миниатюры будет выглядеть так:
photos.tpl
<?php foreach ($tab as $dat) echo " {$dat['edit']} <a href='?page=999&file=$dat[2]'> <img src='datafiles/$dat[1]'> </a> "; ?>photos.tdd
<?php
$titles[1]='Миниатюра';
$titles[2]='Большое фото';
$types[1]=file;
$types[2]=file;
$params['multi-record'] = true;
?>
Этот вариант более предпочтителен, хотя у него тоже есть небольшой минус - нужно явным образом вписывать идентификатор единой страницы (page=999) в код шаблона photos.tpl.
<?php foreach ($tab as $dat) echo " {$dat['edit']} <a href='?page={$page}' onclick='window.open(\"?page=999&file=$dat[2]\",\"\",\"width=800,height=600\"); return false;' > <img src='datafiles/$dat[1]'> </a> "; ?>