Динамічні сторінки у PHP. PHP. Динамічне створення сторінок Створюємо компонент виведення звичайної сторінки

Минулого уроку ми розібралися з яких блоків складатиметься шаблон trip , тому можна приступати до роботи. Для початку створимо дві папки:

images - ця папка міститиме будь-які графічні файли, які використовуються для оформлення шаблону. Т.к. у нас ще немає жодних дизайнерських напрацювань, то киньте в цю папку один будь-який графічний файл, інакше Joomla не встановить шаблон і буде видавати помилку в тому випадку якщо папка буде порожньою.

УВАГА: У папці images шаблону не розміщується графік контенту!

css - ця папка міститиме в собі файли каскадних таблиць стилів. Для початку помістимо в неї порожній файл template.css, за допомогою якого здійснюється призначення різних стилів оформлення елементам сайту.

Далі можна приступати до створення найголовнішого файлу index.php, який визначатиме візуальне розташування елементів сайту і повідомлятиме CMS Joomla в який блок помістити різні компоненти та модулі. Файл є комбінацією PHP та HTML.

Я завжди при написанні коду використовую тільки Macromedia Dreamweaver. Чудова програма, наполегливо раджу її новачкам, тому що. якщо в процесі роботи над кодом ви зробили помилку, програма обов'язково підсвітить ваш косяк.

На сайті ви знайдете самовчитель з Macromedia Dreamweaver. Якщо ви збираєтеся займатися розробкою сайтів, то цю програму варто освоїти, хоча б на початковому рівні, щоб редагувати коди шаблонів без помилок.

Позиціонування елементів (блоків) сторінки здійснюється за допомогою коду HTML, ми будемо використовувати теги DIV. Але так, як наш сайт буде працювати на движку Joomla, тобто. він буде динамічним, то доведеться використовувати ще й мову PHP. З його допомогою ми визначимо в яких блоках будуть позиції для виведення модулів, і як ці позиції будуть називатися, чи згортатимуться блоки чи ні. Підключимо таблиці стилів із зовнішніх файлів, мову контенту, встановимо, як змінюватиметься розмір сайту та ін.

index.php

Заголовок файлу

Заголовок файлу складається з кількох частин. Перша частина коду PHP заголовка призначена для того, щоб переконатися, що файл не звертаються безпосередньо, з міркувань безпеки.

< ?php
defined ("_JEXEC" ) or die ;
JHtml::_("behavior.framework", true);
$app = JFactory::getApplication() ;
?>
< ?php echo "< ?" ; ?> xml version="1.0" encoding=" < ?php echo $this- > _charset ?> "?>

DOCTYPE – це дуже важливий параметр, на основі якого браузер вирішує, як відображати цю сторінку і як інтерпретувати CSS.

< ! DOCTYPE html PUBLIC "- / / W3C/ / DTD XHTML 1.0 Strict/ / EN""http: // www.w3.org/ TR/ xhtml1/ DTD/ xhtml1- strict.dtd">

Наступний фрагмент отримує встановлену мову з глобальної конфігурації.

< html xmlns= "http:// www.w3.org/ 1999/ xhtml" xml:lang=" < ?php echo $this- > language; ?> " lang=" < ?php echo $this- > language; ?> " dir = " < ?php echo $this-> direction; ?> " >

Далі йде фрагмент коду, який включає додаткову інформацію для заголовка, яка задана глобальної конфігурації. Цю інформацію ви можете побачити, подивившись вихідний код будь-якої веб-сторінки. Зокрема це мета-теги, про які ви вже знаєте.

< head>
< jdoc:include type= "head" / >

Наступні рядки в заголовку містять посилання на основні CSS стилі Joomla.

< link rel= "stylesheet" href= "< ?php echo $this- > baseurl ?> / templates/ system / css/ system .css" type= "text / css" / >
< link rel= "stylesheet" href= "< ?php echo $this- > baseurl ?> / templates/ system / css/ general.css" type= "text / css" / >

Щоб використовувати стилі оформлення шаблону, робимо посилання на файл, що містить каскадні таблиці стилів template.css, який лежить в папці CSS . Не важливо, що цей файл поки що порожній, головне його підключити, оформленням займемося потім, коли встановимо шаблон на Joomla. Так простіше спостерігатиме за результатом.

< link rel= "stylesheet" href= "< ?php echo $this- > baseurl ?> / templates/< ?php echo $this- > template ?> / css/ template.css" type= "text / css" / >

Наступний фрагмент коду дозволяє нам згортати ліву або праву колонки, якщо в позиціях left і right не розташовано жодного модуля. Якщо згорнуті обидві колонки, то контент займає 100% ширини сторінки. Якщо включено лише одну колонку, то контент займає 80%. При двох включених стовпчиках на контент припадає 60% ширини сторінки.

< ?php
if ($ this- > countModules("left and right" ) = = 0) $contentwidth = "100" ;
if ($ this- > countModules("left or right" ) = = 1) $contentwidth = "80" ;
if ($ this- > countModules("left and right") = = 1) $contentwidth = "60";
?>

Заголовок закривається

< / head>

< body>

Блок «page» містить оформлення лише сторінки сайту, саме вона і буде завширшки 950рх.

< div id= "page" >

Блок "top" знаходиться в самому верху сторінки і містить два блоки "logo " і "user1".

< div id= "top" >

У боці "logo" ми розмістимо графічний файл логотипу, це буде прописано в таблицях стилів. А ось автоматичне виведення назви сайту прописуємо у файлі index.php, причому назву поміщаємо в тег H1, що дуже важливо для пошукової оптимізації.

< div id= "logo" >
< h1> < ?php echo $app - >getCfg("sitename"); ?>< / h1>
< / div>

Визначимо позицію user1 в однойменному блоці для виведення модуля пошуку по сайту.

< div id= "user1" >
< jdoc:include type= "modules" name= "user1" style= "xhtml" / >
< / div>
< / div> < ! - - конец блока top - - >

Виведення модуля горизонтального меню в блоці user2 в позиції user2 . Блок згортатиметься, якщо в цій позиції не буде модуля.

< ?php if ($this- > countModules("user2" ) ) : ?>
< div id= "user2 " >
< jdoc:include type= "modules" name= "user2" style= "xhtml" / >
< / div>
< ?php endif ; ?>

Далі йде блок шапки сайту "header". У ньому ми визначимо позицію "header" для виведення модулів. Блок згортатиметься, якщо в цій позиції не буде модуля. Я навмисне розширила можливості цього блоку, щоб мати можливість розмістити в ньому не тільки картинку шапки, а й ротатори зображень.

< ?php if ($this- > countModules(" header ") ) : ?>
< div id= "header ">
< jdoc:include type= "modules" name= "header " style = "xhtml" / >
< / div>
< ?php endif ; ?>

У блоці user3 визначимо позицію user3 для виведення модулів.

Блок згортатиметься, якщо в цій позиції «user3» не виводиться модуль.

< ?php if ($this- > countModules("user3" ) ) : ?>
< div id= "user3" >
< jdoc:include type= "modules" name= "user3" style= "xhtml" / >
< / div>
< ?php endif ; ?>

Відкривається блок лівої колонки, яка згортатиметься, якщо в позиції «left» не буде жодного модуля.

< ?php if ($this- > countModules("left" ) ) : ?>
< div id= "left" >
< jdoc:include type= "modules" name= "left" style= "xhtml" / >
< / div>
< ?php endif ; ?>

Відкривається найважливіший блок контенту, який може займати 100% ширини сторінки, 80% і 60%, залежно кількості включених колонок.

< div id= "content< ?php echo $contentwidth ; ?> " >

Виведення повідомлень у компонентах

< jdoc:include type= "message" / >

Виведення контенту.

< jdoc:include type= "component" style= "xhtml" / >
< / div> < ! - - конец блока контента- - >

Відкривається блок правої колонки, яка згортатиметься, якщо в позиції «rigth» не буде жодного модуля.

< ?php if ($this- > countModules("right" ) ) : ?>
< div id= "rigth" >
< jdoc:include type= "modules" name= "right" style= "xhtml" / >
< / div>
< ?php endif ; ?>

Виведення блоку footer , призначеного для виведення модуля HTML код з інформацією про авторські права. Також можна розмістити тут нижнє горизонтальне меню або модуль представлення контенту. Блок згортатиметься, якщо в цій позиції «footer» не виводиться не один модуль

< ?php if ($this- > countModules("footer" ) ) : ?>
< div id= "footer" >
< jdoc:include type= "modules" name= "footer" style= "xhtml" / >
< / div>
< ?php endif ; ?>

Закриваються блок сторінки сайту «page», body та весь код.

< / div> < ! - - конец блока page- - >
< / body> < ! - - конец блока body - - >
< / html> < ! - - конец кода- - >

Ми створили повноцінний файл index.php. Тепер ви знаєте за допомогою яких команд і в якій послідовності виводяться блоки шаблону.

УВАГА: Для того, щоб код шаблону читався з адмінпанелі joomla, файл index.php необхідно відкрити в редакторі AkelPad і зберегти в кодуванні UTF-8, при цьому зняти галочку BOM. Якщо ви використовували для роботи з файлом програму Macromedia Dreamweaver , то необхідно у повернем меню вибрати пункт "Змінити" > "Властивості сторінки" та вибрати кодування документа Юнікод (utf-8), при цьому зняти галочку "включити сигнатури юнікоду (ВОМ)". Однак настійно не раджу вам редагувати код з адмінки Joomla, якщо, щось накосячіть - дороги назад немає, на відміну від програми Macromedia Dreamweaver, де завжди можна скасувати зроблені зміни.

Саме оформлення блоків буде описано у template.css. Але налаштовувати таблиці стилів ми будемо після інсталяції шаблону Joomla 3 (joomla 2.5), а для цього необхідно створити

Багато читачів у будь-якій книзі про комп'ютери перегортають усе, що не має безпосереднього інтересу, і переходять до того, що вони дійсно хочутьзнати. Особисто я роблю саме так. Втім, у цьому немає нічого страшного – рідко зустрічаються технічні книги, які необхідно читати від кірки до кірки. А може, ви саме так і вчинили - пропустили вісім початкових розділів і взялися за цей розділ, бо мав найцікавішу назву? Та й кому захочеться гаяти час на подробиці, коли на роботі «горить» черговий проект?

На щастя, подібна квапливість не завадить вам нормально засвоїти матеріал другої частини книги, присвяченої використанню PHP для побудови сайтів та взаємодії з Web. У цьому розділі ви навчитеся легко модифікувати вміст веб-сторінок і здійснювати навігацію в Web за допомогою посилань та різних стандартних функцій. Наступний розділ доповнить викладений матеріал - у ньому докладно розглядаються засоби взаємодії з користувачем у формах HTML У розділі 11 описано організацію інтерфейсу з базами даних. В інших розділах другої частини розглядаються нетривіальні аспекти web-програмування на PHP.

Однак слід пам'ятати, що матеріал частини 1 абсолютно необхіднийдля нормального володіння PHP. Передбачається, що ви все ж таки прочитали першу частину, тому в прикладах будуть використовуватися багато з описаних раніше концепцій. Отже, якщо ви перегорнули частину книги, вам доведеться час від часу повертатися до попередніх розділів і надолужувати втрачене.

Прості посилання

<а href = "date.php">

$link = "date.php";

print "<а href = \"$link\">View today's date
\n"

Ймовірно, у вас виникло питання - чому в коді посилання перед лапками (") ставиться зворотна коса риса (\)? Справа в тому, що лапки в PHP є спеціальними символами і використовуються як обмежувач рядків. Отже, лапки-літерали в рядках" повинні екрануватись.

Якщо потреба екранувати лапки вас дратує, просто увімкніть режим magic_quotes_gpc у файлі php.ini. В результаті всі апострофи, лапки, зворотні косі риси та нуль-символи. у тексті автоматично екрануються!

Розвинемо наведений приклад. Для швидкого виведення списку посилань у браузері можна скористатися масивом:

// Створити масив розділів

$contents - array("tutorials", "articles", "scripts", "contact");

// Перебрати та послідовно вивести кожен елемент масиву

for ($i = 0; $i< sizeof($contents; $i++)

print " | ".$contents[$i]."
\n";

// - спеціальне позначення точки-маркера endfor;

Файлові компоненти (шаблони)

Ми підійшли до однієї з моїх улюблених можливостей PHP. Шаблоном (стосовно web-програмування) називається частина web-документа, яку ви збираєтеся використовувати в декількох сторінках. Шаблони, як і функції PHP, позбавляють вас зайвого копіювання/вставки фрагментів змісту сторінки та програмного коду. Зі збільшенням масштабів сайту значення шаблонів зростає, оскільки вони дозволяють легко та швидко проводити модифікації на рівні цілого сайту. У цьому розділі буде описано деякі можливості, які відкриваються при використанні найпростіших шаблонів.

Як правило, загальні фрагменти змісту/коду (тобто шаблони) зберігаються в окремих файлах. При побудові web-документа ви просто «включаєте» ці файли у місця сторінки. У PHP для цього існують дві функції: include() та require().

include() та require()

Одним із найвидатніших аспектів PHP є можливість побудови шаблонів та програмних бібліотек та їх подальшої вставки у нові сценарії. Застосування бібліотек заощаджує час та зусилля щодо використання спільних функціональних можливостей на різних веб-сайтах. Читачі, які мають

досвідом програмування іншими мовами (наприклад, C, C++ або Java), добре знайомі з концепцією бібліотек функцій та їх використанням у програмах для розширення функціональних можливостей.

Включення одного або декількох файлів до сценарію здійснюється стандартними функціями PHP require() та include(). Як буде показано в наступному розділі, кожна з цих функцій застосовується у певній ситуації.

Функції

У PHP існують чотири функції для включення файлів у сценарії PHP:

  • include();
  • include_once();
  • require();
  • require_once().

Незважаючи на схожість імен, ці функції вирішують різні завдання.

Функція include() включає вміст файлу сценарію. Синтаксис функції include():

include (file файл)

У функції include() є одна цікава особливість - її можна виконувати умовно. Наприклад, якщо виклик функції включено до блоку команди if. то файл входить у програму лише тому випадку, якщо умова i f істинно. Якщо функція includeO використовується в умовній команді, то вона повиннабути укладена у фігурні дужки чи альтернативні обмежувачі. Порівняйте відмінності у синтаксисі лістингів 9.1 та 9.2.

Лістинг 9.1. Неправильне використання include()

if (some_conditional)

include ("text91a.txt"); else

include ("text91b.txt");

Лістинг 9.2. Правильне використання include()

if (some_conditional) :

include ("text91a.txt");

include ("text91b.txt");

Весь код PHP у файлі обов'язковополягає в теги PHP. Не слід вважати, що просте збереження команди PHP у файлі забезпечить її правильну обробку:

Натомість необхідно укласти команду у відповідні теги, як показує наступний приклад:

print "це is invalid include file";

Функція include_once() робить те саме, що й include(), за одним винятком: перш ніж вмикати файл у програму, вона перевіряє, чи не був він включений раніше. Якщо файл вже був увімкнений, виклик include_once() ігнорується, а якщо ні – відбувається стандартне включення файлу. У всьому іншому include_once() нічим не відрізняється від include(). Синтаксис функції include_once():

include_once (file файл)

Загалом функція require() схожа на include() -- вона також включає шаблон у той файл, в якому знаходиться виклик require(). Синтаксис функції require():

require (file файл)

Тим не менш, між функціями require() та include() існує одна важлива відмінність. Файл, який визначається параметром require(), включається до сценарію незалежно від місцезнаходження require() у сценарії. Наприклад, при виклику requi ге() в блоці if за помилкової умови файл все одно буде включений в сценарій!

У багатьох ситуаціях буває зручно створити файл зі змінними та іншою інформацією, яка використовується в масштабах сайту, а потім підключати його за необхідності. Хоча ім'я цього файлу вибирається довільно, зазвичай називаю його init.tpl (скорочення від «initializaion.template»). У лістингу 9.3 показано, як виглядає простий файл init.tpl. У лістингу 9.4 вміст init.tpl включається до сценарію командою require().

Лістинг 9.3. Приклад ініціалізації файлу

$site_title = "PHP Recipes";!}

$contact_email = " [email protected]";

$contact_name = "WJ Gilmore";

Лістинг 9.4. Використання файлу init.tpl

<? print $site_title; ?>

\"mai1 to:$contact_email\">$contact_name."; ?>

Надсилання URL-адреси під час виклику require() дозволяється лише при увімкненому режимі «URL fopen wrappers» (цей режим увімкнено за замовчуванням).

Зі збільшенням розмірів сайту може виявитися, що деякі файли включаються до сценарію кілька разів. Іноді це не викликає проблем, але в деяких випадках повторне включення файлу призводить до скидання значень змінних змінних. Якщо у файлі визначаються функції, можуть виникнути конфлікти імен. Зважаючи на сказане, ми приходимо до наступної функції - require_once().

Функція require_once() гарантує, що файл буде включатися до сценарію лише один раз. Після виклику requi rе_оnсе() всі подальші спроби ввімкнення того ж файлу ігноруються. Синтаксис функції requiге_оnсе():

Ймовірно, ви станете частіше використовувати функції включення файлів у міру того, як ваші веб-програми почнуть збільшуватися в розмірах. Ці функції часто зустрічаються в прикладах цієї книги, щоб скоротити надмірність програмного коду. Перші приклади розглядаються у наступному розділі, присвяченому принципам побудови базових шаблонів.

Побудова компонентів

При визначенні структури типової web-сторінки зазвичай розбиваю її на три частини: заголовок, основну частину і колонтитул. Як правило, у більшості правильно організованих web-сайтів є заголовок, який практично не змінюється; в основній частині виводиться запит сайту, тому вона часто змінюється; нарешті, колонтитул містить інформацію про авторські права та навігаційні посилання. Колонтитул, як і заголовок, зазвичай залишається незмінним. Не зрозумійте мене неправильно - я зовсім не намагаюся придушувати ваші творчі устремління. Мені зустрічалося чимало чудових сайтів, які не дотримувалися цих принципів. Я лише намагаюся виробити загальну структуру, яка може послужити відправною точкою для подальшої роботи.

Заголовок

Заголовний файл (на кшталт наведеного в лістингу 9.5) є практично в кожному з моїх web-сайтів з підтримкою PHP. Цей файл містить

інформація, що діє на рівні всього сайту, - наприклад, заголовок, контактні дані та деякі компоненти коду HTML-сторінки.

Лістинг 9.5. Приклад файлу заголовка

// Файл: header.tpl

// Призначення: заголовний файл для сайту PhpRecipes.

$site_name = "PHPRecipes";

$site_email=" [email protected]";

$site_path = "http://localhost/phprecipes";

<? print $site_name; ?>

// Вивести поточну дату та час

print date ("F d, h:i a");

Досить часто доступ до файлів з боку відвідувачів обмежується, особливо якщо ці файли містять конфіденційну інформацію (наприклад, паролі). В Apache можна заборонити перегляд деяких файлів редагуванням http.conf або htaccess. Наступний приклад показує, як заборонити перегляд усіх файлів із розширенням.tpl:

Order allow,deny

Allow from 127.0.0.1

PHP та проблеми безпеки сайтів докладно описані у розділі 16.

Колонтитул

Колонтитулом (footer) зазвичай називається інформація, розташована в нижній частині сторінок сайту, - контактні дані, посилання та інформація про авторські права. Цю інформацію можна розмістити в окремому файлі і включати як шаблон так само, як це робиться з заголовком. Допустимо, з настанням нового року вам потрібно змінити інформацію про авторські права та привести її до вигляду «Copyright © 2000-2001». Є два шляхи: витратити напередодні Різдва на гарячкове редагування сотень статичних сторінок абоскористатися шаблоном на кшталт наведеного у лістингу 9.6. Одна проста зміна - і ви можете повертатися до святкових клопотів.

Лістинг 9.6.Приклад файлу колонтитулу (footer.tpl)

contact |

your privacy

Зверніть увагу на використання глобальної змінної $site_email у колонтитульному файлі. Значення цієї змінної діє в масштабах усієї сторінки, а ми припускаємо, що файли header.tpl та footer.tpl будуть включені до однієї підсумкової сторінки. Також зверніть увагу на наявність шляху $site_path у засланні Privacy (Конфіденційність). Я завжди вмикаю в шаблони повні шляхи до всіх посилань - якби URL-адреса посилання складалася з одного імені privacy.php, то файл колонтитула був би жорстко прив'язаний до конкретного каталогу.

Основна частина

В основному сторінки підключається вміст заголовка та колонтитула. По суті, саме основна частина містить інформацію, яка цікавить відвідувачів сайту. Заголовок ефектно виглядає, колонтитул містить корисні відомості, але саме заради основної частини сторінки користувачі знову та знову повертаються на сайт. Хоча я не зможу надати жодних рекомендацій щодо конкретної структури сторінок, шаблони, подібні до наведеного в лістингу 9.7, грунтовно спрощують адміністрування сторінок.

Лістинг 9.7. Приклад основної частини сторінки (index_body.tpl)

/tutorials.php">tutorials

articles

scripts

contact

Welcome to PHPRecipes. starting place for PHP scripts, tutorials,

and information про gourmet cooking!

Всі разом: заголовок, колонтитул та основна частина

Мабуть, мій настрій найкраще висловлюється фразою полковника «Ганнібала» Сміта (Джордж Пеппард) зі знаменитого серіалу «Команда А»: «Люблю, коли все стає на свої місця». Я відчуваю щось подібне, коли розрізнені шаблони поєднуються і утворюють повний web-документ. Комбінуючи три секції документа: header.tpl, index_body.tpl і footer.tpl, можна швидко побудувати найпростішу сторінку на кшталт тієї, що наведена в лістингу 9.8.

Лістинг 9.8. Побудова сторінки index.php включенням кількох файлів

// Файл: index.php

// Призначення: домашнясторінка PHPRecipes

// Вивести заголовок

include ("header.tpl");

// Вивести основну частину

include ("index_body.tpl");

// Вивести колонтитул

include ("footer.tpl");

Ну як? Три прості команди – і перед вами готова сторінка. Текст підсумкової сторінки наведено у лістингу 9.9.

Лістинг 9.9. Сторінка HTML, побудована у лістингу 9.8 (index.php)

PHPRecipes

August 23, 03:17 pm

tutorials

articles

scripts

contact

Welcome до PHPRecipes, запустити місце для PHP scripts, tutorials,

and gourmet cooking tips and recipes!

Copyright 2000 PHPRecipes. Всі права захищені.

contact |

your privacy

На рис. 9.1 показано, як отримана сторінка виглядає у браузері. Хоча я зазвичай не користуюся рамками таблиць, цього разу я їх вивів, щоб на малюнку наочно виділялися три частини сторінки.

Мал. 9.1. Зовнішній вигляд сторінки, побудованої у лістингу 9.8

Оптимізація шаблонів

У другому (на мій погляд, кращому) варіанті шаблони оформляються у вигляді функцій, що знаходяться в окремому файлі. Тим самим забезпечується додаткове структурування ваших шаблонів. Я називаю цей файл ініціалізаційним файлом та зберігаю в ньому іншу корисну інформацію. Оскільки ми вже розглянули відносно довгі приклади заголовка та колонтитулу, вміст листингів 9.10 та 9.11 був трохи скорочений для наочної демонстрації нової ідеї.

Лістинг 9.10. Оптимізований шаблон сайту (site_init.tpl)

// Файл: site_init.tpl

// Призначення: ініціалізаційний файл PhpRecipes

$site_name = "PHPRecipes";

$site_email = " [email protected]";

$site_path = "http://localhost/phprecipes/";

function show_header($site_name) (

<? print $site_name: ?>

This is the header

function show footer()

This Is the footer

Лістинг 9.11. Застосування ініціалізаційного файлу

// Включити ініціалізаційний файл

include("site_init.tpl");

// Вивести заголовок

show header ($ site_name);

// Вміст основної частини This is some body information

// Вивести колонтитул Show_footer();

Проект: генератор сторінок

Хоча у більшості створених мною web-сайтів основний вміст сторінок формувався на основі інформації, прочитаної з бази даних, завжди знайдеться кілька сторінок, які практично не змінюються. Зокрема, на них можуть виводитися відомості про команду розробників, контактні дані, реклама і т.д. Я зазвичай зберігаю цю «статичну» інформацію в окремій папці та використовую сценарій PHP для її завантаження під час надходження запиту. Звичайно, у вас виникає питання – якщо це статична інформація, для чого потрібен сценарій PHP? Чому не завантажувати звичайні сторінки HTML? Перевага PHP полягає в тому, що ви можете використовувати шаблони та вставляти статичні фрагменти за необхідності.

<а href = "/static.php?content=$content">Static Page Name

Почнемо зі створення статичних сторінок. Для простоти я обмежуся трьома сторінками, що містять інформацію про сайт (листинг 9.12), рекламу (листинг 9.13) та контактні дані (листинг 9.14).

Лістинг 9.12. Інформація про сайт (about.html)

About PHPRecipes

What programmer doesn"t mix all night programming with gourmet cookies. Here at PHPRecipes. hardly a night goes by without one of our coders mixing a little bit of HTML with a tasty plate of Portobello Mushrooms or even Fondue. best of what we love most: PHP and food!

That's right, readers. Tutorials, scripts, souffles and more. 0nly at PHPRecipes.

Advertising Information

Беззастережно, де вони беруться до пізнання останніх PHP технологій або для бризкування вгору

до bake chicken, ви можете між нашими лідерами є рішення makers. Вони є Industry

Professionals, які роблять рішення про те, що їх фірма придбає.

Для advertising information, contact

">[email protected].

Лістинг 9.14. Контактні дані (contact.html)

Contact Us

Have a coding tip?

Know the perfect topping for candied yams?

Let us know! Contact the team at [email protected].

Переходимо до побудови сторінки static.php, яка виводить запитувану статичну інформацію. Цей файл (див. листинг 9.15) включає компоненти сторінок нашого сайту та ініціалізаційний файл site_init.tpl.

Лістинг 9.15. Загальне виведення статичних сторінок (static.php)

// Файл: static.php

// Призначення: відображення статичних сторінок, що запитуються.

// УВАГА: передбачається, що файл "site_init.tpl" і все

/ / Статичні файли знаходяться в тому ж каталозі.

// Завантажити функції та змінні include("site_init.tpl"):

// Вивести заголовок show_header($site_name);

// Вивести запитуваний зміст include("$content.html"):

// Вивести колонтитул show footer();

Тепер усе готове до побудови основного сценарію. Просто увімкніть до сторінки

<а href = "static.php?content=about">Static Page Name

Advertising Information

Contact Us

Якщо натиснути на будь-яке з цих посилань, у браузері завантажується відповідна статична сторінка, впроваджена в static.php!

Підсумки

У цьому розділі ви познайомилися з першочерговим завданням, для вирішення якого і створювався PHP - динамічною побудовою web-сторінок. Було розглянуто такі питання:

  • обробка URL;
  • побудова динамічного змісту;
  • включення та побудова базових шаблонів.

Глава завершується генератором сторінок - програмою, яка завантажує статичні сторінки шаблон і дозволяє легко організувати підтримку великої кількості статичних сторінок HTML.

Наступний розділ присвячений використанню PHP у поєднанні з формами HTML, що помітно підвищують ступінь інтерактивності вашого сайту. А потім – взаємодія з базами даних! Вам доведеться дізнатися багато цікавого.

З попередніх уроків ми дізналися, що за допомогою методу GET можна передавати деякі параметри прямо до URL. Однак ніщо не заважає нам робити це без форм, просто перераховуючи їх у URL.

Ми можемо надсилати параметри через URL. І ми можемо отримати ці параметри прямо у скрипті. То що нам заважає показувати користувачеві різні сторінки в залежності від параметрів URL?

Створення динамічної сторінки

Щоб показувати користувачеві різні сторінки, необхідно підготувати контент. Нехай він лежить у багатовимірному масиві:

"Створення динамічних сторінок", "content" => "Текст статті про динамічні сторінки." ], [ "title" => "Як зловити кошеня", "content" => "Текст статті про кошенят." ]]; ?>

Динамічний параметр URL буде називатися id, а ловити його будемо в $_GET["id"] . Ми могли б додати поле id кожному елементу масиву, але тоді довелося б перебирати всі елементи та шукати підмасив із потрібним id. Тому набагато простіше як ID використовувати ключі головного масиву.

Простіше кажучи, ми беремо id і намагаємося знайти статтю з таким ключем у масиві $articles. Виглядає це так:

Залишилося лише накидати виведення меню та перевірку id на коректність. Виходить справжній php-роутер!

"Головна сторінка", "content" => "Текст статті про наш сайт" ], [ "title" => "Створення динамічних сторінок", "content" => "Текст статті про динамічні сторінки." ], [ "title" => "Як зловити кошеня", "content" => "Текст статті про кошенят." ]]; # Якщо id передано - записуємо в $article статтю або null, якщо статті з таким id немає if(isset($_GET["id"])) $current_article = $articles[$_GET["id"]] ?? null; # Якщо id не переданий - це головна сторінка, можемо показати сторінку з id = 0 else $current_article = $articles; ?> $article): ?> ">

Помилка 404 - сторінка не знайдена

Тепер можна створювати динамічні сайти, на яких кількість сторінок залежить від кількості елементів масиву, а не PHP файлів. :) Якщо на сайті мають бути різні типи сторінок, наприклад стаття та товар, можна другим параметром передавати тип сторінки: site.ru?type=article&id=5 .

