Однотипные странички (много страниц с простой сменой дизайна, пример на PHP)

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

Представим, что у нас есть разработанный дизайн web-странички без контента и, к примеру, 30 текстов (статей, интервью, рассказов, стихотворений, листингов и пр.). Наша задача заключается в том, чтобы создавать для текстов свои странички, которые будут отличаться друг от друга лишь содержанием.

Первый способ - очевидный - сделать 30 копий шаблона и вставлять в каждый текст. На этом методе я подробнее останавливаться не буду, потому что итак все понятно. Но у него есть несколько недостатков:
- скучно
- необходимость html-форматирования каждого текста внутри своей странички
- а если текстов 200?!!

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

Для начала возьмем наш шаблон и переименуем его в index.php. Далее, открываем его в блокноте (или другом текстовом редакторе, не сохраняющем форматирование). В том месте, где должны оказаться тексты, будем писать скрипт. Т.е должно получится что-то вроде:
...

...
(Далее буду приводить только текст скрипта.)

В каталоге с index.php создадим папку text и переместим в нее все тексты. Для удобства переименуем эти файлы в text1.txt, text2.txt,...,text30.txt. Пусть заголовком каждой странички будет первая строка соответствующего файла.

Пример:

Про медведя <- заголовок
...
Зимой бурый медведь ложится в спячку. Не дай бог его разбудить!!!
...

Скорее всего, странички должны будут ссылаться друг на друга. Т.е в index.php нужно создать 30 ссылок. Мы делать этого не будем (т.к это удел первого метода), а поступим по-умному:). В том месте html-кода, где должны быть ссылки вставляем еще один скрипт (к первому еще вернемся):

<?php
for($i=1;$i<=30;$i++){
//простейший цикл, который повторится 30 раз и заглохнет
//при этом на первом "обороте" цикла переменная $i равна 1
//на втором - 2
//на последнем - 30
$txt=file("text/text".$i.".txt");
//file читает файл в массив.
//"text/text" - часть пути к файлу, т.е папка и кусок имени файла
//точка складывает (соединяет) строки
//.$i - присоединяем к "куску" значение переменной $i
//.".txt" - добавляем еще расширение
//на пятом витке цикла путь к файлу - "text/text5.txt"
//на каждом витке цикла $txt присваивается новое значение
//в $txt[0] у нас находится заголовок
//далее выводим на экран ссылки (здесь без стилей - их сами подбирайте)
echo<<<a
<a href="index.php?page=$i">$txt[0]</a><br/>
a;
//в этом примере получится 30 ссылок, расположенных в столбик
}
?>

Жмем на вторую ссылку, в адресной строке видим что-то типа: http://localhost/dir/index.php?page=2

Теперь в скрипт index.php передана переменная $page со значением 2. Таким образом мы сможем осуществить вывод на экран содержимого второго текста.

Пора переходить к первому скрипту.

<?php
if(!$page)$page=1;
//если переменная $page не определена, ей будет присвоено значение 1
$txt=file("text/text".$page.".txt');
for($i=0;$i<count($txt);$i++)$txt[$i]=trim($txt[$i]);
//вырезаем все пробелы и newline в начале и конце каждой строки
echo<<<a
<center style="font:20pt 'arial'">$txt[0]</center>
a;
//выводим заголовок
//если нужно, чтобы заголовок оказался в <TITLE> страницы, то:
echo<<<a
<script>
document.title='$txt[0]';
</script>
a;
//а теперь выведем на экран основной текст файла
for($i=1;$i<count($txt);$i++)
echo<<<a
<p style="font:10pt 'arial';text-align:justify">
$txt[$i] </p>
a;
//операторные скобки { } можно опустить, т.к в цикле выполняется
//только один оператор echo.
?>

Получилось? Да!

А теперь попробуйте вставить в файл HTML-код (<font color="red">часть текста</font>) и перезагрузите страницу. Его не видно, но но он отразился на содержании? А если статья о HTML и без тегов не обойтись? Тогда нам нужно немного изменить скрипт.

<?php
if(!$page)$page=1;
$txt=file("text/text".$page.".txt");
for($i=0;$i<count($txt);$i++){
$txt[$i]=trim($txt[$i]);

$txt[$i]=str_replace("<","<",$txt[$i]);
$txt[$i]=str_replace(">",">",$txt[$i]);
//заменяет > и < на соответствующие мнемоники

}
echo<<<a
<center style="font:20pt 'arial'">$txt[0]</center>
<script>
document.title='$txt[0]';
</script>
a;
for($i=1;$i<count($txt);$i++)
echo<<<a
<p style="font:10pt 'arial';text-align:justify">
$txt[$i] </p>
a;
?>

Теперь весь HTML-код, находящийся в файле, не будет восприниматься браузером как код - это просто текст. Таким образом можно организовать online-листинги интересных кодов.

В заключении скажу, что не стоит в качестве переменной $page передавать имя файла целиком. Это создаст огромную дыру в защите сайта. Например, какой-нибудь злой человек введет в строку адреса index.php?page=../index.php
и увидит PHP-код файла index.php. В нашем примере это не так уж и важно (хотя обидно), но если у вас в файле file.dat хранятся какие-либо важные сведения (пароли зарегистрированных пользователей), то это проблема. Запрос index.php?page=../file.dat сведет конфиденциальность к нулю.

Попробуйте изменить скрипты таким образом:

<?php
for($i=1;$i<=30;$i++){
$txt=file("text/text".$i.".txt");
echo<<<a
<a href="index.php?page=text$i.txt">$txt[0]</a><br/>
a;
}
?>

и

<?php
if(!$page)$page="text1.txt";
$txt=file("text/".$page);
for($i=0;$i<strlen($txt);$i++){
$txt[$i]=trim($txt[$i]);
$txt[$i]=str_replace("<","<",$txt[$i]);
$txt[$i]=str_replace(">",">",$txt[$i]);
echo<<<a
<center style="font:20pt 'arial'">$txt[0]</center>
<script>
document.title='$txt[0]';
</script>
a;
for($i=1;$i<count($txt);$i++)
echo<<<a
<p style="font:10pt 'arial';text-align:justify">
$txt[$i] </p>
a;
?>

С другой стороны, вряд ли кому придет в голову хранить в текстовом файле пароли, для этих целей создаются базы данных... Но это уже совсем другая история...

Автор статьи: Фролов Станислав.

Adblock
detector