Smarty. Различие в использовании assign_by_ref и append

Long

Новичок
Smarty. Различие в использовании assign_by_ref и append

пытаюсь понять зачем введено такое количество методов:
- assign_by_ref
- append_by_ref
- append
это сделано чисто из эстетических соображений или по каким-то спец.соображениям? может я просто не понимаю смысла каждого метода? мое понимание таково - assign и assign_by_ref должны быть использованы прежде чем append и фактически инициализируют переменные шаблона, append и append_by_ref добавляют значение к существующей переменной. я прав? но тогда зачем нам append и append_by_ref если использовав assign_by_ref мы делаем с переменной все, что угодно? :confused:
 

crocodile2u

http://vbolshov.org.ru
Long читал мануал по смарти? А он есть. И там есть - в подробностях - ответ на этот вопрос.
 

Long

Новичок
crocodile2u, тебе не кажется, что вопрос "зачем?" подразумевает, что ман читан и не раз? подробностей ответа на этот вопрос я там не обнаружил. тем более, что ман существует для описания функционала, но не для того, чтобы найти ответ на вопрос "зачем?". или ты прочитал только название темы? ;)
 

tony2001

TeaM PHPClub
и тем не менее.
в мане есть предложения типа "эта функция используется для..."
 

Long

Новичок
tony2001, что делает каждый метод - я понимаю. я не понимаю зачем сделаны методы, которые дублируют работу друг-друга. если мы сделали:
PHP:
$smarty->assign_by_ref('foo', $foo);
то изменяя переменную $foo мы, тем самым, изменяем значение в переменной шаблоне. если наша переменная является массивом, то выполнив
PHP:
$foo['new_key'] = 'new_var';
мы, тем самым, добавим новый элемент массива и для переменной шаблона. тогда зачем возможность делать
PHP:
$smarty->append('foo', 'new_var');
я вот чего не понимаю... или это просто возможность работать и так, и так?
 

alexhemp

Новичок
Long

Assign by ref позволяет делать полезные вещи. Например возврат значения из вложенного шаблона

приведу пример

page.tpl
Код:
{include file=page.body.tpl assign=BODY}
<html>
<head>
<title>{$PAGE_TITLE}</title>
</head>
<body>{$BODY}</body>
</html>
page.body.tpl
Код:
{assign var="PAGE_TITLE" value="Заголовок"}
Вот такая конструкция очень удобна - не требуется разбивать шаблоны на header-footer и т.п.

Но вернуть переменную PAGE_TITLE из вложенного шаблона page.body.tpl не выйдет если не сделать
$smarty->assign_by_ref('PAGE_TITLE', $dummy_page_title);

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

В общем все оправдано. И в мануале ВСЕ ЭТО НАПИСАНО.
 

Long

Новичок
за пример - спасибо, трюки знать полезно.
но вопрос то не в этом был. вопрос НЕ про то, зачем нужен метод assign_by_ref . а "зачем при том, что есть assign_by_ref(), есть еще и метод append()?". что такого можно реализовать через append(), и нельзя через assign_by_ref()? может он просто введен для облегчения синтаксиса?
меня гложат сомнения - либо я недопонимаю чего-то, либо просто append() позволет писать менее навороченые конструкции, которые проще для восприятия (облегчение синтаксиса). я прошу лишь развеить мои сомнения :)
 
Сверху