Звісно, ​​ця система не ідеальна. Через деякий час ви дізнаєтеся, як зробити нормальне ЧПУ (зручніші URL, наприклад site.ru/articles/5/) і зберігати статті у файлі або базі даних.

Для створення перспективного, розширюваного та ефективного сайту будь-якої складності слід розпочинати з простого. Це процес нелегкий, вимагає певних базових знань PHP і MySQL, але якщо його розглянути по пунктах - можна скласти свого роду «робочий план», який стане в нагоді при створенні нових сайтів. Підготуємо «ядро» та базу для проекту. Спочатку це буде звичайний сайт візитівка, але потім, додаючи функціонал, його можна перетворити на будь-що. Отже, почнемо.

1. Підготовка бази даних. Створюємо першу таблицю у БД MySQL

Створюємо нову базу даних, наприклад "mysite". Особисто я звик працювати з кодуванням UTF-8, тому відразу обмовлюся: простежте, щоб всі текстові файли сайту, сама база, таблиці і поля таблиць були в одному кодуванні.
У новій основі робимо таблицю. Назвемо її "pages". У цій таблиці зберігатимуться статичні сторінки майбутнього сайту та інформація про них. Таблиця повинна містити такі поля:

  • page_id – ідентифікатор сторінки (SMALLINT, primary key, auto_increment);
  • page_alias – псевдонім сторінки для рядка адреси ЧПК (VARCHAR, 255);
  • page_title – назва сторінки у вікні браузера (VARCHAR, 255);
  • page_meta_d - мета опис сторінки для тега meta description (VARCHAR, 255);
  • page_meta_k – мета ключові слова для тега meta keywords (VARCHAR, 255);
  • page_h1 - заголовок сторінки (VARCHAR, 255);
  • page_s_desc - короткий опис матеріалу, наприклад, якщо матеріали сайту будуть у вигляді блогу (TEXT);
  • page_content - основний текст сторінки, який виводитиметься в центральну колонку сайту (TEXT);
  • page_publish – містить «Y» – якщо сторінка опублікована, або «N» – якщо вона прихована (CHAR, за умовчанням «Y»).

