Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/51: Рейтинг темы: голосов - 51, средняя оценка - 4.75
14 / 14 / 2
Регистрация: 22.09.2010
Сообщений: 227

Простейший движок сайта на PHP

05.08.2012, 07:13. Показов 10542. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!
Понадобилось написать движок для сайта на PHP.
Сайт состоит из ~10 страниц с одинаковыми header и footer.

Получился примерно вот такой kernel.php:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title><?php echo $title; ?></title>
        <?php echo $header; ?>
    </head>
    <body id="main">
        <div id="content">
            <div id="header">бла-бла</div>
            <?php echo $content; ?>
        </div>
        <div id="footer">бла-бла</div>
    </body>
</html>
Новые странички добавляются примерно так:

бла-бла.php:
PHP
1
2
3
4
5
6
7
<?php
    $header = '<link type="text/css" rel="stylesheet" media="all" href="бла-бла" />';
    $content = 'бла-бла';
    $title = 'бла-бла';
    
    include_once './kernel.php';
?>
Но content может содержать php-код, например:

PHP
1
<td><?php echo $abc; ?></td>
И как тогда это все дело засунуть в переменную $content?

Такой способ не катит:
PHP
1
$content .= '<td>'.$abc.'</td>';
Ибо контент может быть очень большим и разбивать его на html и php не хочу, т.к. весь контент потеряет наглядный и редактируемый вид.

Выносить header и footer в отдельные файлы не хочу, мне больше нравится мое решение с шаблоном сайта kernel.php

Добавлено через 1 час 7 минут
актуально
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.08.2012, 07:13
Ответы с готовыми решениями:

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

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

Как написать движок для сайта?
Я выучил хорошо PHP, MySQL, HTML, CSS. Шас взялся за написанием нескольких сайтов. Написать тупую страницу на html без проблем смогу. Я...

33
 Аватар для oshibka404
26 / 25 / 5
Регистрация: 25.04.2012
Сообщений: 73
05.08.2012, 08:21
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title><?php echo $title; ?></title>
        <?php echo $header; ?>
    </head>
    <body id="main">
        <div id="content">
            <div id="header">бла-бла</div>
            <?php eval($content) ?>
        </div>
        <div id="footer">бла-бла</div>
    </body>
</html>
В переменной $content теперь будет надо оставить только PHP-код. Обычный HTML выводить через echo.

А вообще, умение вовремя отказаться от неудачного архитектурного решения важнее умения писать код.
Ваше архитектурное решение неудачно.
1
14 / 14 / 2
Регистрация: 22.09.2010
Сообщений: 227
05.08.2012, 08:46  [ТС]
oshibka404, не меняет суть проблемы.
Цитата Сообщение от oshibka404 Посмотреть сообщение
Ваше архитектурное решение неудачно.
PHP изучаю не так давно. Какое решение на ваш взгляд удачнее? Как вынести структуру html-страницы в отдельный файл?

Добавлено через 2 минуты
PHP
1
2
3
 <?php echo $header; ?>
 бла-бла
 <?php echo $footer; ?>
так на мой взгляд, даже хуже, т.к. в header конкретным страницам нужно подключить собственные стили/скрипты, да и с меню проблема (выделить текущий элемент классом current).

Добавлено через 9 минут
Попробую объяснить на примере:
Например, мы можем зациклить html код, не запихивая его в php-контейнер:
PHP
1
2
3
<?php while() { ?>
<span>бла-бла</span>
<?php } ?>
а можно его таким же способом заключить не в скобки {}, а в ковычки переменной?

Что-то вроде:

PHP
1
2
3
<?php $content = ' ?>
<span>бла-бла</span>
<?php '; ?>
0
Почетный модератор
12274 / 5340 / 268
Регистрация: 05.04.2011
Сообщений: 14,086
Записей в блоге: 2
05.08.2012, 11:41
Я бы на Вашем месте подключала контент не переменной, а include. Иначе будете мучаться постоянно.
1
14 / 14 / 2
Регистрация: 22.09.2010
Сообщений: 227
05.08.2012, 11:44  [ТС]
Taatshi, поподробнее, пожалуйста, пример бы. И include же файлы подключает?
0
Почетный модератор
12274 / 5340 / 268
Регистрация: 05.04.2011
Сообщений: 14,086
Записей в блоге: 2
05.08.2012, 11:53
У Вас сайт с базой данных или нет? Впрочем, неважно.

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

PHP
1
<?php echo $content; ?>
написать

PHP
1
<?php include ("page1.php"); ?>
Или так.

PHP
1
$content = "page1.php";
в нужном месте

PHP
1
<?php include ($content); ?>
1
14 / 14 / 2
Регистрация: 22.09.2010
Сообщений: 227
05.08.2012, 11:55  [ТС]
Taatshi, да, использую её для хранения сотрудников, клиентов и заказов.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
05.08.2012, 13:23
http://www.phpinfo.su/articles... v_php.html
2
14 / 14 / 2
Регистрация: 22.09.2010
Сообщений: 227
05.08.2012, 13:31  [ТС]
Taatshi, я раньше именно так и делал, но этот способ не катит, т.к. $header для разных страниц разный, из-за разных css и js и меню с выделенным текущим элементом.
0
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
05.08.2012, 13:37
Wir2al, статью которую тебе дал KOPOJI прочти "от и до". В ней ответ на все вопросы твои.
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
05.08.2012, 13:40
в ней и в следующей еще немного их там две статьи
0
 Аватар для Денис Н.
463 / 463 / 23
Регистрация: 17.08.2011
Сообщений: 1,488
05.08.2012, 13:52
Цитата Сообщение от Wir2al Посмотреть сообщение
И как тогда это все дело засунуть в переменную $content?
Сделай какую-нибудь функцию типа show() или render()
0
14 / 14 / 2
Регистрация: 22.09.2010
Сообщений: 227
05.08.2012, 13:57  [ТС]
Денис Н., подробнее?
0
 Аватар для Денис Н.
463 / 463 / 23
Регистрация: 17.08.2011
Сообщений: 1,488
05.08.2012, 14:12
Шаблон шаблоном, но если есть логика представления, нужно где-то ее реализовать же

Добавлено через 55 секунд
читай про MVC и попытайся реализовать его в процедурном подходе
0
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
05.08.2012, 14:19
Цитата Сообщение от Денис Н. Посмотреть сообщение
логика представления, нужно где-то ее реализовать же
в шаблоне её нужно реализовывать
http://www.phpinfo.su/articles... v_php.html
0
14 / 14 / 2
Регистрация: 22.09.2010
Сообщений: 227
05.08.2012, 21:20  [ТС]
Почитал статьи, узнал много нового, но новых решений проблемы не увидел. Тот же самый html-шаблон с теми же самыми переменными $content и $title. Снова ведь большой кусок кода уникального content необходимо экранировать и засовывать в переменную.
0
не Администратор ^_^
 Аватар для Unick
988 / 223 / 23
Регистрация: 03.05.2009
Сообщений: 1,493
Записей в блоге: 1
06.08.2012, 00:29
http://php.net/manual/ru/function.eval.php

Что тебе надо?
чтобы шапка и футер были статичными, а менялось только содержание страницы? Учитывая что на странице может быть php код?
0
14 / 14 / 2
Регистрация: 22.09.2010
Сообщений: 227
06.08.2012, 00:39  [ТС]
Unick, вот так хочу:
весь шаблон следующего вида в отдельном файле template.php:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title><?php echo $title; ?></title>
        <?php echo $header; ?>
    </head>
    <body id="main">
        <div id="content">
            <div id="header">
                 бла-бла
                 <?php echo $menu; ?>
                 бла-бла
            </div>
            <?php echo $content; ?>
        </div>
        <div id="footer">бла-бла</div>
    </body>
</html>
На разных страницах разный title, разный контент, разное меню (выделить текущий элемент классом selected), разные подключаемые css и js.

В переменную $header или $title я например могу вписать такое:

PHP
1
2
$header = '<link type="text/css" rel="stylesheet" media="all" href="./css/bla-bla.css" />';
$title = 'Бла-бла';
И меню могу так же сделать. А вот с контентом проблемы: он может быть какого угодно размера и экранировать весь его код и заключать в кавычки переменной $content неправильно и некрасиво. Так как сделать, чтобы в нужном месте шаблона выводился код такого вида:

