Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха информатор 3.1
Еще более удобное оповещение о флуде!

Краснодарское время: 23 Май, 2012, 04:25:20

Страниц: [1] 2 3 4
Печать
Автор Тема: Smarty для начинающих познавать суть  (Прочитано 7892 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
md5    ↓ 
12 Сентябрь, 2007, 12:41:35
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10494
Сила слова: 1.19

Smarty для начинающих познавать суть

1. Итак, начет с того, для чего вобще нужен шаблонизатор.
 
Если уж Вы решили использовать шаблонизатор, то Вы наверняка поняли для себя, что такое отделение кода от представления (view), от того, что видно снаружи (т.н. пользовательского интерфейса). В шаблоны выносится все отображения, вся верстка и определяются места, где будут вставлены или использованы данные, пришедшие от обработчика.
Все это дело выглядит так: скрипт получает данные от пользователя (get, post и т.д.), обрабатывает их и передаёт в шаблонизатор, а уже шаблонизатор выводи эти данные используя шаблоны.
 
2. С чего начать (самый симпл)
 
Перед началом — изучаем базовый синтаксис.
 
Начинать надо с самого просто. Сделаем шаблон, который будет выводить переданный из скрипта текст и текущее время.
 
template.tpl:
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head profile="http://gmpg.org/xfn/11">
 <title>Изучаем smarty на ПЫХА.РУ</title>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<html>
    <h1>Здравствуйте</h1>
    <p>{$text|default:"текст не передан в шаблонизатор"}</p>
    <small>{$smarty.now|date_format:"%d-%m-%Y %H:%M:%S"}</small>
</body>
</html>
 

Итак шаблон, в котый мы должны передать $text. В случае, если эта переменная не определена, выведется значение по умолчанию ("текст не передан в шаблонизатор"). Здесь мы воспользовались модификатором default, который и устанавливает значение по умолчанию (http://smarty.php.net/manual/ru/language.modifier.default.php).
 
script.php:
PHP

// подключаем смарти
require_once ('smarty/Smarty.class.php');
$smarty = new Smarty;
 
$text = 'Текст, который мы собираемся вывести в шаблоне.';
 
// передаем шаблонизатору наш текст
$smarty -> assign('text', $text);
 
// выводим шаблон в люди
$smarty -> display('template.tpl');
 

Также, необходимо обратить внимание на использование {$smarty.now} (http://smarty.php.net/manual/ru/language.variables.smarty.now.php), эта переменная выводит текущее время. Здесь для неё используется модификатор date_format (http://smarty.php.net/manual/en/language.modifier.date.format.php), форматирующий дату.
 

3. Немного важных мелочей, которые пригодятся в жизни
 
3.1 Шаблоны для удобства можно разбивать на блоки (например, шапка, тело и подвал) если они повторяются на разных страницах и подключать в основных файлах.
 
Пример. Допустим у нас есть главная и новостная страницы, которые имеют общую шапку и подвал. Их мы положим в папку blocks и назовем header.tpl и footer.tpl ссответственно.
index.tpl:
HTML

{include file='blocks/header.tpl'}
 
Текст главной страницы
 
{include file='blocks/footer.tpl'}
 

news.tpl:
HTML

{include file='blocks/header.tpl'}
 
Вывод новостей идет тут.
 
{include file='blocks/footer.tpl'}
 

3.2 Ещё одно замечание (обязательное!), о данных.
 
Абсолютно все данные, абсолютно все массивы данных должны быть сформированы в скрипте ДО передачи в шаблонизатор! Старайтесь этого не допускать, т.к. с данными в шаблонизаторе работать не нужно, он не для этого..
 

4. Разберем жизненную ситуацию :)
 
Чтобы приблизиться к реальности, разберем пример вывода новостей.
Здесь я приведу кусок кода на php, вытаскивающий и передающий новости и кусок шаблона, отвечающий за корректный и красивый вывод новостей.
 
news.php
PHP

// достаём наши новости из БД
$query = "SELECT `id`, `date`, `title`, `content`
            FROM `news`
            ORDER BY `date` DESC"
;
$sql = mysql_query($query) or die(mysql_error());
 
// создаем массив, в который будем складывать новости
$news = array();
 
while ($row = mysql_fetch_assoc($sql))
{
    /*
    ** Здесь можно производить любые манипуляции с данными новостей,
    ** перед тем, как они попадут в массив, который будет
    ** в последствии передан шаблонизатору
    ** например, можно обработать дату, перевести месяц на русский и т.д.
    */

   
    $news[] = $row;
}
 
// массив новостей отдаём шаблонизатору
 
$smarty -> assign('news', $news);
 
$smarty -> display('news.tpl');
 

news.tpl:
HTML

{* подключаем шапку шаблона *}
{include file='blocks/header.tpl'}
 
    {* здесь будем организовывать вывод новостей
    ** используем foreach (http://smarty.php.net/manual/ru/language.function.foreach.php)
    ** для вывода каждого элемента массива
    *}
   
    {foreach key=key item=news_item from=$news}
        <h1>{$news_item.title} ({$news_item.date})</h1>
        <p>{$news_item.content}</p>
        <a href="/news/{$news_item.id}/">подробнее...</a>
    {/foreach}
 
{* подключаем подвал шаблона *}
{include file='blocks/footer.tpl'}
 

 
5. О холиварах и тому подобное
 
Я не спорю, что native php шаблоны это верх скорости и не буду уделять здесь внимание нескончаемым спорам.
 

6. Думаю
 
для начинающих достаточно пищи, чтобы начинать разобраться.
И помните, все начинается всегда отсюда: http://smarty.php.net/manual/ru/
« Последнее редактирование: 13 Сентябрь, 2007, 10:38:05 от md5 » Записан

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
Dagdamor    ↓ 
16 Сентябрь, 2007, 09:43:57 , спустя 4 дня 9 часов 2 минуты 22 секунды
НЕ ХУЕТА! ХУЕТА!

Карма: 2
Сообщений: 47
Сила слова: 4.26

В смарти иногда очень напрягает отсутствие врапперов... даже в примере выше Md5 использовал один шаблон для хэдера, другой для футера. Такой подход (голова отдельно, ноги отдельно) в наши дни считается прошлым веком.
Записан

Форум PHP Community - скажи "нет" детскому саду!
md5    ↓ 
16 Сентябрь, 2007, 11:07:30 , спустя 1 час 23 минуты 33 секунды
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10494
Сила слова: 1.19

Такой подход (голова отдельно, ноги отдельно) в наши дни считается прошлым веком.
согласен
это пример для начинающих, а именно для построения простейшего шаблона
Записан

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
aligator    ↓ 
16 Декабрь, 2007, 12:48:03 , спустя 90 дней 2 часа 40 минут 33 секунды
НЕ ХУЕТА! ХУЕТА!


Карма: 2
Сообщений: 52
Сила слова: 3.85

require_once ('smarty/Smarty.class.php');
скажите пожалиста где взят Smarty Class?
Записан

md5    ↓ 
16 Декабрь, 2007, 01:17:40 , спустя 29 минут 37 секунд
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10494
Сила слова: 1.19

http://smarty.php.net/
Записан

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
aligator    ↓ 
16 Декабрь, 2007, 01:50:51 , спустя 33 минуты 11 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 2
Сообщений: 52
Сила слова: 3.85

skachal
Записан

XoxMa™    ↓ 
25 Февраль, 2008, 08:01:35 , спустя 71 день 18 часов 10 минут 44 секунды
НЕ ХУЕТА! ХУЕТА!


Карма: 0
Сообщений: 132
Сила слова: 0

Странно, я сделал всё как ты сказал, но у меня появляется ошибка:
 
Warning: Smarty error: unable to read resource: "temp.tpl" in Smarty/Smarty.class.php on line 1095
 
Я даже поставил chmod на файл 777, и пытался шаблон с моей темой включить разными способами:
 
$smarty -> display('temp.tpl');
$smarty -> display('file:temp.tpl');
$smarty -> display('db:temp.tpl');
 
Из-за чего может быть эта ошибка?
Записан

AlexB    ↓ 
25 Февраль, 2008, 08:08:19 , спустя 6 минут 44 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3423
Сила слова: 2.6


Из-за чего может быть эта ошибка?
Могу предположить, из-за того, что файл лежит не там где надо.
Записан

md5    ↓ 
25 Февраль, 2008, 08:35:40 , спустя 27 минут 21 секунду
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10494
Сила слова: 1.19

как установлена директория с шаблонами?
 
ва файле Smarty.class.php
PHP
    /**
     * The name of the directory where templates are located.
     *
     * @var string
     */

    var $template_dir    =  '_templates';
 
    /**
     * The directory where compiled templates are located.
     *
     * @var string
     */

    var $compile_dir     =  '_templates/_compiled';
 

//или
 
$smarty->template_dir  =  '_templates';
 

вобщем проверь их и проверь где шаблоны лежат
Записан

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
XoxMa™    ↓ 
25 Февраль, 2008, 10:03:19 , спустя 1 час 27 минут 39 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 0
Сообщений: 132
Сила слова: 0

Спасиб, наконец-то заработало...
Записан

roman678    ↓ 
27 Январь, 2009, 02:48:04 , спустя 336 дней 16 часов 44 минуты 45 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 4
Сила слова: 0

Вывод новостей происходит, все нормально. А как сделать рабочей ссылку подробнее ??? Тоесть вывод всех данных из таблички. Поле all_news_text
Записан
md5    ↓ 
27 Январь, 2009, 02:50:38 , спустя 2 минуты 34 секунды
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10494
Сила слова: 1.19


Вывод новостей происходит, все нормально. А как сделать рабочей ссылку подробнее ??? Тоесть вывод всех данных из таблички. Поле all_news_text
надо другой шаблон для отдельной новости
и при переходе по ссылке, чтобы скрипт указывал, что надо использовать шаблон для отдельной новости
Записан

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
roman678    ↓ 
27 Январь, 2009, 04:07:51 , спустя 1 час 17 минут 13 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 4
Сила слова: 0

про шаблон я то понял, просто не пойму как по ссылке указать другой шоблон. думаю гадаю как сделать... просто очень нужно
Записан
md5    ↓ 
27 Январь, 2009, 04:13:33 , спустя 5 минут 42 секунды
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10494
Сила слова: 1.19

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

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
roman678    ↓ 
27 Январь, 2009, 04:17:04 , спустя 3 минуты 31 секунду
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 4
Сила слова: 0

лан буду юзать. авось и доюзаюсь
« Последнее редактирование: 27 Январь, 2009, 04:23:28 от roman678 » Записан
Страниц: [1] 2 3 4
Печать
 

Перейти в: