Для выборки одной записи в ссылках применяется запрос single, который указывает на идентификатор записи. Вместе с этим запросом должен быть передан идентификатор блока, в котором находится запрашиваемая запись, и идентификатор страницы. На страничке "Переменные шаблона" вы может посмотреть перечень переменных, которые передаются на шаблон при данном запросе.
Пример 1.
<?php echo " {$dat['edit']} foreach ($tab as $dat) echo " <a href='?page=$page&block=$block&single={$dat['rec']}'>$dat[1]</a> "; ?>
В данном примере при первом открытии появятся все записи. При щелчке по ссылке, будет показана только одна запись, на идентификатор которой указывает значение этой переменной запроса. Приведем более сложный пример:
Пример 2.
<?php if (empty(Request::get($block, 'single'))) { echo "Список специалистов<br>"; foreach ($tab as $dat) echo " {$dat['edit']} <a href='?page=$page&block=$block&single={$dat['rec']}'>$dat[1]</a> <br> "; } else { echo " {$dat['edit']} Фамилия Имя Отчество: $dat[1]<br> Специальность: $dat[2]<br> Дата рождения: $dat[3]<br> Телефон: $dat[4]<br> Адрес: $dat[5]<br> Примечания: $dat[6]<br> "; } ?>
В качестве примера взят некоторый банк данных по специалистам. Если страничка была открыта по умолчанию без запроса single, то открывается список из фамилий. Каждая фамилия является ссылкой на страничку с детальной информацией о конкретном специалисте.
Как было показано выше, данные текущей записи находятся в себе массив $dat. Эти же данные дублируются в массиве $tab[0]. На самом деле при запросе single извлекаются также данные соседних записей, и полностью массив данных выглядит так:
$tab[0] | данные текущей записи |
$tab['prev'] | данные предыдущей записи |
$tab['next'] | данные следующей записи |
С помощью элементов $tab['prev'] и $tab['next'] можно создать ссылки для перехода, соответственно, на на предыдущую и следующую запись. С дополнительным кодом, который показан в цвете, предыдущий пример будет выглядеть так:
Пример 3.
single.tpl<?php if (empty(Request::get($block, 'single'))) { echo' Список специалистов<br>'; foreach ($tab as $dat) { echo' '.$dat['edit'].' <a href="?page='.$page.'&block='.$block.'&single='.$dat['rec'].'"> '.$dat[1].' </a> <br> '; } } else { echo ' <br> '.$dat['edit'].' Фамилия Имя Отчество: '.$dat[1].'<br> Специальность: '.$dat[2].'<br> Дата рождения: '.$dat[3].'<br> Телефон: '.$dat[4].'<br> Адрес: '.$dat[5].'<br> Примечания: '.$dat[6].'<br> '; echo'<a href="?page='.$page.''>Показать все записи</a>'; if (empty($tab['prev']['rec'])) echo'Предыдущий'; else echo'<a href="?page='.$page.'&block='.$block.'&single='.$tab['prev']['rec'].'">Предыдущий</a>'; if (empty($tab['next']['rec'])) echo'Следующий'; else echo'<a href="?page='.$page.'&block='.$block.'&single='.$tab['next']['rec'].'">Следующий</a>'; } ?>
single.tdd (дескриптор шаблона для примеров 2 и 3)
<?php
$types[1] = 'varchar(155)';
$types[2] = 'varchar(100)';
$types[3] = 'date';
$types[4] = 'varchar(15)';
$types[5] = 'varchar(255)';
$types[6] = 'varchar(155)';
$params['multi-record'] = true;
?>
Формирование элемента $tab[0] с информацией о текущей записи, определяется только значением запроса single, то есть номером запрашиваемой записи. Другие одновременно действующие запросы (например, pick, sort) на извлечение этой записи не влияют.
Однако, дополнительные запросы нужны для правильного получения соседних записей ($tab['prev'] и $tab['next']). Дополнительный запрос, действуя как фильтр, сужает выборку данных. И именно в рамках этой выборки пользователь и будет перемещаться от одной записи к другой соседней записи.
Исключение составляет запрос part, который при single-запросах игнорируется, о чем читайте ниже.
При single-запросах даже в отсутствие запроса part, все параметры текущей части продолжают отслеживаться. То есть, в шаблоне можно узнать данные запроса по частям.
При этом даже явный запрос part ни на что не влияет. Поэтому используйте part-запрос по своему усмотрению, например в человекопонятных ссылках. Сравните ссылки без и с запросом part:
Параметрические ссылки | Человекопонятные ссылки |
---|---|
href="?page=3&block=24&single=456" | href="news/iphone-6-release" |
href="?page=3&block=24&part=99&single=456" | href="news/99/iphone-6-release" |
Перемещаясь от одной записи к другой, пользователь может захотеть выйти в список. Было бы логично выйти не в начальную часть, а в ту часть, в которой находится текущая запись. Для этого нужно знать номер этой части. Например, чтобы выйти в список записей текущей части нужно сделать такую ссылку:
# Возврат в список текущей части
<a href="?page=&block=&part=