PHP
1
2
<span><?php echo $abc; ?></span>
<p>Ля-ля-ля Жу-жу-жу</p>
0
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
06.08.2012, 02:30
Цитата Сообщение от Wir2al Посмотреть сообщение
Unick, вот так хочу:
весь шаблон следующего вида в отдельном файле template.php:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title><?php echo $title; ?></title>
        <?php echo $header; ?>
    </head>
    <body id="main">
        <div id="content">
            <div id="header">
                 бла-бла
                 <?php echo $menu; ?>
                 бла-бла
            </div>
            <?php echo $content; ?>
        </div>
        <div id="footer">бла-бла</div>
    </body>
</html>
На разных страницах разный title, разный контент, разное меню (выделить текущий элемент классом selected), разные подключаемые css и js.

В переменную $header или $title я например могу вписать такое:

PHP
1
2
$header = '<link type="text/css" rel="stylesheet" media="all" href="./css/bla-bla.css" />';
$title = 'Бла-бла';
И меню могу так же сделать. А вот с контентом проблемы: он может быть какого угодно размера и экранировать весь его код и заключать в кавычки переменной $content неправильно и некрасиво. Так как сделать, чтобы в нужном месте шаблона выводился код такого вида:

PHP
1
2
<span><?php echo $abc; ?></span>
<p>Ля-ля-ля Жу-жу-жу</p>
НЕ ДОЛЖНО быть переменной $header и $menu
должны быть просто массивы данных, а меню строить в отдельном файле-шаблоне, подключив его в основной шаблон через include
и $content не должно быть - нужно просто для каждого модуля иметь свой отдельный общий шаблон
не надо экономить на шаблонах и лепить общий шаблон - это не правильно, это рано или поздно приводит к хаосу
надо иметь на каждый модуль свой шаблон
в нем и писать

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title><?php echo $title; ?></title>
        <link type="text/css" rel="stylesheet" media="all" href="./css/bla-bla.css" />
    </head>
    <body id="main">
        <div id="content">
            <div id="header">
                 бла-бла
                 <?php echo $menu; ?>
                 бла-бла
            </div>
 
            <span><?php echo $abc; ?></span>
            <p>Ля-ля-ля Жу-жу-жу</p>
 
        </div>
        <div id="footer">бла-бла</div>
    </body>
</html>
1
14 / 14 / 2
Регистрация: 22.09.2010
Сообщений: 227
06.08.2012, 16:33  [ТС]
Василий Макогон, я готов сделать как угодно, лишь бы было правильно и удобно. Просто я не знаю, как обычно это делается и от вас так и не смог этого услышать.

Вот так?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       <?php include_once 'title.php'; ?>
       <?php include_once 'header.php'; ?>
    </head>
    <body id="main">
        <div id="content">
            <div id="header">
                 бла-бла
                 <?php include_once 'menu.php'; ?>
                 бла-бла
            </div>
            <?php include_once 'content.php'; ?>
        </div>
        <div id="footer">бла-бла</div>
    </body>
</html>
Общий шаблон? Т.е. папка templates с файлами main.php, menu.php, header.php? В templates.php все подключается через инклуд, а контент инклудится из основного скрипта страницы page3.php?
Понял, если все получится, то это именно то, что я и хотел тут услышать, спасибо.

Добавлено через 2 часа 55 минут
Сделайте пожалуйста простейший пример этого шаблона. У меня получается полная путаница. Что инклудить в шаблон main.php на место уникального контента? Саму страницу (например, index.php)? Тогда, что должно быть в index.php? Если только один контент, тогда откуда брать header например или title? Создавать несколько файлов для одной страницы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.08.2012, 16:33
Помогаю со студенческими работами здесь

Движок для партнерки на php
Здравствуйте! Нужен движок для своей партнерской программы (должна быть реферальная система, панель вебмастера и рекламодателя, панель...

Где можно скачать простейший скрипт чата в одном файле на PHP?
Где можно скачать простейший скрипт чата в одном файле на PHP?

Простейший вывод категорий сайта через GET
Привет, хочу чтобы при переходе по ссылке категории я получал на страничке сообщение с именем выбранной категории. я новичек , поэтому...

Простейший торрент-трекер на php
решил написать простейший торрент трекер себе на сайт чтобы вся инфа хранилась не на обменниках а передовалась спомощью клиента бит торрент...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru