Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для evgejka
0 / 0 / 1
Регистрация: 13.12.2013
Сообщений: 17

Шаблонизатор на работает как надо

13.12.2013, 17:00. Показов 1179. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем форумчанам, сразу хочу сказать, что php я изучаю совсем не надо.
По поводу велосипеда, хочется для практики по изобретать)))
Ближе к делу, есть такой класс шаблонизатора:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
 
class Tpl {
 
    public static $val = array();
    public static $content;
 
    public static function index($tpl_name) {
 
        if(empty($tpl_name) OR !file_exists('templ/'.$tpl_name)) {
            die('Ошибка, шаблон templ/'. $tpl_name . 'не найден!');
        } else {
            self::$content = implode('', file('templ/'.$tpl_name));
        }
    }
 
    public static function templ_inc($tpl_name) {
 
        if(empty($tpl_name) OR !file_exists('templ/'.$tpl_name)) {
            die('Ошибка, шаблон templ/v1/'. $tpl_name . 'не найден!');
        } else {
            $content = implode('', file('templ/'.$tpl_name));
            return $content;
        }
    }
 
    public static function assign($key, $var) {
 
        $key = '{'.$key.'}';
        self::$val[$key] = $var;
    }
 
    public static function set_block($b_tag, $true) {
 
    if($true) {
    self::$content = preg_replace("/\[{$b_tag}\](.*?)\[\/{$b_tag}\]/is", "$1", self::$content);
    } else {
    self::$content = preg_replace("/\[{$b_tag}\](.*?)\[\/{$b_tag}\]/is", "", self::$content);
    }
 
  }
 
    public static function display() {
        foreach(self::$val as $find => $replace) {
            self::$content = str_replace($find, $replace, self::$content);
        }
 
        echo self::$content;
    }
}
 
?>
Есть файл index.php
PHP
1
2
3
4
5
<?php
require_once('tpl.class.php');
Tpl::index('main.tpl');
include('news.php');
Tpl::display();
Так же файл news.php
PHP
1
2
3
4
<?php
Tpl::assign('title', 'Новости!');
Tpl::assign('content', Tpl::templ_inc('news_all.tpl'));
?>
И сообственно шаблоны
main.tpl
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
    <title>{title} | abcde</title>
    <meta http-equiv="content-type" content="text/html;charset=windows-1251">
</head>
<body>
<a href="#">LinkM</a>
<a href="#">LinkM</a>
<a href="">Ссылка</a><br />
    {content}<br />
</body>
</html>
news_all.tpl
HTML5
1
2
3
4
5
6
7
8
<a href="#">asdasdasd</a>
Добро пожаловать!
<a href="#">asdasdasd</a>
Добро пожаловать!
<a href="#">asdasdasd</a>
Добро пожаловать!
<a href="#">asdasdasd</a>
Добро пожаловать!
Собственно проблема вот в чем, когда в браузере я проверяю исходный код страницы - то наблюдаю такую ерунду:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<html><head>
    <title>Новости! | abcd</title>
    <meta http-equiv="content-type" content="text/html;charset=windows-1251">
</head>
<body>
<a href="#">LinkM</a>
<a href="#">LinkM</a>
<a href="">Ссылка</a>
<br><br>
<a href="#">asdasdasd</a>
"
Добро пожаловать!
"
<a href="#">asdasdasd</a>
"
Добро пожаловать!
"
<a href="#">asdasdasd</a>
"
Добро пожаловать!
"
<a href="#">asdasdasd</a>
"
Добро пожаловать!
"
<br>
</body></html>
Что еще за " Добро пожаловать! "

Смотрел и через хром и через оперу.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.12.2013, 17:00
Ответы с готовыми решениями:

Не работает как надо
В таблице ADOTList есть два поля: &quot;Сушилка&quot; и &quot;Код&quot;. Так вот. Нужно чтобы в DBEdit2 формы FRezultat отображалось поле &quot;Сушилка&quot;...

Программа не работает как надо
Вот допустим у нас есть код: znakomstv = False znakomstvo = zovut = while True: vopros = input(&quot;Чем я могу...

не работает dvd как надо
компу пол года ставляю пустой dvd комп зависает вытаскиваеш его сразу комп продолжает работать. если вставить болванку с даными то всё...

10
284 / 283 / 73
Регистрация: 06.05.2013
Сообщений: 1,613
13.12.2013, 17:10
PHP
1
Tpl::assign('content', Tpl::templ_inc('news_all.tpl'));
может у Вас несколько файлов с одинаковыми названиями есть и у Вас просто путь указан не полностью?
0
 Аватар для evgejka
0 / 0 / 1
Регистрация: 13.12.2013
Сообщений: 17
13.12.2013, 17:11  [ТС]
Да нет, файла всего 2, и путь указан полностью. Уже пару часов голову ломаю.
0
284 / 283 / 73
Регистрация: 06.05.2013
Сообщений: 1,613
13.12.2013, 17:13
Так, проблемы в кавычках что ли?
0
 Аватар для evgejka
0 / 0 / 1
Регистрация: 13.12.2013
Сообщений: 17
13.12.2013, 17:17  [ТС]
Да, проблема в ковычках, которые я вижу уже в исходном коде с браузера!
0
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
15.12.2013, 13:13
изучаю php совсем недавно и хочу написать шаблонизатор - понятия несовместимые
http://www.phpinfo.su/articles... v_php.html - читать до полного просветления
грубо говоря вы сейчас с этим дурацким шаблонизатором придете в тупик, потратите кучу времени и сил на то, что заложено в самом языке.
ибо по определению, шаблонизатор - это либо возможности самого языка, либо отдельный язык-надстройка.
вы способны написать язык программирования? судя по коду - нет. шаблонизатор надо писать не с помощью рег. выражений, а на конечных автоматах или иной модели.
все это нетривиально и никто этим не занимается. это просто никому не нужно.

изучать php можно на других, более интересных и куда более полезных задачах
0
 Аватар для evgejka
0 / 0 / 1
Регистрация: 13.12.2013
Сообщений: 17
15.12.2013, 15:25  [ТС]
Цитата Сообщение от Василий Макогон Посмотреть сообщение
изучаю php совсем недавно и хочу написать шаблонизатор - понятия несовместимые
http://www.phpinfo.su/articles... v_php.html - читать до полного просветления
грубо говоря вы сейчас с этим дурацким шаблонизатором придете в тупик, потратите кучу времени и сил на то, что заложено в самом языке.
ибо по определению, шаблонизатор - это либо возможности самого языка, либо отдельный язык-надстройка.
вы способны написать язык программирования? судя по коду - нет. шаблонизатор надо писать не с помощью рег. выражений, а на конечных автоматах или иной модели.
все это нетривиально и никто этим не занимается. это просто никому не нужно.

изучать php можно на других, более интересных и куда более полезных задачах
Давайте не будем холиварить нативный или нет. Меня интересует данный код, если есть ошибка - то, если вас не затруднит, покажите мне её.
0
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
15.12.2013, 15:49
какой холивор? )))
ваш т.н. шаблонизатор - мертворожденный. он никому не нужен, в т.ч. и вам. вы это поймете позже, когда споткнетесь об реальные задачи.
0
 Аватар для evgejka
0 / 0 / 1
Регистрация: 13.12.2013
Сообщений: 17
15.12.2013, 16:12  [ТС]
Цитата Сообщение от Василий Макогон Посмотреть сообщение
какой холивор? )))
ваш т.н. шаблонизатор - мертворожденный. он никому не нужен, в т.ч. и вам. вы это поймете позже, когда споткнетесь об реальные задачи.
Простите конечно, но не вам решать, нужен он мне или нет. Вам есть что сказать по теме? Если нет - прошу не засорять тему.
0
Иллюзионист
 Аватар для philin
154 / 153 / 27
Регистрация: 02.10.2013
Сообщений: 330
15.12.2013, 18:34
Пустые строки, BOM-символы (скорее всего, в подключаемых файлах). Помогает конвертация в utf-8 без BOM
0
 Аватар для evgejka
0 / 0 / 1
Регистрация: 13.12.2013
Сообщений: 17
15.12.2013, 20:10  [ТС]
Цитата Сообщение от philin Посмотреть сообщение
Пустые строки, BOM-символы (скорее всего, в подключаемых файлах). Помогает конвертация в utf-8 без BOM
Проверяю специальном скриптом, он говорит, что нету у меня ни одного файла с BOM.
Сам скрипт
Кликните здесь для просмотра всего текста

<?
xdir('.',0);
xdir('./templates/v1',1);
xdir('./core',1);

function xdir($path,$recurs) {
global $find;
if ($dir = @opendir($path)) {
while($file = readdir($dir)) {
if ($file == '.' or $file == '..') continue;
$file = $path.'/'.$file;
if (is_dir($file) && $recurs) {
xdir($file,1);
}
if (is_file($file) && strstr($file,'.php')) {
$f = fopen($file,'r');
$t = fread($f, 3);
if ($t == "\xEF\xBB\xBF") {
$find = 1;
echo "$file<br>\n";
}
fclose ($f);
}
}
closedir($dir);
}
}
if ($find == 0) echo "All clear";
?>


Не по теме:

К тому же я пользуюсь Sublime text 3, а он по дефольту вроде как сохраняет utf 8 with out BOM

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2013, 20:10
Помогаю со студенческими работами здесь

Деление не работает как надо
я конечно не мастер но не пойму. У меня почему то не происходит деление. чтобы я не делал d присваивается 0 хз почему. //...

Маршрутизатор не работает как надо
Проблема такая. У меня стоит маршрутизатор Tp-link на стационарном компе, интернет МТС, до какого-то времени связь была нормальной,...

Parallel.For не работает как надо
Здравствуйте. Можете подсказать, что я делаю не так? public static int BmpToIntArray(Bitmap bmp) { ...

Работает не так как надо
я ввожу ааа - выводит qqq а должен выводить qaz что нужно поменять? хотя бы на примере первого цикла void tras::EncButtonClick()...

Не работает как надо mktime()
Здравствуйте! Я не понимаю почему так... var_dump(date(&quot;F&quot;,mktime(0,0,0,1))); Мне выводит &quot;January&quot;. Вроде все правильно, но ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
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
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru