Интернет Пресс - программы для Windows и Linux, статьи и материалы о компьютерах, бизнес-предложения.
Главная | Новости | Статьи | Веб-мастеру | Призы и подарки | Архив | RSS-канал | Карта сайта
Написать письмо автору сайта
Поиск
 

Интернет

Автоматизация автоматизации: шаблоны HTML-страниц, PHP
 | 15:40:00 , 21 Февраля 2005

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

[PHP]
<h1>Новости</h1>

<?
$handle=opendir(".");
while ($file = readdir($handle))
if (!ereg("[^0-9-]", $file)) {
print("$file". implode("", file($file)). "

");
}
?>

Присылайте свои новости нам на email.
[/PHP]

Впрочем, это так, для примера, не стоит много внимания уделять. В двух словах, это программа, которая считывает имена файлов в директории, и файлы, у которых имена представляют собой дату ("5-1-2001"), читает и выводит в документ. Разумеется, здесь нет никакой сортировки по дате - новости выводятся сходу, а по-хорошему, их надо считать в массив (если, конечно, массив не будет очень большим) и отсортировать. Благо, специальные функции есть (о них расскажу на следующей неделе в выпуске про массивы).
Разумеется, если автор начнет увеличивать функциональность сайта (нескромно скажу, хотя бы до уровня данного), работать с файлами, в которых есть смесь HTML и кода PHP станет очень неудобно. Если понадобится что-то изменить, придется копаться в нескольких файлах (в основном методом copy/paste), следить за ошибками и так далее - словно FrontPage вернулся в новом обличьи. Можно, конечно, сделать" представляет собой цельный код PHP, в котором все данные выводятся при помощи echo/print), но это тоже не спасает - по выражению моего знакомого, получится "шумный код". Можно оптимизировать его сколько угодно, рассовать операции по множеству функций, но
Еще один вариант автоматизации вывода HTML я недавно увидел на сайте PHP Builder. Вещь эта называется PHP Layout class. Процитирую переведенный мною текст:

[PHP]
<?php
class Anchor {
var $source = "";
var $attributes = array();

function Anchor ($s,$a) {
$this->source = $s;
$this->attributes = $a;
}

function printit() {
echo "Homepage" можно создать при помощи таких строк:

[PHP]
<?php
$a = new Anchor("/index.html",array("href" => "Homepage"));
$a->printit;
?>
[/PHP]
Ну, это еще так себе. Дальше начинаются ужасы.
[PHP]
<?php
newhtml($w);
insert($w,wheader("A Test Page"));
insert($w,$t = table(array("cols"=>"2","width"=>"650")));
insert($t,$c = cell(array("colspan"=>"2")));
insert($c,text("TEST o-nLY"));
printhtml($w);
?>
[/PHP]
Кстати, парсер студии А. Лебедева, судя по документации, автоматизирует работу примерно до той же степени, что и PHP Layout class. Вы не подумайте, что я "кладу" на всё, что не использую. Используйте эти средства! Единственное ограничение - гибкость сайта. В статье авторы пишут "Achieve the most flexbility in web page creation" ("достигнете наибольшей гибкости в создании веб-страниц"). Это не совсем так. При помощи Layout class (а так же Parser-а) можно сравнительно гибко изменять страницы "по кирпичикам", но чтобы целиком... Представьте себе такой диалог между начальиком студии и программистом:
- Как дела с сайтами заказчиков Иванова и Петрова?
- Все отлично, шэф (Иван Иванович, Вано - кому как нравится)! Вчера перевели сайт Иванова на Layout class, а Петрова, как и просили, на Parser. Все работает.
- А теперь поменяйте дизайн на обоих сайтах. На сетевом диске в директории dezign новый вариант оформления.
- Надеюсь, там не много нового?
- Там все новое! Таблицы в других местах, флэш стоит, лэеры (тег <layer> - Д.Л.). Да, кстати, чтобы пользователи старых броузеров не грузили все эти финтифлюшки, сделайте определение user-agent и пусть они будут получать упрощенную версию страниц.
- О, боже! Только не это, шэф!
- Заказчик тре-бу-ет!
В такой ситуации HTML+PHP или "чистый php" выглядят куда безобиднее - "всего-то" несколько дней copy/paste. А ведь, как мы видели, чтобы создать таблицу в Layout class, надо вызвать специальную функцию и указать ей свойства таблицы - тут придется вытаскивать много маленьких кусочков текста. Но, разумеется, если вашему проекту не грозят бурные изменения, флаг в руки! А мы поговорим про шаблоны. Позвольте мне в этот раз не переходить на конкретику, а порассуждать в общих чертах, что нам надо от них.
На чем это все должно работать? На ООП. Так удобнее всего. Мы создаем класс, в котором прописаны все используемые функции (о них - ниже) и свойства шаблона (в том числе и его содержимое).
Собственно, что нам нужно от скрипта? Достать какие-то данные из файлов/БД или откуда-то еще и вставить их в некоторый шаблон форматирования. Возможно, шаблонов формата может быть несколько (как у меня в версии для печати). Поэтому зачем городить огород и держать "все прямо здесь", в скрипте? Итак, первое свойство шаблонов - хранение исходных текстов в файлах.
Второе - переменные. Вот как может выглядеть исходный текст страницы:
[PHP]
<html><head><title>%%TITLE%%</title></head>
<body bgcolor=#%%BGCOLOR%% link=#%%LINK%%>
<h1>%%HEADER%%</h1>

%%MAINTEXT%%

</body>
</html>
[/PHP]
Вызвав специальную функцию, можно указать программе, чем заменить переменную %%TITLE%% и т.д. Причем, желательно, чтобы функция принимала не только пару имя-значение, но и сразу несколько таких пар, то бишь ассоциативные массивы.
Следующее требование к шаблонам - возможность вложенных шаблонов. При этом можно держать корневой файл со всеми заголовками, meta-тегами, таблицей стилей (CSS), а в него в нужное место вставлять нужные шаблоны. У меня для этого есть специальные слоты (%%+PAGEBODY%%).
И еще одна важная вещь - блоки. Например, нам надо вывести на странице список ссылок. Естественно, мы не будем прописывать формат вывода для каждой из них. Мы пойдем проще:

[PHP]
<h1>Ссылки</h1>
<h2>%%CATEGORY%%</h2>

%%LINKTITLE%%

[/PHP]
А в программе сделаем функцию, которой можно было бы задать массив данных, который нужно отформатировать так, как написано в блоке.
И вот, что у нас получается в итоге (названия условны):
Функции: set_var, set_block, drop_var, drop_block, parse, fetch, insert. Свойства класса: content, vars, block, и некоторые служебные свойства типа указателей, что делать с неопознанными переменными (удалить, оставить, поставить тег комментария).

Источник: http://www.dev.vitgroup.com



Оценок этой статье - 7. Средний балл - 4.57 Просмотров - 18296

Выставить оценку статье:


Читайте также:

  • РНР - что в этом слове?
  • Использование каталогов как средство продвижения сайтов.
  • Оптимизация TCP/IP
  • Установка MySQL под Win9x/NT/2000
  • Домашний Apache
  • Apache: полезные советы
  • Использование IFRAME
  • Web-календарь
  • Эффективный баннер
  • Что такое Cookies и с чем их едят
  • Создание мета-тегов
  • Таблица базовых цветов BgColor
  • Описание SSI на русском языке
  • Keywords для начинающих
  • Search Engine marketing - основные проблемы, возникающие в процессе оптимизации сайтов.
  • Таблица основных тегов языка HTML
  • Очень интересный файл HOSTS - рулите своим браузером (Windows XP)
  • Что видят поисковые системы при заходе на сайт?
  • Языки серверных скриптов
  • Немного слов о кодировках

    Все статьи рубрики Интернет





  • Поиск
     

    Размещение рекламы | Контакты

    Главная | Новости | Статьи | Веб-мастеру | Призы и подарки | Архив | RSS-канал | Карта сайта

    Вверх
    Copyright © 2004 - 2018 г. При перепечатке гиперссылка на «Интернет Пресс» обязательна.

     

    Rambler's Top100