Відразу після створення таблиці вставляємо значення для головної сторінки сайту. У полі page_alias для головної сторінки пропоную вставити значення home. Метатеги - відповідно до тематики всього сайту. Таким же чином можна створити інші сторінки, наприклад «Про компанію» з аліасом «about» і своїми метатегами, або «Контакти» з аліасом «contacts» і т.д.

2. Створюємо файл конфігурації сайту

У кореневій папці сайту, яка має бути порожня на даному етапі, створюємо папочку "cfg", в ній за допомогою. htaccess закриваємо доступ директивою "deny from all". Створюємо файл core.php наступного змісту:

// MYSQL
class MyDB
{
var $dblogin = "root"; // ВАШ ЛОГІН ДО БАЗИ ДАНИХ
var $dbpass = ""; // ВАШ ПАРОЛЬ ДО БАЗИ ДАНИХ
var $db = "mysite"; // НАЗВА БАЗИ ДЛЯ САЙТУ
var $dbhost="localhost";

Var $link;
var $query;
var $err;
var $result;
var $data;
var $fetch;

Function connect() (
$this->link = mysql_connect($this->dbhost, $this->dblogin, $this->dbpass);
mysql_select_db($this->db);
mysql_query("SET NAMES utf8");
}

Function close() (
mysql_close($this->link);
}

Function run($query) (
$this->query = $query;
$this->result = mysql_query($this->query, $this->link);
$this->err = mysql_error();
}
function row() (
$this->data = mysql_fetch_assoc($this->result);
}
function fetch() (
while ($this->data = mysql_fetch_assoc($this->result)) (
$this->fetch = $this->data;
return $this->fetch;
}
}
function stop() (
unset($this->data);
unset($this->result);
unset($this->fetch);
unset($this->err);
unset($this->query);
}
}

Цей файл поки що містить лише простий клас підключення до бази даних, але надалі до нього можна додавати різні корисні функції, які будуть доступні з будь-якого місця в коді сайту. Не забудьте змінити логін та пароль до Вашої бази.

Якщо ви працюєте в середовищі Windows, я можу порекомендувати використовувати редактор . У цьому редакторі є нумерація рядків, і він легко переводить текст з одного кодування до іншого. УВАГА! Якщо Ви працюєте в кодуванні UTF-8 - конвертуйте файли в UTF-8 без BOM - це допоможе уникнути проблем у майбутньому.

3. Створюємо index.php – головний контролер сайту

Файл конфігурації створено. Тепер у кореневій папці сайту створюємо index.php – це і буде основний скрипт сайту, свого роду «головний контролер». Зміст файлу index.php:

define("INDEX", ""); // ВСТАНОВЛЕННЯ КОНСТАНТИ ГОЛОВНОГО КОНТРОЛЕРА

Require_once($_SERVER."/cfg/core.php"); // ПІДКЛЮЧЕННЯ ЯДРУ

// ПІДКЛЮЧЕННЯ ДО БД
$ db = New MyDB ();
$db->connect();

// ГОЛОВНИЙ КОНТРОЛЕР
switch ($_GET) (
case "page":
include($_SERVER."/com/page.php");
break;
default:
include($_SERVER."/com/home.php");
break;
}

Include ($_SERVER."/template.php");
$db->close();

Змінна $_GET вказуватиме головному контролеру який компонент сайту завантажувати при запиті. Зараз у нашому сайті передбачено лише два компоненти: «сторінка» та «головна сторінка» (в принципі можна обійтися і одним компонентом виведення звичайної сторінки, але часто вигляд головної сторінки сайту відрізняється від звичайних сторінок пунктів меню). Логіка роботи головного контролера така: з URL рядка витягується назва потрібного компонента (значення змінної $option), залежно з його значення підключається файл самого компонента (міститься у папці /com). Файл компонента виконує всі необхідні роботи, витягує з бази даних і записує їх у змінні, передачі у шаблон дизайну. В самому кінці підключається файл дизайну сайту, в який і передаються всі змінні та дані, витягнуті в компонентах. Це звучить набагато важче, ніж працює.

4. Створюємо компонент виведення звичайної сторінки

У корені сайту створюємо татку «com» ​​- в ній зберігатимуться файли компонентів. Компонент сайту, в моєму розумінні, - це файл, в якому відбувається обробка даних для різних розділів сайту. Наприклад компонент звичайної сторінки витягує з бази даних назву, опис та текст матеріалу, і записує їх у змінні $title, $meta_d, $meta_k, $content та ін. Ці дані потім передаються до шаблону дизайну (під кожен компонент можна створювати свій шаблон дизайну ) та виводяться користувачеві у вигляді HTML-сторінки. Наприклад, компонент каталогу, який можна створити в майбутньому, виконував би майже те саме, але з даними про товари - а там своя специфіка, інші поля в таблиці, ітд. Тому для кожного функціонального розділу сайту варто створювати окремий компонент. У схемі MVC (Model-View-Controller) компонент виконує роль моделі.

Створюємо в папці "com" файл "page.php". Вміст файлу:

/* КОМПОНЕНТ СТОРІНКИ */
$alias = $_GET;
$query = "SELECT * FROM pages WHERE page_alias="".$alias."" AND page_publish="Y" LIMIT 1";
$db->run($query);
$ db-> row ();
// ЗМІННІ КОМПОНЕНТА
$id = $db->data;
$alias = $db->data;
$title = $db->data;
$ h1 = $ db-> data;
$meta_d = $db->data;
$meta_k = $db->data;
$s_desc = $db->data;
$component = $db->data;
// ЯКЩО СТОРІНКИ НЕ ІСНУЄ
if (!$id) (
header("HTTP/1.1 404 Not Found");
$component = "ПОМИЛКА 404! Ця сторінка не існує";
}
$ db-> stop ();

5. Створюємо компонент виведення головної сторінки

Головна сторінка у нас у базі даних зберігається під псевдонімом «home», і поки що за своєю структурою не відрізняється від звичайних сторінок сайту – це просто стаття. Проте створимо для неї окремий компонент – на перспективу, так би мовити.


Вміст компонента "home.php" у папці "com" майже збігається з вмістом компонента звичайної сторінки, за винятком рядка запиту до бази та назви компонента. Рядок запиту тепер виглядає так:

$query = "SELECT * FROM wx_pages WHERE page_alias="home" LIMIT 1";

6. Створюємо шаблон дизайну всього сайту

У корені сайту створюємо файл template.php. По суті, це звичайний макет web-дизайну у форматі HTML+CSS, тільки з PHP змінними в потрібних місцях. Між тегами title вставочка, у центральній колонці сайту вставочкаі так по всьому шаблону розставляємо необхідні змінні, які оголошені в компонентах.

