Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Шаблонизатор PHP

#21 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8
0

Отправлено 02 Ноябрь 2009 - 02:13

gaaarfild, и в чём вопрос? Я так понимаю не работает?
А я не вижу что находится в:
include("includes/config/config.php");
include_once ("includes/functions/functions.php");


Ну а уж если совсем приспичит. Делаем буферизацию вывода с помощью функции ob_start(), но я не советую, вывод будет очень тормозиться.
  • 0

#22 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 02 Ноябрь 2009 - 13:12

не буду плодить темы, есть вопросы по ходу слежения за данной темой:
1. насколько глубоко нужно отделять html код от php, например на странице печатается блок новостей
<div class="news">
<h2>Заголовок</h2>
<h4>дата публикаци</h4>
<p>Текст новости(в ней есть ссылка на фотографию)</p>
</div>

а эти данные содержаться в БД и выводятся по 5 новостей на страницу, т.е. присутствует постраничная пагинация.
Как это все добро разделить на код и шаблон?
2. Если на другой странице этого же сайта отображается например фотогалерея или просто одна статься, получается, что нужно для разных страниц создавать отдельные шаблоны?
  • 0

#23 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 02 Ноябрь 2009 - 15:11

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

В config.php храняться исключительно массив. Переменная $config. А в ней под разными индексами - данные конфигурации.

В functions.php - исключительно функции. Ни одна из них не запускается, соответственно данных на экран не выводит.

не буду плодить темы, есть вопросы по ходу слежения за данной темой:
1. насколько глубоко нужно отделять html код от php, например на странице печатается блок новостей

<div class="news">
<h2>Заголовок</h2>
<h4>дата публикаци</h4>
<p>Текст новости(в ней есть ссылка на фотографию)</p>
</div>

а эти данные содержаться в БД и выводятся по 5 новостей на страницу, т.е. присутствует постраничная пагинация.
Как это все добро разделить на код и шаблон?
2. Если на другой странице этого же сайта отображается например фотогалерея или просто одна статься, получается, что нужно для разных страниц создавать отдельные шаблоны?


Вы можете общий каркас - вещи, которые не будут менятся при переключение от модуля к модулю сделать один. А все остальные вещи, прописывать например в самом фале модуля. Вот один из вариантов. Можно написать функцию, чтобы при наличии файлов шаблонов с именем модуля, од использовал именно этот модуль. Например, если в GET-запросе передано название модуля index.php?module=Gallery и при этом существует файл шаблона index-Gallery.tpl, тогда использовать его. Если нет, то по умолчанию, тоесть index.tpl.
  • 0

#24 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 02 Ноябрь 2009 - 16:34

gaaarfild,

session_cache_limiter() - возвращает имя ограничителя текущего кэша. Если cache_limiter специфицирован, имя текущего ограничителя кэша изменяется на новое.

Ограничитель кэша контролирует HTTP-шапки управления кэшем, отправляемые клиенту.Эти шапки/headers определяют правила кэширования содержимого страницы.Установка кэша nocache, например, отменяет клиентское кэширование.Значение public - разрешает.Можно также установить private, что несколько строже, чем public.

В режиме private шапка Expire, отправляемая клиенту, может нарушить работу некоторых браузеров, включая Mozilla. Вы можете избежать этого с помощью режима private_no_expire. Шапка Expire никогда не отправляется клиенту в этом режиме.

Возможно у тебя именно это:

В режиме private шапка Expire, отправляемая клиенту, может нарушить работу некоторых браузеров, включая Mozilla. Вы можете избежать этого с помощью режима private_no_expire.

Я никогда не использовал session_cache_limiter(), не было необходимости.

sc2r2bey,
1) На сколько глубоко? Скажу так... Чтобы в шаблоне присутствовали только простейшие конструкции, то есть замены представлений их значениями. Никаких управляющих конструкций там не должно быть(это со стороны дизайнера). Я сам использую Smarty за неимением времени писать что-либо своё более гибкое и удобное.

данные содержаться в БД и выводятся по 5 новостей на страницу, т.е. присутствует постраничная пагинация.
Как это все добро разделить на код и шаблон?

Тут ничего сложного. Так как ты взял за основу "одна новость - отдельный шаблон"(что по моему мнению нормально), то раз тебе нужно ограничиться пятью новостями, делаем так файл news.php(в папке includes):
$html = "";

// принимаем из GET номер страницы, если его нет, то будет 0
// высчитываем с какой записи мы будем выводить как [страница] * [количество выводимых записей]

$query = "SELECT * FROM news ORDER BY date DESC LIMIT [с какой], 5";
$resource = mysql_query($query);
while($array = mysql_fetch_array($resource))
{
$html .= parseTpl("new.tpl", $array); // обрабатываем в цикле наш шаблон новостей(либо 5 раз, либо меньше, если последняя страница)
}

$html .= [навигатор]; // прикрепляем навигатор к шаблону

// делаем ещё какие либо действия
// выводим шаблоне
echo $html;

Затем просто в зависимости от того чего запросил пользователь формируем тот или иной шаблон. То есть у нас главный файл отвечает за подключение того или иного кода.

2. Если на другой странице этого же сайта отображается например фотогалерея или просто одна статься, получается, что нужно для разных страниц создавать отдельные шаблоны?

Отдельные шаблоны создавать? Боже упаси... Чем тебе не нравится шаблон для вывода одной новости. Просто тебе нужно будет в исполняемом файле правильно прописать структуру. Например для вывода одной новости, мы используем тот же шаблон, то sql-запрос будет уже другим, ограничивающий нас только одной записью.
  • 0

#25 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 02 Ноябрь 2009 - 22:25

ну а вот такая ситуация:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional-dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<link rel="stylesheet" type="text/css" href="css/css.css" />

<title>Sample Layout</title>
</head>
<body>
<div id="container">
<div id="header"></div>
<div id="navigation">подключаем модуль меню</div>
<div id="sidebar-right">подключаем различные модули</div>
<div id="sidebar-left">подключаем модуль меню и другие модули</div>
<div id="content"><div id="content-inner">
публикуем контент различныйв зависимости от выбранного модуля, например, новости, статьи, галерея, гостевая
</div></div>
<div id="footer"></div>
</div>
</body>
</html>


как здесь подключать шаблон? просто:
$html = "";

// принимаем из GET номер страницы, если его нет, то будет 0
// высчитываем с какой записи мы будем выводить как [страница] * [количество выводимых записей]

$query = "SELECT * FROM news ORDER BY date DESC LIMIT [с какой], 5";
$resource = mysql_query($query);
while($array = mysql_fetch_array($resource))
{
$html .= parseTpl("new.tpl", $array); // обрабатываем в цикле наш шаблон новостей(либо 5 раз, либо меньше, если последняя страница)
}

$html .= [навигатор]; // прикрепляем навигатор к шаблону

// делаем ещё какие либо действия
// выводим шаблоне
echo $html;

примитивная модель, а как в целом в шаблоне?
  • 0

#26 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 03 Ноябрь 2009 - 01:17

sc2r2bey, не понял вопроса... В шаблоне мы имеем только атомарную операцию замены, как я уже говорил. Что же вы хотите в итоге получить я не понимаю.
Если хотите чтобы в шаблоне можно было делать, вставки на подобии include, циклы и подобное, то берите готовый класс Smarty. Эту функцию я привёл для простейшего понимания шаблонизации. Что это таоке и с чем её едят. Я не говорю что этот пример подходит на все случаи жизни... Совсем нет, просто он был для меня удобен одно время...
  • 0

#27 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 03 Ноябрь 2009 - 08:07

я понял как работает шаблон, теперь хочу понять как это можно применить к целому шаблону страницы, наподобии привиденного мною выше каркаса
  • 0

#28 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 03 Ноябрь 2009 - 17:07

sc2r2bey
Разбейте шаблон страницы на части. Возьмите общий каркас. Без блоков, модулей и всего остального.

Сделайте из него шаблон с вставками тегов. Например
<%left_block%><%right_block%><%center_block%>

Далее сделайте для них шаблоны. Тоесть шаблон, как будет выглядеть только левый блок. Только правый блок. Возьмите ваш каркас и теги <%left_block%> замените соответственно обработанными шаблончиками левых блоков, правые, правыми. Так и соберите всю страницу. Достаточно гибкий вариант.
  • 0

#29 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 03 Ноябрь 2009 - 17:31

не совсем понимаю, что Вы имеете ввиду под словом каркас!
Можно в виде кода?
  • 0

#30 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 04 Ноябрь 2009 - 03:21

Вот например код файла index.tpl
<html>
	<head>
		<%meta%>
		<title><%title%></title>
	</head>
	<body>
		<table width="100%">
			<tr><td colspan="3" align="left"><img src="logo.gif" alt="logo" /></td></tr>
			<tr>
				<td width="250"><%block_left%></td>
				<td><%block_center%><br /><%modules%><br /><%block_down%></td>
				<td width="250"><%block_right%><td>
			</tr>
			<tr><td colspan="3" align="left">Copyright 2009 by SuperMan</td></tr>
		</table>
	</body>
</html>

Так же эти теги, заключенные в такие разделители <%%> будут заменяться на соответствующие элементы. Например код блока, который будет вставляться в этот код вместо тега <%left_block%> будет выглядеть вот так:

<table>
	<tr><td><%block_title%></td></tr>
	<tr><td><%content%></td></tr>
</table>

Где тоже эти теги будут заменяться на соответствующее содержимое. Примерно так собирается вся страница.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru