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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос с includ'om и переменными 
:(
    Опции темы
sandland
Дата 28.11.2008, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день. Недавно занялся написанием небольшой библиотеки для собственных разработок, и решил как положено сделать разделение кода и шаблонов. 
Вопрос первый: посоветуете что-нибдь на тему того, как реализовывается данная модель в современных фреймворках?
Вопрос второй: Для начала решил сделать так: Выполянется дейсвтие (php- код), где определяются все переменные, которые будут использоваться в шаблоне, с помощью самописных классов, а далее вызывается метод setTamplate , который подключает шаблон, в мое случае он пока его просто инклудит в файл действия.
ну для примера:
test.php :
<?php
$page=new Page();
$title=$page->getTitle();
$page->setTamplate('test_tamplate.php');  // include "tamplates/test_tamplate.php";
?>

test_tamplate.php :
<head>
<? echo $title; ?>
</head>
<body>
  <h1>Test Page</h1>
</body>



Проблема. в том, что при таком подключении переменная $title в test_tamplate.php  не определена. Я пытался считать файл в строку, и вывести . само собой такой варинат не годится. Можно попробовать ф-цию eval, но это тоже невариант.

Подскажите поалуйста что делать



PM MAIL WWW ICQ Jabber   Вверх
ZlojEzh
Дата 28.11.2008, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

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



передавайте объекту Page необходимые данные
что-то вроде такого
Код

$page->set('title', 'my title');

а в темплейте
Код

<?= $this->get('title'); ?>


покопайтесь в фреймворках на предмет идей
тот же Zend_View, например
PM MAIL ICQ   Вверх
sandland
Дата 28.11.2008, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



передавать переменные - это не выход, т.к. для каждой страницы свой шаблон,  и свой набор выводимых переменных. Можно, конечно формировать массив каждый раз, и передавать, но тогда вообще проще не делать разделение на дейсвтия и шаблоны.
Я пытался в Symfony найти это, пока безуспешно
PM MAIL WWW ICQ Jabber   Вверх
ZlojEzh
Дата 28.11.2008, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

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



дык, в шаблонизаторах обычно так и происходит
данные передаются темплейту (или объекту, создающему представление)
smarty, например:
$smarty->assign(...)
{$my_var}


Цитата(sandland @  28.11.2008,  01:58 Найти цитируемый пост)
для каждой страницы свой шаблон,  и свой набор выводимых переменных

а какая разница, передаете Вы переменные шаблону напрямую, или записываете их в массив, или передаете через методы объекта? все равно каждый шаблон должен знать их имена

конкретно в Вашем вопросе, думаю, поможет функция get_defined_vars
но это очень некрасивое решение

PM MAIL ICQ   Вверх
Pentium133
Дата 28.11.2008, 11:07 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Я пытался в Symfony найти это, пока безуспешно 

В symfony так и передается, по любому имени которое должно быть известно в шаблоне.
PM MAIL   Вверх
nerezus
Дата 28.11.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Цитата

передавать переменные - это не выход, т.к. для каждой страницы свой шаблон,  и свой набор выводимых переменных. 
 Естественно.
И передавать данные в шаблон.

Почему же тогда не выход?
Тем боллее, что ты "решил как положено сделать разделение кода и шаблонов".

Цитата

Подскажите поалуйста что делать
 assign юзать.
Можно не мучать мозг сексом и использовать smarty.
Или мой шаблонизатор для шаблонов на PHP:
Код

function php_template($filename, $values=array()) {
     extract($values);
     ob_start();
     include "templates/$filename";
     $result = ob_get_contents();
     ob_end_clean();
     return $result;
}

function escape($str) {
    return htmlentities($str, ENT_COMPAT, 'UTF-8');
}




--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
sandland
Дата 28.11.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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


а что вы скажете на счет идеи с сессиями? что если на все страницах сайта держать одну сессию и передавать переменные через нее?

nerezus, воспользовался идеей с буфером, спасибо!

Это сообщение отредактировал(а) sandland - 29.11.2008, 00:22
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0613 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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