Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблонизатор своими руками 
:(
    Опции темы
Fortop
Дата 1.8.2008, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(alexey009 @  1.8.2008,  20:55 Найти цитируемый пост)
foreach НЕ ПОЙДЕТ, т.к. он по жизни тормознутый.

мда...

Без обид, но ты мерял? Или просто слышал?
Сделай рабочий сайт и профайлинг ему.... результаты тебя удивят.


Цитата(alexey009 @  1.8.2008,  20:55 Найти цитируемый пост)
Отсюда - может мне ввобще нафиг шаблнизатор и html коды пихать в php файлы и все?
Знатоки, что посоветуете? 

Почитай другие темы про разделение логики и представления. Про архитектуру MVC.

Шаблоны/Представления должны быть отдельно от логики... но лучше всего если они будут из себя представлять обычные phtml файлы. Тогда и циклы и условия все будет у тебя легко и просто.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
alexey009
Дата 1.8.2008, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 28.7.2008

Репутация: 2
Всего: 2



Цитата(Fortop @  1.8.2008,  21:42 Найти цитируемый пост)
Без обид, но ты мерял? Или просто слышал?Сделай рабочий сайт и профайлинг ему.... результаты тебя удивят.

читал и сам проверял..  работет медлено..

Цитата(Fortop @  1.8.2008,  21:42 Найти цитируемый пост)
Шаблоны/Представления должны быть отдельно от логики... но лучше всего если они будут из себя представлять обычные phtml файлы. Тогда и циклы и условия все будет у тебя легко и просто.

я вообще-то про это и говорю, что это и есть шаблонизатор, а в смарти(если его все-таки использовать) как циклы выводить "без заноса" логики в шаблон!(см. предыдущий пост) smile 
PM MAIL   Вверх
Fortop
Дата 1.8.2008, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(alexey009 @  1.8.2008,  22:06 Найти цитируемый пост)
читал и сам проверял..  работет медлено..

Позволь усомниться... 
Как проверял?

Если не затруднит, скриншот из http://sourceforge.net/projects/wincachegrind smile

Цитата(alexey009 @  1.8.2008,  22:06 Найти цитируемый пост)
я вообще-то про это и говорю, что это и есть шаблонизатор,

Кто мешает использовать простой include?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
alexey009
Дата 1.8.2008, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 28.7.2008

Репутация: 2
Всего: 2



Цитата(Fortop @  1.8.2008,  22:18 Найти цитируемый пост)
Кто мешает использовать простой include?

Читал предыдущие посты?
Цель - весь шаблон страницы должен лежать в одном файле(index.tpl), а не разбивать его на header, body, footer;
а далее body разбивать на left_menu, right_menu, main.
а их уже разбивать на более мелкие детали... ну не маразм? smile 

Вообщем пока у меня один вариант виден: дописывать собственный шаблон.
Кстати, про компиляцию, как организовать и нужло ли это вообще?
PM MAIL   Вверх
Kefir
Дата 1.8.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



alexey009, постой-постой, ты разделяй код, занимающимся доставкой и обработкой данный от логики представления, так сказать. суть шаблонизатора как раз их и разделить.
задача: вывести новости на экран. делим на две части - достать новости из БД и отобразить их. ты, соответственно, достаёшь новости и получает, по сути, массив обьектов. так выполнена первая задача - бизнес логика. вторая задача - отобразить их. эту задачу и решает шаблонизатор. в бизнес логике ты вообще не думаешь о том как и где эти данные будут отображаться, ты просто говоришь шаблонизатору - "вот тебе новости, покажи мне их на экране!". и уже в шаблонизаторе эти новости превращаются в пхп-код.

и вообще, кроме так и понял чем смарти не подошёл (говорю ибо вижу, что написание шаблонизатора началось именно из-за отсутствия подходящего продукта)- вроде всё ж есть.

компиляция нужна обязательно, имхо. организовать - так как я уже говорил. парсер и проверка на изменения шаблонов.
PM MAIL WWW Skype   Вверх
alexey009
Дата 1.8.2008, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 28.7.2008

Репутация: 2
Всего: 2



Kefir, есть мой пост в конце 2 странице - http://forum.vingrad.ru/index.php?showtopi...t&p=1598812

Соответственно ответы на него не уведил.. smile 
PM MAIL   Вверх
Fortop
Дата 1.8.2008, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(alexey009 @  1.8.2008,  22:45 Найти цитируемый пост)
Цель - весь шаблон страницы должен лежать в одном файле(index.tpl), а не разбивать его на header, body, footer;
а далее body разбивать на left_menu, right_menu, main.
а их уже разбивать на более мелкие детали... ну не маразм?
\
Нет не маразм. Страница у тебя собирается из деталей того уровня, который тебе нужен. Не нужна более мелкая детализация - не делай ее

Но я бы предпочел такой, index.phtml
Код

include 'header.phtml';
include 'body.phtml';
include 'footer.phtml;


Если тебе нужна более продвинутая манипуляция, то рекомендую...
Посмотри, как организованы View + Layout  в Zend Framework

Цитата(alexey009 @  1.8.2008,  23:12 Найти цитируемый пост)
Kefir, есть мой пост в конце 2 странице - http://forum.vingrad.ru/index.php?showtopi...t&p=1598812
Соответственно ответы на него не уведил..

Кхм, а где ответ про foreach?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
alexey009
Дата 1.8.2008, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 28.7.2008

Репутация: 2
Всего: 2



Цитата(Fortop @  1.8.2008,  23:24 Найти цитируемый пост)
Кхм, а где ответ про foreach?

вообще то это один из вопросов.
про организацию циклов на конкретном примере я так и не увидел вразумительного ответа...
а про foreach возможно я ошибся, так что за этот ответ спасибо.
PM MAIL   Вверх
Kefir
Дата 1.8.2008, 23:33 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



ну раз тебе надо поцитатно  smile 
Цитата(alexey009 @  1.8.2008,  20:55 Найти цитируемый пост)
foreach НЕ ПОЙДЕТ, т.к. он по жизни тормознутый.

очень хорошая конструкция. зря ты так. даже ЕСЛИ (не будем мерится циклами) твой код будет выполняться на 0.001 секунду дольше - ничего страшного.

Цитата(alexey009 @  1.8.2008,  20:55 Найти цитируемый пост)
а в чем собвственно заключается шаблонизатор?

коротко - в разделении логики и представления.

Цитата(alexey009 @  1.8.2008,  20:55 Найти цитируемый пост)
половина кода в php файле, а другая половина уже в самом шаблоне.
где плюсы? 

опять приходится повторяться - есть логика которая бизнес, а есть логика представления. первая отвечает за то, чтобы достать и обработать данные (к примеру, сделать запросы в БД, отсортировать и/или отфильтровать полученные данные). вторая - за то как данные будут отображены. к примеру, надо чтобы у новости с пометкой Important был красный фон. к бизнес логике это не относится - сам понимаешь, то есть в класс News приделать поле BackgroundColor это всё равно что водителей трамваев в трамваям гвоздями прибивать. а раз это относится к логике представления - это должно быть реализовано в самом шаблоне. понял?

Цитата(alexey009 @  1.8.2008,  20:55 Найти цитируемый пост)
может мне ввобще нафиг шаблнизатор и html коды пихать в php файлы и все?

ну скажем так - главное чтобы тебе это нравилось В))) а по хорошему - ни в коем случае.


ЗЫ всё то же самое я писал и в предыдущем посте, но, к сожалению, ты почему-то не увидел этих ответов.

Добавлено через 1 минуту и 19 секунд
alexey009, а что органихация циклов то? чем цикл от ифа отличается? вот и подумай smile
PM MAIL WWW Skype   Вверх
alexey009
Дата 2.8.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 28.7.2008

Репутация: 2
Всего: 2



Kefir,  smile 
может я конечно полный нуб, но попробую ещё раз получить ответ, не сердитесь плиз. smile 
Значит,
файл index.tpl
Код

/// шапка
NEWS
/// все что ниже

файл news.tpl
Код

!!!НОВОСТИ!!!
начало
<table border="0" width="100%" cellspacing="0" cellpadding="0">
    <tr>
        <td width="100%" align="left">{NAME} ({DATE})</td>
    </tr>
    <tr>
        <td width="100%" align="left">{TEXT}</td>
    </tr>
</table>
конец

файл index.php
Код

$sql = "SELECT * FROM `".NEWS_TABLE."` where `visible`='on' ORDER BY id desc";
$result = mysql_query ($sql);
if( !$result){
    message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
}
while($row=mysql_fetch_assoc($result)) {
    $row['text'];
    $row['name'];
    $row['date'];
}


папка с шаблоном index.tpl engine\templates\new\main
папка с шаблоном news.tpl engine\templates\new\news
смарти лежит в папке engine\smarty
файл index.php лежит в корневой директории.

внимание вопрос как в index.tpl NEWS заменить на файл news.tpl и отоброзить полученные новости из базы, при этом шаблон отображения новостей расположен между "начало" и "конец". НА ПРИМЕРЕ SMARTY
PM MAIL   Вверх
skyboy
Дата 2.8.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Kefir @  1.8.2008,  22:33 Найти цитируемый пост)
в разделении логики и представления.

бееее... сам же говорил, что в представлении тоже логика есть. и вполне себе имеет право быть. так что тогда уже "модели и представления". точне - "операций по формированию модели и представления"  smile 
PM MAIL   Вверх
Fortop
Дата 2.8.2008, 03:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(alexey009 @  2.8.2008,  00:10 Найти цитируемый пост)
внимание вопрос как в index.tpl NEWS заменить на файл news.tpl и отоброзить полученные новости из базы, при этом шаблон отображения новостей расположен между "начало" и "конец".

Только цикл.

Ну или его эмуляция подобный конструкциями

Код

NEWS{150} //повторить 150 раз


P.S. В Smarty есть оператор для цикла



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
alexey009
Дата 4.8.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 28.7.2008

Репутация: 2
Всего: 2



Fortop, как задать цикл. этот вопрос задавался не раз, никто тольком не ответил smile 
PM MAIL   Вверх
Kefir
Дата 4.8.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



alexey009
index.tpl:
Код

{$newsBlock}

news.tpl (замечаем, что тут, внутри, есть цикл  smile ):
Код

!!!НОВОСТИ!!!
начало
{foreach from=$newsArray item=news} // ВОТ ЭТО ТУТ ЦИИИИКЛ! В))
<table border="0" width="100%" cellspacing="0" cellpadding="0">
    <tr>
        <td width="100%" align="left">{$news->NAME} ({$news->DATE})</td>
    </tr>
    <tr>
        <td width="100%" align="left">{$news->TEXT}</td>
    </tr>
</table>
{/foreach} // ЗАКАНЧИВАЕТСЯ ЦИКЛ
конец

index.php:
Код

$sql = "SELECT * FROM `".NEWS_TABLE."` where `visible`='on' ORDER BY id desc";
$result = mysql_query ($sql);
if( !$result){
    message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
}
$newsArray = array();
while($row=mysql_fetch_assoc($result)) {
    $newsArray[] = $row;
}
$smarty->template_dir = "engine/templates/new";
...
$smarty->assign("newsArray", $newsArray);
$smarty->assign("newsBlock", $smarty->fetch("news/news.tpl"));
$smarty->display("main/index.tpl");




Цитата(skyboy @  2.8.2008,  00:19 Найти цитируемый пост)
бееее... сам же говорил, что в представлении тоже логика есть. и вполне себе имеет право быть. так что тогда уже "модели и представления". точне - "операций по формированию модели и представления"  smile  

вот надо тебе к словам попридираться. ведь и так понял, что я имею в виду.  smile 
PM MAIL WWW Skype   Вверх
BaNaNaS
Дата 4.8.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.10.2005

Репутация: нет
Всего: нет



Я бы сделал так:
Код
!!!НОВОСТИ!!!
<table border="0" width="100%" cellspacing="0" cellpadding="0">
[NEWS_FETCH_ROWS]
    <tr>
        <td width="100%" align="left">{NAME} ({DATE})</td>
    </tr>
    <tr>
        <td width="100%" align="left">{TEXT}</td>
    </tr>
[/NEWS_FETCH_ROWS]
</table>

Код

function ShowNews($tpl)
{
  $RESULT = "SELECT * FROM news";
  $outTpl = "";
  While($ROW = mysql_fetch_object($RESULT))
   {
      $outTpl .= $tpl;
      $outTpl = str_replace("{NAME}", $ROW->NAME, $outTpl);
      $outTpl = str_replace("{DATE}", $ROW->DATE, $outTpl);
      $outTpl = str_replace("{TEXT}", $ROW->TEXT, $outTpl);
   }
  return $outTpl;
}

$tpl = file_get_contents("news.tpl");
$tpl = preg_replace("#\[NEWS_FETCH_ROWS\](.+?)\[/NEWS_FETCH_ROWS\]#ies","ShowNews('\\1')", $tpl);


З.Ы. Мог и на мудрить не проверял.

Это сообщение отредактировал(а) BaNaNaS - 4.8.2008, 17:34
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1108 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.