У кореневій папці також мають бути папки «css» та «images» для елементів дизайну. У файлі /css/style.css можна налаштувати стилі на свій розсуд.

7. Чисті посилання та файл.htaccess

Для створення чистих посилань я використовую mod_rewrite із прямими вказівками правил для кожного компонента окремо, оскільки розбір адресного рядка засобами самого контролера вважаю зайвим функціоналом. Вміст.htaccess на даному етапі такий:


RewriteEngine On
RewriteBase /

RewriteCond %(REQUEST_FILENAME) !-d
RewriteCond %(REQUEST_FILENAME) !-f

# ЗАБОРОНЕНІ ФАЙЛИ
RewriteRule .htaccess - [F]
RewriteRule template.php - [F]

# ПРАВИЛА mod_rewrite
RewriteRule page/(+)([\/](0,1))\.htm$ index.php?option=page&alias=$1 [L]

У майбутньому ми дописуватимемо правила для компонентів пошуку, каталогу, блогу статей і т.д. Сенс один: перетворити посилання виду «mysite.com/index.php?option=pages&alias=about» на посилання виду «mysite.com/pages/about.htm» - виглядає досить красиво. Намагайтеся у розробці уникати масиву $_GET з метою безпеки та не сподіватися на нього. Доцільно зберігати у ньому лише параметри головного контролера (змінна $option) і компонента (змінна $alias).

Також у кожній папці сайту «про всяк випадок» створіть порожній файл index.html - це потрібно для того, щоб при зверненні до каталогу через адресний рядок нічого не відображалося.

php, mysql, движок сайту, контролер, створення сайту, mvc

2017-01-10


Створюємо динамічний сайт за допомогою php

Привіт шановний відвідувач!

Сьогодні з головної сторінки за допомогою мови програмування PHP створимо динамічну сторінку, яка буде формуватися на сервері при кожному запиті користувачів.

Таким чином, змінивши структуру сайту і наповнивши його подібними сторінками, що змінюються, ми отримаємо динамічний сайт, що надалі дуже значно спростить його технічну підтримку та розвиток в порівнянні зі статичним варіантом.

  • Навіщо потрібний динамічний сайт
  • Як перетворити статичний сайт на динамічний
  • Формуємо блоки динамічного сайту
  • Перетворимо веб-сторінку зі статичної на динамічну
  • Вихідні файли сайту

Навіщо потрібний динамічний сайт

Про те, навіщо потрібен динамічний сайт говорилося на самому початку покрокової інструкції в статті. Тому можна повернутися назад та освіжити це питання.

Також, якщо потрібно додатково розглянути плюси та мінуси статичних та динамічних сайтів, можна порадити ознайомитись на сторінках онлайн довідника "Puzzleweb.ru" з розділом Види сайтів, де досить лаконічно, але в той же час наочно дано пояснення щодо різних варіантів сайтів.

скріншот 12

До цього можна лише додати, що для отримання повноцінного інтернет-ресурсу неможливо пропустити цей крок і залишитися з варіантом статичного сайту.

Тому більше не заглиблюватимемося в теоретичні обговорення необхідності створення динамічного сайту, а перейдемо до розгляду питання про те, як ми це робитимемо.

Як перетворити статичний сайт на динамічний

Як відомо, принципова відмінність динамічного від статичного сайту в тому, що в статичному готові веб-сторінки лежать на сервері і чекають своєї черги для відправки в браузер користувача. При цьому, якщо сторінки матимуть навіть незначні відмінності, скажімо, різниця лише в одній фразі або взагалі в одному слові, то все одно це будуть окремі сторінки.

У динамічному ж варіанті формування сторінок відбувається на сервері при кожному запиті користувача в залежності від запитуваної інформації.

По-простому, це можна порівняти з конструктором, де з обмеженої кількості елементів можна складати велику кількість різних фігур. При цьому, якщо внести будь-яку зміну в один з елементів, воно буде відображатися на всій конструкції, що включає цей елемент.

Виходячи з цього і зробимо з нашої створеної головної сторінки подобу конструктора, що складається з певних елементів (у нашому випадку це будуть файли), з яких згодом збиратимуться веб-сторінки за запитами користувачів.

Для пояснення дій, які будемо виконувати, скористаємося HTML-кодом каркаса головної сторінки, отриманим на одному з етапів створення сайту в статті .

  1. "utf-8" >

    <span><b>заголовок сторінки</b> </span>

    "Description" content = "Короткий опис змісту сторінки" >

  2. "wrapper" >

    Шапка

    Ротатор

    Основний зміст

    Сайдбар

    Підвал

Як видно з HTML-коду, контейнер , призначений для розміщення видимої частини веб-сторінки, містить такі основні блоки:

  • Шапка;
  • Ротатор;
  • Основний вміст;
  • Сайдбар;
  • Підвал.

При цьому слід звернути увагу на те, що чотири з п'яти блоків є спільними, і лише один блок "Основний зміст" буде відмінним для кожної сторінки.

Для отримання елементів динамічного сайту виділимо вміст із цих блоків в окремі файли, які надалі підключатимемо при складанні різних веб-сторінок за запитами користувачів.

Зараз, на цьому етапі цих файлів буде лише п'ять. Але надалі, при додаванні до сайту сторінок або додаткового функціоналу, підключатимуться нові файли, і так далі, при необхідності.

Така побудова структури сайту дозволить надалі не займатися рутинною роботою щодо зміни HTML-коду всіх сторінок у разі заміни або доповнення будь-якого спільного для них фрагмента. У таких випадках достатньо буде внести зміни лише до певного файлу, і на цьому вся процедура заміни буде виконана. Як видно, перевага є.

А ось для того, щоб нам це зробити і знадобиться мова PHP, за допомогою якої веб-сторінки зможуть звертатися до цих виділених блоків і переносити їх вміст.

Якщо комусь ще не доводилося мати справу з мовою PHP, то бажано з нею познайомитися ближче, оскільки PHP є одним з найважливіших інструментів розробки сайтів. Це можна зробити, скориставшись різного роду довідковою літературою, яку на просторах рунету можна знайти у великій кількості.

Як варіант, неодноразово вже згаданий довідник Puzzleweb.ru, в якому одна з його частин приділена темі PHP. Для більш поглибленого вивчення PHP можна також скористатися спеціалізованим довідником, заточеним саме під цю мову, розміщену на сайті "php.ru". За посиланням "https://php.ru/manual/control-structures.intro.html" можна потрапити на його сторінку "Вступ", звідки легко вибрати будь-який розділ довідника, що цікавиться.

