Написание простой CMS вручную
-
На основе приведенной ниже информации (в виде псевдокода), используя правильный синтаксис ASP, ColdFusion или PHP, повторите шаги 5 и 6 для каждого из оставшихся текстовых полей, предназначенных для вывода на странице численности населения, денежной единицы и URL для картинки.
Population: rs_countryDetail.population Country Currency: rs_countryDetail.country_currency Image URL: rs_countryDetail.imageURL
Настройка текстовых полей завершена. Осталось разобраться с текстовыми областями.
-
Между двумя наборами открывающих и закрывающих тегов <textarea></textarea> (содержащих описание и альтернативный текст к изображению) поместите код, по умолчанию добавляющий в поля динамические значения.
Для ASP:
<%=rs_countryDetail("description")%> <%=rs_countryDetail("imageALT")%>
Для ColdFusion:
<cfoutput>#rs_countryDetail.description#</cfoutput> <cfoutput>#rs_countryDetail.imageALT#</cfoutput>
Для PHP:
<?php echo $row_rs_countryDetail['description']; ?> <?php echo $row_rs_countryDetail['imageALT']; ?>
Синтаксис для текстового поля отличается от синтаксиса других элементов формы. Значение не присваивается атрибуту value, а помещается между открывающим и закрывающим тегами >textarea>. В ASP, ColdFusion и PHP применяется один и тот же синтаксис текстового поля.
После этого следует сохранить файл, загрузить его на сервер и протестировать.
-
На панели Site (Сайт) выберите файл admin_cp_master.asp , введите данные доступа и выберите любую страну, кроме Африки.
Загрузится форма для обновления записи, наполненная значениями по умолчанию. Однако если была выбрана какая-либо страна (но не в Африке), возникнет одна проблема: в качестве региона страны будет указана Африка. Происходит это потому, что элементы в раскрывающемся списке формируются на основе другого набора записей ( rs_regions ), а Африка является первым элементом в списке и отображается по умолчанию. Можно изменить содержимое списка так, чтобы в нем отображались данные из набора записей rs_countryDetail, но поскольку в нем содержится только одна запись, список будет состоять из одного элемента, и изменение региона окажется невозможным. И хотя маловероятно, что Италия переместится в Южную Америку, следует сохранить возможность изменять регионы на случай, если кто-то в компании Newland Tours решит изменить принципы выделения регионов, к примеру, разделить Европу на две части – Северную и Южную Европу.
Можно оставить все как есть, и сотрудники должны будут выбирать в списке правильный регион при каждом обновлении записи, однако, это намного снижает эффективность и удобство приложения. Рано или поздно, сотрудник забудет изменить регион, и в результате, одна из стран, например, Мексика, окажется в Африке. Последствия этой ошибки могут оказаться довольно значительными. Поскольку на сайте есть возможность поиска путешествий по региону, посетители не смогут найти Мексику в Центральной Америке. К тому же, если на сайте будет сказано, что Мексика находится в Африке, уровень доверия к компании заметно снизится. Так что решить подобную проблему очень важно.
Но решение проблемы требует определенных действий. К моменту, когда код для отображения элементов списка в браузере (после выполнения обработчиком ASP, ColdFusion или PHP) выглядит так:
<select name="region" id="region"> <option value="6">Africa</option> <option value="8">America, Central</option> <option value="1">America, North</option> <option value="2">America, South</option> <option value="7"> Asia, Central</option> <option value="4">Asia, East</option> <option value="5">Asia, West</option> <option value="3">Europe</option> </select>
Не секрет, что у элемента <select> есть дополнительный атрибут selected, указывающий элемент, который выбран в списке по умолчанию. В част-ности, в приведенном ниже списке по умолчанию будет выбран элемент для Центральной Азии (Asia, Central) (полужирным шрифтом атрибут выделен для того, чтобы его легче было найти).
<select name="region" id="region"> <option value="6">Africa</option> <option value="8">America, Central</option> <option value="1">America, North</option> <option value="2">America, South</option> <option value="7" selected>Asia, Central</option> <option value="4">Asia, East</option> <option value="5">Asia, West</option> <option value="3">Europe</option> </select>
Таким образом, все, что требуется – это добавить атрибут selected в тег региона, соответствующего выбранной стране. Сложность заключается в том, что список не является статическим, а формируется при помощи цикла, который добавляет отдельную строку с тегом <option> для каждой записи из набора записей rs_regions.
Тем не менее, решение проблемы существует: при каждом повторе цикла, заполняющего список, сценарий будет проверять, соответствует ли текущее значение параметра regionID региону из набора записей rs_countryDetail. Если ответ положительный, сценарий добавит в код слово selected. В противном случае будет выполняться дальше. Так выглядит псевдокод сценария:
Выполнять приведенный ниже код до тех пор, пока в наборе rs_regions не закончатся записи Вывести тег <option>, в качестве значения параметра value используя rs_regions.regionID, а в качестве надписи – значение rs_regions.regionName Если текущее значение rs_regions.regionID равно значению Еrs_countryDetail.region Вывести в код слово "selected" Конец условия Вернуться в начало цикла и начать следующую итерацию
Описание получилось довольно длинным, тем не менее, если понять принцип, создание кода окажется совсем не сложным.
-
Внесите в код между открывающим и закрывающим тегами <select></select> следующие изменения.
Для ASP:
<% Do Until rs_regions.EOF %> <option value="<%=rs_regions("regionID")%>" <% If rs_regions("regionID")=rs_countryDetail("region") Then Response.Write("selected") End If %> ><%=rs_regions("regionName")%></option> <% rs_regions.MoveNext Loop %>
Для ColdFusion:
<cfoutput query="rs_regions"> <option value="#regionID#"<cfif (rs_regions.regionID EQ rs_countryDetail.region)> selected</cfif>>#regionName#</option> </cfoutput>
Для PHP:
<?php do { ?> <option value="<?php echo $row_rs_regions['regionID']; ?>" <?php if ($row_rs_regions['regionID'] == $row_rs_countryDetail['region']) { echo " selected"; } ?> ><?php echo $row_rs_regions['regionName']; ?></option> <?php } while ($row_rs_regions = mysql_fetch_assoc($rs_regions)); ?>
Начало и конец тега <option> выделены для облегчения чтения кода. Особое внимание следует обратить на закрывающую тег угловую скобку, которая может показаться лишней в коде ASP, ColdFusion или PHP (кстати, эта угловая скобка во всех трех случаях должна быть выделена оранжевым цветом). Причина разбиения тега заключается в том, что слово selected должно выводиться перед закрывающей скобкой. Таким образом, она располагается справа от условной конструкции, а остальная часть тега расположена слева.
Важно уделить внимание расположению пробелов в коде: перед словом selected обязательно должен стоять пробел, чтобы оно не располагалось вплотную к атрибуту value="X", расположенному слева.
Пользователи ASP и PHP могут заметить, что в этот раз для вывода тега <option> применяется не тот синтаксис, что в начале урока при создании списка в форме для добавления стран. В данном случае вместо целого блока кода ASP или PHP, состоящего из нескольких элементов, из которых складывается строка с тегом <option>, используются несколько участков кода, разделенных разделителями ASP ( <%…%> ) или PHP ( <?…?> ). Это изменение не ухудшает выполнение кода. Главное отличие состоит в том, что отделение условной конструкции таким образом облегчает понимание кода.
-
Сохраните файл и загрузите его на сервер. При тестировании страницы admin_cp_master.asp снова выберите любую страну, кроме Африки.
По умолчанию в списке отобразится правильный регион, и в то же время будут доступны все остальные.
Форма для обновления готова, и теперь все самое трудное позади.