Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для Defake
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191

Шаблонная система через file

29.06.2013, 21:26. Показов 1397. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть страничка market.php с кодом:

PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
include('config.php'); /* Эта строка, в принципе, есть и в файле, который читается (index.php), но код php не воспринимается. Подробнее ниже. */
$mass = file('index.php');
$i = 0;
 
for ($i; $i<count($mass); $i++) {
    echo $mass[$i];
}
 
 
?>
Весь код HTML из файла index.php считывается, но код php не выполняется. Например, есть строки типа:

PHP
1
2
3
4
<img src="<?php echo($top_logo_url); ?>" style="padding-left:18px;" />
//Так же есть строка, которая импортировала файл конфиг:
include('config.php');
//Но она не работала, так что ее пришлось переместить в сам файл странички market.php.
Как заставить читать код php в файле index.php так же, как и код html?

Ну, я так понял, что весь код он понимает, как строку, которую тупо печатает. Есть какие-нибудь способы выполнить код php из строки, кроме ее закрытия? (Пробовал так извращаться - не получилось) Или это как-то по-другому можно реализовать? Просто сверстал шаблончик, не очень хочется разбивать его на include(top) и include(foot). Ищу способы использовать "шаблон", как умею)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.06.2013, 21:26
Ответы с готовыми решениями:

Не грузится система, ошибка File not found
Стоит виновс 10 и solydk (debian) на pc c uefi,виндовс грузиться без проблем а линукс перестал я его переустанавливаю и при загрузке любого...

Работа с файлами через FILE
Доброго времени суток! Нужена ли эта строка при откритии файла FILE *file; file = new FILE;//вот эта строка нужна ли file =...

Работа через File Mapping
Ребят, помогите... В общем мне нужно: открывать файл через File Mapping и выдёргивать из него байтовые блоки информации (где-то 4 байта,...

15
14 / 14 / 4
Регистрация: 21.04.2012
Сообщений: 393
29.06.2013, 21:32
Вы же читаете файл в переменную, поэтому логично что всё выводится как текс. Попробуйте прогнать в цикле все строки массива через функцию eval, но тогда придётся думать что-то по поводу html кода. Либо выводить его тоже при помощи php либо делать какую то проверку в цикле
1
 Аватар для Stifard
5 / 5 / 1
Регистрация: 12.05.2013
Сообщений: 37
29.06.2013, 21:38
Видимо кто-то не знает как работает php

Добавлено через 1 минуту
http://phpfaq.ru/na_tanke
0
14 / 14 / 4
Регистрация: 21.04.2012
Сообщений: 393
29.06.2013, 21:40
Так работает
PHP
1
2
3
4
5
6
$mass = file('1.php');
$i = 0;
 
for ($i; $i<count($mass); $i++) {
    eval($mass[$i]);
}
причём в файле нет чистого html и нету никаких <?php, <? и т.д. Пример:
echo "html";
1
 Аватар для Stifard
5 / 5 / 1
Регистрация: 12.05.2013
Сообщений: 37
29.06.2013, 21:42
include\require ?
0
14 / 14 / 4
Регистрация: 21.04.2012
Сообщений: 393
29.06.2013, 21:44
но если вам нужен более менее нормальный вариант, то почитайте про MVC. Можете использовать такую функцию:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
function Template($fileName, $vars = array())
    {
        // Установка переменных для шаблона.
        foreach ($vars as $k => $v)
        {
            $$k = $v;
        }
 
        // Генерация HTML в строку.
        ob_start();
        include $fileName;
        return ob_get_clean();  
    }
где 1 параметр имя шаблона, а второй параметр - это массив переменных, которые планируется использовать в шаблоне
1
 Аватар для Defake
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
29.06.2013, 22:08  [ТС]
@Rayzor92, про MVC как-то увидел и ужаснулся: кода дофига (Ну по крайней мере в той статье, что я видел). Ваш пример с eval не понял категорически (особенно что вы про скобки писали) никаким способом это у меня не заработало, только выдало страничку ошибок по 1-й строке.
@Stifard, эта статья должна была помочь мне решить проблему? Увы, нет.
В смысле? Вам не понравилось, что я написал include вместо require
0
 Аватар для Stifard
5 / 5 / 1
Регистрация: 12.05.2013
Сообщений: 37
29.06.2013, 22:15
эта статья должна была помочь мне решить проблему? Увы, нет.
зря
Кликните здесь для просмотра всего текста
php код обрабатывается интерпретатором,а не браузером - поэтому и
код php не выполняется


Добавлено через 47 секунд
Как работает РНР, где он выполняется?
РНР выполняется на сервере. Браузер посылает серверу запрос на страницу с php кодом. Сервер отдает эту страницу на исполнение интерпретатору PHP, интерпретатор генерирует HTML код, отдает серверу, а сервер посылает клиенту. Никакого РНР кода в браузер не попадает (это важно! Это значит, что увидеть исходный код PHP скрипта невозможно!).
0
 Аватар для Defake
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
29.06.2013, 22:18  [ТС]
@Stifard, ну как бы я это уже понял. Я не знаю, как сделать так, чтобы код-таки прочитался
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
29.06.2013, 22:25
в 6 сообщении вам уже ответили, как лучше. Правда, я бы его чуть по другому написал
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function Template($fileName, $vars = array(), $return = false)
    {
        $fileName .= preg_match('~\.php$~i', $fileName) ? '' : '.php';
        // Установка переменных для шаблона.
        empty($vars) || extract($vars);
        if(!$return)
        {
            include $fileName;
            return ;
        }
        // Генерация HTML в строку.
        ob_start();
        include $fileName;
        return ob_get_clean();  
    }
конечно, если забыть о всяких проверках на существование файла и т.п.
1
 Аватар для Defake
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
29.06.2013, 22:35  [ТС]
@KOPOJI, ясно) Просто с моими знаниями не дано понять, что это именно то верное решение, что мне нужно. Спасибо. Сейчас спать, а завтра разбирать все построчно %)

Добавлено через 2 минуты
Стоп... А точно понятно, что мне нужно сделать?) Есть файлик с контентом. Я хотел построчно считывать текст шаблона до определенной строки (скажем, когда $k станет равно false). Дальше прочитать сам контент, а затем продолжить считывать файл шаблона.. Это то?))
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
29.06.2013, 22:41
неа, не то.. это подключение шаблона, в котором можно работать с переменными и php-кодом "как есть"..
0
14 / 14 / 4
Регистрация: 21.04.2012
Сообщений: 393
30.06.2013, 00:18
Defake по 1 строке вам выдаёт, потому что вы там наверняка писали что то типо <?php я же говорил не надо в том файле этого писать. Только так:
PHP
1
2
$a = 5;
echo $a;
НО НЕ ТАК:
PHP
1
2
3
<?php
$a = 5;
echo $a;
0
 Аватар для Defake
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
30.06.2013, 09:49  [ТС]
@Rayzor92, я и так и эдак пробовал. Наверное, из-за того, что в 1-й строке у меня doctype)
А можно подключить этот шаблон, как есть, а на месте контента поставить переменную, и ее значение присвоить тому коду, который является контентом для данной страницы? Только это все ведь многострочное дело. А переменные многострочные ведь никак не сделать

Добавлено через 8 минут
Так, ладно. А если загружать этот шаблон, и обновлять только блок div id="content". То есть шаблон один, страничек как таковых нету, только само содержимое страниц. Это делать через ajax или iframe?
..При iframe скорее всего скролл будет у самого блока. А мне нужно, чтобы скролл только у всей страницы был. Все же правильно, это ajax умеет? Можете подсказать откуда начать рыть? =)

(Или это еще маразматичнее, чем идея с шаблоном?)
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
18.05.2016, 06:29
Похоже Вы сами не знаете что Вам нужно, я не понимаю зачем считывать файл шаблона построчно чтобы потом его вывести? Простого include Вам не достаточно? или я что-то не понимаю?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
18.05.2016, 19:53
Igsit, думаете, спустя три года, ТС определился?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.05.2016, 19:53
Помогаю со студенческими работами здесь

Не открывается файл через File->Open
С Visual столкнулся только сейчас, С++ знаю. Автоматически (WorkSpace-&gt;New) создаю стандартный документ, но после компиляции и запуска,...

Межпроцессное взаимодействие через file mapping
Есть такое задание на взаимодействие процессов: писатели пишут книги, которые затем продаются в книжном магазине. Читатели покупают книги....

Добавление изображения в бд через type=file
При добавлении картинки в бд через поле type=file вместо нормального пути выводится C:fakepath. Прочитал, что это сделано для безопасности....

Работа с файлами через System::IO::File
У меня есть функции encode() и decode(), которые выполняют определенные операции со строками (эти операции очень сложные). Но с содержимым...

Выбрать папку через open file dialog
мне надо сделать возможность выбирать папку или файл через openFileDialog, просто получить путь к папке\файлу. Можно ето както реализовать?


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
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