Опубликован: 24.12.2006 | Уровень: для всех | Доступ: платный

Урок 12: Создание поисковых интерфейсов

Скрытие навигационной панели

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

Как всегда, код ASP, ColdFusion и PHP отличается внешне, но он построен по одним и тем же принципам.

  1. На странице tours_detail.asp в комбинированном режиме Split (Режим разделения) при помощи селектора тегов выделите таблицу, в которой содержится навигационная панель для перемещения между записями.

    Таблица окажется выделенной как в режиме Code (Код), так и в режиме Design (Дизайн). Режим кода будет применяться на следующем шаге, а в данный момент требуется определить границы таблицы, поскольку выше и ниже таблицы необходимо добавить код, управляющий ее отображением. Это один из тех случаев, когда комбинированный режим облегчает поиск элемента, скрытого в коде.

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

  2. В режиме Code (Код), непосредственно перед открывающим тегом таблицы, введите первую часть сценария, управляющего отображением таблицы в зависимости от количества записей.

    Для ASP:

    <% If (MM_atTotal = false Or Not IsEmpty(Request.QueryString("offset"))) Then %>

    Для ColdFusion:

    <cfif rs_tourDetail.recordcount gt 5>

    Для PHP:

    <?php if ($totalPages_rs_tourDetail != 0) { ?>

    При создании набора записей в памяти сервера сохраняются не только сами данные, извлеченные из базы, но и некоторая необходимая информация об этих данных. К такой информации (доступной на ASP, ColdFusion и PHP) относится количество записей, извлеченных при помощи запроса. В ASP и ColdFusion переменная, в которой хранится общее число записей, называется RecordCount. Для доступа к ней применяется код rs_myQuery.recordcount. В PHP для получения этой информации применяется функция mysql_num_rows(). Используют ее в следующем виде: mysql_num_rows($rs_myQuery). В обоих примерах название rs_myQuery является вымышленным, и в реальном коде вместо него следует подставлять название используемого набора записей.

    Во время работы с циклами или при разбиении набора записей на страницы переменная RecordCount (ASP и ColdFusion) или функция mysql_num_rows() (PHP) может оказать неоценимую помощь. Но в данной ситуации возникает одна проблема. В сценариях, сгенерированных с помощью примененных серверных моделей поведения, эти переменные уже используются. Если применить их вновь, между сценариями могут возникнуть непредсказуемые конфликты. В сценариях ASP и PHP, во избежание таких проблем, применяются переменные, уже созданные серверными моделями поведения.

    Теперь обратим внимание на сами сценарии. В версии сценария для ColdFusion (кстати, самой простой из всех) сервер получает указание, что если количество записей больше пяти (количество записей, которые одновременно могут отображаться на экране), следует выполнять весь код, идущий после этой строки. Этим кодом является таблица, в которой содержится навигационная панель для перемещения между записями. Если количество записей меньше пяти (так что условие возвращает значение false [ложь]), сценарий переходит к коду, закрывающему конструкцию (он еще не написан), после чего продолжается дальнейшая обработка страницы. Другими словами, если количество записей меньше пяти, таблица, содержащая навигационную панель для перемещения между записями, не отображается. Эта гибкая структура довольно удобна, поскольку вне зависимости от того, что происходит в базе данных (имеется в виду удаление или добавление туров), навигационная панель для перемещения между записями окажется доступной только в случае, если в ней возникнет необходимость.

    В версии кода для ASP вызывается пара переменных, сгенерированных объектом Recordset Navigation Bar (Навигационная панель для перемещения между записями), добавленным на страницу в предыдущем уроке. Для полного понимания назначения этой строки требуется понимать код VBScript, выводимый на страницу объектом Recordset Navigation Bar, а также около 300 строк кода, благодаря которым работает сама модель поведения. Все это не является целью этой книги. Короче говоря, сценарий определяет, умещаются ли возвращенные записи на одной странице. В первом случае таблица с навигационной панелью отображается, и, напротив, если записи не помещаются на странице, таблица будет скрыта.


    Версия сценария для PHP несколько проще. Добавленная ранее серверная модель поведения создала переменную $totalPages_rs_tourDetail, которая используется сценарием, чтобы отследить общее количество страниц с записями. Это количество рассчитывается на основе общего количества записей и количества записей, выводимых на страницу. Переменная проверяется на равенство нулю. Если существует только одна страница с записями, то значение переменной равно нулю, а если три страницы, – значение равно 2 (это может показаться странным). Таким образом, известно, что если значение переменной не равно нулю (оператор != означает "не равно"), следовательно, записи распределены по двум страницам или более, и требуется навигационная панель для перемещения между ними. Если же значение равно 0, весь код в теле условия пропускается, и навигационная панель не отображается.

  3. После закрывающего тега </table> , относящегося к таблице, выделенной в шаге 6, поместите код, закрывающий условный блок, созданный на предыдущем шаге.

    Для ASP:

    <% End If %>

    Для ColdFusion:

    </cfif>

    Для PHP:

    <?php } ?>

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


    Если теперь протестировать страницу (как говорилось ранее, проверять ее следует при переходе по ссылке региона со страниц tours.asp или index.asp ), то навигационная панель для перемещения между записями отображаться не будет. Для полной уверенности в правильности работы страницы нужно закомментировать второй участок SQL-кода и удалить символы комментариев, добавленных вокруг первого, снова потом вновь проверить страницу, на этот раз без фильтрации. При этом будут показаны все путешествия, а для перемещения между ними загрузится навигационная панель. В этом случае после завершении тестирования нужно снова закомментировать первый запрос и активировать второй.

  4. Сохраните и закройте страницу tours_detail.asp.
Екатерина Мезенцева
Екатерина Мезенцева
Россия
Маргарита Туктарова
Маргарита Туктарова
Соединенное Королевство, London, kingston university, 2012