Але для того, щоб зараз зробити динамічний сайт і забезпечити можливість підключення файлів до HTML-сторінок достатньо використовувати лише одну мовну інструкцію (у PHP будь-який сценарій складається з послідовності інструкцій). Це може бути одна з чотирьох можливих варіантів інструкцій, призначених для підключення файлів:

  • include;
  • require;
  • include_once;
  • require_once.

Розписувати тут їх особливості немає сенсу, тому що це докладно пояснено в довідниках, наприклад, за посиланням "http://www.puzzleweb.ru/php/26_inc_files.php" можна добре з цим розібратися.

Ми ж при створенні сайту використовуватимемо інструкцію "require_once", зазвичай я використовую цей варіант, для мене він найбільш зручний.

Ну а тепер, коли ми розібралися, що робитимемо, далі перейдемо до практичних дій.

Формуємо блоки динамічного сайту

Для того, щоб сформувати блоки, які потім братимуть участь у збиранні веб-сторінок, в першу чергу необхідно їх створити. Робиться це у текстовому редакторі Notepad++ аналогічно тому, як ми створювали перший файл сайту "index.html" у статті Створюємо веб-сторінку та розміщуємо її на локальному веб-сервері. Тільки розширення у разі потрібно вказувати не "html", а "php". При цьому потрібно обов'язково звернути увагу на кодування, щоб уникнути появи на сторінках різного роду незрозумілих знаків.

Файли створюватимемо в окремій, новоствореній папці "blocks". Для файлів, які є спільними для всіх сторінок, назвемо назви з урахуванням назв відповідних блоків. А для блоку "main" вкажемо певну назву для кожної сторінки сайту.

Таким чином, для головної сторінки до блоку "main" будемо підключати файл під назвою "block_glavnaya". Для інших: "header", "section", "aside" та "footer".

При створенні файлів також можна врахувати, що для спрощення цієї процедури можна скористатися їх копіюванням за допомогою меню "Файл", вказавши при збереженні "Зберегти як" нову назву файлу.

Взагалі створення файлів стандартна процедура, тому складнощів виникнути не повинно. У результаті це має виглядати так.


Потім скопіюємо зміст кожного блоку та перенесемо його у відповідний файл. На прикладі "header.php" розглянемо це докладніше.

1. Відкриваємо в редакторі Notepad++ файл "index.html", виділяємо потрібну область блоку "header" та почерговим натисканням правої та лівої кнопки мишки копіюємо її в буфер обміну.

Слід зазначити, що ми копіюємо весь вміст блоку крім меню. Це з тим, що з відображення активної кнопки меню в атрибутах тега

  • необхідно для кожної сторінки класу class надавати значення "activ". Те саме стосується і аналогічного фрагмента в блоці "footer".

    Надалі ці фрагменти меню в блоках "header" і "footer" ми також винесемо в окремі файли, але зараз не ускладнюватимемо і залишимо їх на колишньому місці.

    Як виділити та скопіювати в буфер обміну фрагмент блоку "header" показано нижче на скріншоті.



    3. І на завершення, для того, щоб зрушити вміст файлу в Notepad++ в ліву сторону, потрібно при натиснутій кнопці "Shift" кілька разів натиснути на "Tab". У результаті отримаємо сформований файл "header.php" у такому вигляді.


    Те саме проробимо і для інших файлів. Нижче на скріншотах показано, як виглядатиме їх вміст після завершення всіх необхідних дій.


    Рис.6 Файл "section.php"


    Рис.7 Файл "block_glavnaya.php"


    Рис.8 Файл "aside.php"


    Рис.9 Файл "footer.php"

    Таким чином ми отримали всі файли для створення динамічної сторінки, і тепер можемо перейти безпосередньо до її HTML-коду.

    Перетворимо веб-сторінку зі статичної на динамічну

    Для того, щоб забезпечити для нашої головної сторінки завантаження файлів, створених у попередньому розділі, необхідно спочатку змінити розширення файлу "index" з "html" на "php", а потім у редакторі Notepad++ знову його відкрити та внести наступні зміни:

    • Видалити вміст блоків, який раніше було перенесено до новостворених файлів.
    • На місце, що звільнилося, записати на мові PHP інструкції "require_once" із зазначенням шляху до відповідних файлів.
    • У тегах меню
    • , в яких вказується шлях до сторінок, для головної сторінки замінити розширення з "html" на "php", а для інших вказати найменування нових сторінок.
    • Вказати у заголовку "Головна".

    Після виконання цих операцій наша головна сторінка має набути наступного вигляду.


    З наведеного скріншота можна помітити, що всі інструкції PHP виділені тегом, що відкриває. Таке позначення прийнято для вказівки коли починати та закінчувати обробку коду, написаного мовою PHP. Тому надалі всі коди PHP виділятимуться цим позначенням.

    Також можна звернути увагу, що найменування нових сторінок зроблено з урахуванням їхнього призначення, так краще сприймається структура та код сайту.

    На цьому усі наші перетворення закінчились. І тепер, якщо знову в браузері відкрити головну сторінку, то ми не повинні побачити жодних змін із попередньою версією сайту, вона має відкриватися так само, як і раніше. Але, якщо в результаті вийде щось не так, то треба шукати допущену помилку у вищенаведених операціях.

    Відновимо зараз браузер та спробуємо відкрити головну сторінку.


    Як видно, у нашому випадку головна сторінка відкрилася без жодних проблем. Але, на відміну від попередньої роботи сайту, сторінка набула такого вигляду внаслідок формування її на сервері під час обробки запиту.

    Таким чином тепер у нашого сайту з'явилася перша динамічна сторінка. І після додавання до нього інших подібних сторінок цей сайт по праву можна буде назвати динамічним з усіма наслідками, тобто. він стане мати всі ті переваги, властиві динамічним сайтам. І в цьому ми зможемо переконатися, коли надалі його наповнюватимемо різного роду функціоналом.

    На цьому ми завершимо цей важливий етап розробки сайту та у наступній статті створимо для нього нові динамічні сторінки. Вихідні коди останньої версії сайту можна завантажити, як і зазвичай, за посиланням наприкінці статті.

    Вихідні файли сайту

    Вихідні файли сайту з оновленнями, які були зроблені в цій статті, можна завантажити з доданих додаткових матеріалів.