Какой хороший способ отделить фоновый код от кода отображения HTML?

Вот примерная картина того, как я храню свои файлы и что они делают.

index.php в начале отображает начальные теги HTML и включает header.php (блок ссылок), а в самом конце включает footer.php, который отображает конечные теги HTML. Между этим index.php принимает все данные, вводимые пользователем из параметров GET, форм POST и т. Д., И получает данные из базы данных (functions.php и mysql_functions.php). Для отображения основного содержимого он включает файл шаблона PHP на основе любой страницы, запрошенной пользователем, например: index.php? P = page1 включает template_page1.php.

Информация, которая будет отображаться в файле шаблона, хранится в массиве, а не в простых переменных, поэтому в шаблоне у меня есть то, что выглядит следующим образом:

<title><?php echo $content['page_title']; ?></title>

И

<div>
    <?php
        foreach($name as $content['names']){
            echo '<p>'.$name.'</p>';
        }
    ?>
</div>

В файлах шаблонов нет действительно тяжелого кода, только циклы и базовые операторы if. Тяжелая работа выполняется в index.php и файлах функций.

Иногда мне кажется, что это может быть взломано и беспорядочно, и это не лучший способ делать что-то. На днях я посмотрел на систему шаблонов (Code Igniter), и мне показалось, что это сложно с таким количеством разных файлов, которые нужно изменить, просто чтобы отобразить некоторый контент.

Могу ли я высказать несколько критических замечаний и некоторые плюсы / минусы того, как я это делаю, и некоторые идеи, как я мог бы это сделать лучше?


person user1887049    schedule 12.12.2012    source источник
comment
Я не знаю воспламенителя кода, но он действительно отличается от других систем шаблонов. Вам стоит взглянуть на Smarty.   -  person Sebastien C.    schedule 23.10.2013


Ответы (2)


Ты прав. Сложить много кода в один файл - не лучшая практика. Однако, если вы новичок в PHP, вам пока не стоит особо об этом беспокоиться. Я не могу полностью представить вашу файловую структуру в своей голове, но я думаю, что у меня есть идея.

Попробуйте поместить все функции PHP и еще много чего в другие файлы и использовать как можно меньше PHP в index.php. Однако убедитесь, что у вас не слишком много ненужных файлов (по одному на каждое событие / функцию).

person Pon-3    schedule 12.12.2012

По крайней мере, была бета-версия Template Toolkit на php. Но оригинал на perl - это, по сути, другой язык. Это довольно мощно.

Оригинал есть на CPAN. Текущая версия, я думаю, 2.25.

В моей системе веб-строительства контент и разметка почти полностью разделены.

Это основная страница перед добавлением контента:

[% PROCESS header.inc 
    Title = "Sherwood's Forests -- Seedling Sales" 
    Desc = "Sherwood's Forests Pre-season orders for little Trees."
%]

<DIV id="content">
[% FILTER multimarkdown %]


# Seedling Sales 2014

<div markdown="1" class=picr>

![Picture alternate text][/base-absolute/path/to/image.jpg]

</div>

Please be patient

#### This file is still germinating 


[% PROCESS Copyright.inc %][% END %]



</div>
[% INCLUDE footer.inc %]

Весь контент проходит между строкой ФИЛЬТР, а нижний Контент записывается в разметке. позволяет мне разместить изображение в правой части столбца. CSS полностью жидкий, поэтому экран все еще можно использовать (почти) на iPhone.

Большая часть магии находится в header.inc. Он читает файл fileindex.txt, который, по сути, является деревом меню для всего веб-сайта. Нет java. Все статические сайты.

Fileindex.text выглядит так:

ABBAB:f:/Home/Business_Stuff/Inventory.html:3:Inventory.html:Inventory
ABCAB:f:/Home/Business_Stuff/Ordering.html:3:Ordering.html:Ordering
ABDAB:f:/Home/Business_Stuff/Prices.html:3:Prices.html:Prices
ABJAB:f:/Home/Business_Stuff/Business_Stuff.html:3:Business_Stuff.html:Business Stuff
ADAAA:d:/Home/Services:2:Services:Services
ADJAB:f:/Home/Services/Christmas_Trees.html:3:Christmas_Trees.html:Christmas Trees
ADKAB:f:/Home/Services/Custom_Growing.html:3:Custom_Growing.html:Custom Growing
ADLAB:f:/Home/Services/Nature_Walks.html:3:Nature_Walks.html:Nature Walks

Алфавитный указатель в начале определяет порядок сортировки индекса. d или f - это каталог или файл. Число - это количество уровней ниже в иерархии меню. Затем файловая составляющая полного пути. Наконец, текст, используемый для имени ссылки. Кое-что из этого дублируется более ранними изменениями, но исправлять это не стоило. «Пока не оптимизируйте». Последнее поле позволяет указать имя ссылки, отличное от имени файла. Это мало используется.

Сам файл fileindex.txt создается Perl-программой MakeFileIndex. Он использует два источника информации: результаты поиска. запустить в исходном дереве и файл tt2seq, который имеет необязательные переопределения в порядке пунктов меню.

Я хочу добавить новую страницу на свой сайт.

Скопируйте первый файл в соответствующий каталог. Измените содержимое этого файла моим новым содержимым. Если он должен отображаться не в алфавитном порядке, я должен добавить строки в tt2seq, чтобы контролировать это. Запустите MakeFileIndex. Запустите ttree -a (утилита в Template Toolkit). Это обновит все пункты меню в каждом файле.

Убедитесь, что страница выглядит так, как я хочу. Если нет, то заново отредактируйте. Повторите запуск ttree для файла, который я только что отредактировал. Когда я буду счастлив, синхронизируйтесь с моим сервером.

В итоге, время, которое я трачу на механику, крошечное по сравнению со временем, которое уходит на написание.

Если я решаю переупорядочить сайт, я просто перемещаю файлы по дереву каталогов и перестраиваю. Это НЕ исправляет какие-либо внутренние ссылки в блоках содержимого.

Созданный таким образом сайт называется http://sherwoods-forests.com. Это старомодный сайт. Акцент делается на содержании, а не на шипении. Но это хорошая система для создания статических страниц.

person Sherwood Botsford    schedule 29.01.2014