Опубликован: 24.12.2006 | Доступ: свободный | Студентов: 2668 / 209 | Оценка: 4.51 / 4.22 | Длительность: 23:31:00
Урок 16:

Написание простой CMS вручную

< Урок 15 || Урок 16: 123456789
  1. На основе приведенной ниже информации (в виде псевдокода), используя правильный синтаксис ASP, ColdFusion или PHP, повторите шаги 5 и 6 для каждого из оставшихся текстовых полей, предназначенных для вывода на странице численности населения, денежной единицы и URL для картинки.
    Population: rs_countryDetail.population
    Country Currency: rs_countryDetail.country_currency
    Image URL: rs_countryDetail.imageURL

    Настройка текстовых полей завершена. Осталось разобраться с текстовыми областями.

  2. Между двумя наборами открывающих и закрывающих тегов <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 применяется один и тот же синтаксис текстового поля.

    После этого следует сохранить файл, загрузить его на сервер и протестировать.

  3. На панели 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"
      Конец условия
    Вернуться в начало цикла и начать следующую итерацию

    Описание получилось довольно длинным, тем не менее, если понять принцип, создание кода окажется совсем не сложным.

  4. Внесите в код между открывающим и закрывающим тегами <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 ( <?…?> ). Это изменение не ухудшает выполнение кода. Главное отличие состоит в том, что отделение условной конструкции таким образом облегчает понимание кода.

  5. Сохраните файл и загрузите его на сервер. При тестировании страницы admin_cp_master.asp снова выберите любую страну, кроме Африки.

    По умолчанию в списке отобразится правильный регион, и в то же время будут доступны все остальные.

Форма для обновления готова, и теперь все самое трудное позади.

< Урок 15 || Урок 16: 123456789
Леонид Степанов
Леонид Степанов
Россия, Алтайский край