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

Поиск:

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


Добрый кот
***


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

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



Нафига вам шаблонизатор?! PHP и так самый замечательный шаблонизатор сам по себе.

Код

    function postfilter($buffer){
        // тут применяем фильтры уже сформированного html
        return $buffer;
    }
    
    $__content = $_GET['content'];
    ob_start('postfilter');
    include('design.php');
    ob_end_flush();


Шаблон:
Код

<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <?php include($__content); ?>
    </body>
</html>



--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
AntonioBanderaz
Дата 18.12.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


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

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



Цитата(SamDark @  18.12.2006,  15:30 Найти цитируемый пост)
Нафига вам шаблонизатор?! PHP и так самый замечательный шаблонизатор сам по себе.

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


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Vaulter
Дата 18.12.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



SamDark, Хех... вот тебе пример банального шаблона, который ну очень сложно делать каждый раз ручками по твоей схеме:
Код

$navbar
<div class='caption'>Заказы на проверку</div>
<report name='oncheck'>
    <template>
        $paging
        <table class='report'>
                <tr><th>действ.</th><th >№</th><th >тема</th><th>откуда</th></tr>
            $items
        </table>
    </template>    
    <itemtemplate>
    <tr><td><a 
            title='посмотреть заказ' href='orders.php?cnt=orders&act=view&oid=$item[order_id]' 
                onClick='return open_popup_window(this.href,"view")'><img 
            src='img/info.gif' width=12 height=11 border=0 /></a>&nbsp;
        <access res='dopay' mask='ACL_ADD'>
            <a  title='назначить конечную цену' href='orders.php?cnt=popup&act=price&oid=$item[order_id]' $item[dis] 
                onClick='return open_popup_window(this.href,"price",500,250)'><img 
                src='img/price.gif' width=16 height=16 border=0 /></a>
        </access>
        </td>
        <td nowrap>$item[sign]-$item[order_id]</td>
        <td><a href='orders.php?act=edit&cnt=orders&oid=$item[order_id]'>$item[subject]</a></td>
        <td class='smltext'>$item[comment]</td>
    </tr>
    </itemtemplate>
    <emptytemplate>
        <p class='empty'>нет ничего</p>
    </emptytemplate>
</report>


    
<comment>
<form method='get'>
    <input type='hidden' name='cnt' value='$cnt' />
    <input type='hidden' name='act' value='$act' />
    <select name='m' onchange='this.form.submit();'>
        <report name='monthes' onpage='0'>
            <template>$items</template>
            <itemtemplate>
                <option value='$item[0]' $item[selected]>$item[1]</option>
            </itemtemplate>
        </report>
    </select>&nbsp;<select name='y' onchange='this.form.submit();'>
        <report name='years' onpage='0'>
            <template>$items</template>
            <itemtemplate>
                <option value='$item[1]' $item[selected]>$item[1]</option>
            </itemtemplate>
        </report>
    </select>
</form></comment>
<report name='orders' callback='doactions' pagingurl='orders.php?cnt=checkorders&act=list&p=%d' <comment>должно передаватся обьекту pager</comment> pagevar='p'>
    <template>
        <div class='w100'><div class='caption' style='float:left'>Заказы в учет</div>$paging</div>
        
        <table class='report'>
                <comment><tr><th rowspan=2>действ.</th><th rowspan=2>№</th><th width=200 rowspan=2>тема</th><th width=200 colspan=2>цены, руб.</th>
                    <th colspan=2>оплачено</th>
                    <th width=100 colspan=2>сроки</th><th  rowspan=2>статус</th><th rowspan=2>автор</th></tr>
                <tr><th>клиента</th><th>автора</th>
                    <th>клиентом</th><th>автору</th>
                    <th>клиента</th><th>автора</th></tr></comment>
                <thead><tr><th>№</th><th >тема</th><th class='cls'>статус&nbsp;<img alt="<span class='impotant_noemail'>отсутствует email клиента</span><br/>
<span class='impotant_deadline'>срок клиента вышел!</span><br/>
<span class='impotant_plan'>на утверждении плана</span><br/>
<span class='impotant_notpayed'>не оплачено</span>"
                        src='img/answer.gif' width='16' height='16' class='answer'/></th><th>откуда</th></tr>
                </thead>    
            $items
        </table>
    </template>
    <itemtemplate>
    <tr>
        <td nowrap>$item[sign]-$item[order_id]</td>
        <td><a href='orders.php?cnt=checkorders&act=edit&oid=$item[order_id]'
            onClick='return open_popup_window(this.href,"view")'
            >$item[subject]</a></td>
        <comment>
        <td>$item[price]</td>
        <td>$item[work_price]</td>
        <td>$item[payed]</td>
        <td>$item[author_payed]</td>
        <td>$item[df_client_deadline]</td>
        <td>$item[df_author_deadline]</td>
        <td class='smltext'>$item[authorname]</td>
        </comment>
        <td class='smltext $item[class]'>$item[str_status]&nbsp;$item[change_sended]</td>
        <td class='smltext'>$item[comment]</td>
    </tr>
    </itemtemplate>
    <emptytemplate>
        <p class='empty'>нет ничего</p>
    </emptytemplate>
</report>



--------------------
PM MAIL WWW ICQ   Вверх
SamDark
Дата 19.12.2006, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



Vaulter,
Ничем не хуже...
Код

<? include('navbar.php') ?>
<? include('comment.php') ?>
<td><?=$item[price]?></td>
<td><?=$item[work_price]?></td>
<td><?=$item[payed]?></td>
<td><?=$item[author_payed]?></td>
<td><?=$item[df_client_deadline]?></td>
<td><?=$item[df_author_deadline]?></td>
<td class='smltext'><?=$item[authorname]?></td>


Ваших шаблонов я не понял в полной мере. Получается верстальщику надо будет изучить штук десять самых популярных шаблонных систем... не проще ли изучить 10 конструкций PHP?

Если объясните, что значит
Код

<report name='oncheck'>
    <template>

может напишу полный эквивалент.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
americanets
Дата 19.12.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



нашел статейку

) file2compile.tpl – файл который мы будем парсить
2) template.php – главный файл содержащий класс шаблонов

Листинг файла file2compile.tpl:

Код

<html>
<head>{title}</head>
<body bgcolor={bgcolor}>

{sometpltags}

</body>
</html>


Листинг файла template.php:

Код

<?php
class parse_class
    {
    var $vars     = array();
    var $template;

    function get_tpl($tpl_name)
      {
      if(empty($tpl_name) || !file_exists($tpl_name))
        {
        return false;
        }
      else
        {
        $this->template  = file_get_contents($tpl_name);
        }
      }
    function set_tpl($key,$var)
      {
      $this->vars[$key] = $var;
      }
    function tpl_parse()
      {
      foreach($this->vars as $find => $replace)
             {
             $this->template = str_replace($find, $replace, $this->template);
             }
      }
    }
$parse = new parse_class;
?>




Для вывода на экран используйте следующие команды:

Код

<?php
require('template.php'); // Подключаем файл с классом
$parse->get_tpl('template.tpl'); //Файл который мы будем парсить
$parse->set_tpl('{title}','Супер сайт'); //Установка переменной {title}
$parse->set_tpl('{bgcolor}','#f2f2f2'); //Установка переменной { bgcolor }
$parse->set_tpl('{sometpltags}','<font color=red>Это текст обрамленый красным  цветом</font>'); 
//Установка переменной {sometpltags}
$parse->tpl_parse(); //Парсим
print $parse->template; //Выводим нашу страничку
?> 


тут понятно вместо Супер сайт и прочего вставлю $title и прочую инфу

а если у меня цыкл например вывод фот в виде html таблицы, как с ним быть ? 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SamDark
Дата 19.12.2006, 15:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



Нечего морочаться с шаблонами. PHP - сам по себе шаблонизатор и в использовании пары циклов ничего плохого нет:

Код

<?php foreach($articles as $article){ ?>
<div>
<h1><?=$article['title']?></h1>
<?=$article['text']?>
</div>
<?php } ?>



--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
americanets
Дата 19.12.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ну это понятно, просто удобнее 1 раз написать а потом пользовать, вставляя в шаблон только определенный код указатель,

Добавлено @ 15:59 
и не совсем удобно когда для разный страниц свой дизайн

конечно есть вариант с footer и heаder но тоже не совсем удобно


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Alex13
Дата 20.12.2006, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



SamDark, позволь не согласиться. Такой подход становится неудобным при редактировании шаблонов, при корявой реализации может вылиться в php-including и при изменении структура переменных придется менять все шаблоны.


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
americanets
Дата 20.12.2006, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Alex13, вот вот, а как сделать чтоб все нормально было?



--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SamDark
Дата 20.12.2006, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



Согласен полностью, но
Цитата
при корявой реализации

неудобен абсолютно любой подход.

Добавлено @ 09:54 
americanets
Проблема с footer-header решается очень просто: делаем шаблон и в месте, где нужен динамический контент вставляем:
Код

include($content);

Перед запуском шаблона просто определяем $content, который указывает на вложенный шаблон.

p.s. что такое шаблоны я знаю - трёхлетнее общение с Smarty.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
kaa
Дата 20.12.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Отдельный шаблонизатор - это для бооольших проектов, типа форумов или CMS, движух там разных, а для небольшого сайта пойдет и стандартная замена в цикле.

Может я в чем не прав но пользую всегда str_replace...
PM MAIL   Вверх
americanets
Дата 20.12.2006, 11:23 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ага вопрос в том как в контент оторый будет в тексте выглядеть {content} впишнуть цикл или еще что то что тоже будет базироваться на собственном шаблоне, например html таблица


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SamDark
Дата 20.12.2006, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



americanets
Код

<table>
  <?php foreach($articles as $article){ ?>
  <tr>
     <td>
        <?=$article['title']?>
     </td>
     <td>
        <?=$article['text']?>
     </td>
  </tr>
  <?php } ?>
</table>



--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
americanets
Дата 20.12.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



а как мне сделать для него шаблон например

Код

<table>
   <tr>
     <td>
        {art_title}</td>
     <td>
     {art_text}
     </td>
  </tr>
</table>


выложить его как art.tmp потом подгрузить обработать и чтоб он сам не прописывался в шаблоне а вставлялся в {content} отделить дизайн шаблона от кода
нужно чтоб оснавной шаблон был просто что то вроде этого 
____________________________________________
|
|                               {title}
|___________________________________________
|                           {content}                              |{news}  
|                                                                         |
|                                                                         |
|                                                                         |
|                                                                         |
|                                                                         |
------------------------------------------------------------------------

для таблицы тоже шаблон но без кода
код только в php файлах обрабатывающих шаблон и на основе него отдающий в основной инфу


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SamDark
Дата 20.12.2006, 13:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


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

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



americanets
Цитата
код только в php файлах обрабатывающих шаблон и на основе него отдающий в основной инфу

Нет смысла, но если уж очень хочется - Smarty.

То же на PHP:

Главный шаблон main.tpl:
Код

<html>
  <head>
    <title><?=$title?></title>
  </head>
<body>
  <h1 id="top"><?=$title?></h1>
  <div id="content"><?php include($content)?></div>
  <div id="right"><?php include($right)?></div>
</body>


Новости news.tpl:
Код

<?php foreach($news as $item){?>
<dl>
  <dt><?=$item['title']?>
  <dd><?=$item['text']?>
</dl>
<?php } ?>


Статья art.tpl:
Код

<table>
   <tr>
     <td>
        <?=$art['title']?></td>
     <td>
        <?=$art['text']?>
     </td>
  </tr>
</table>


Скрипт index.php:
Код

$title = 'Моя тестовая статья';
//Получаем данные для статьи
$art = Article::get();
$content = 'art.tpl';
//Получаем данные для новостей
$news = News::get();
$right = 'news.tpl';

//Запускаем
include('main.tpl');



--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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