как назначить объект в шаблонах Smarty? - PullRequest
1 голос
/ 10 марта 2010

я создал объект модели в PHP

class User {
  public $title;

  public function changeTitle($newTitle){
    $this->title = $newTitle; 
  }
}

Как мне выставить свойство объекта User в smarty, просто назначив объект?

Я знаю, что могу сделать это

$smarty->assign('title', $user->title);

но у моего объекта более 20 с лишним свойств.

Пожалуйста, сообщите.

РЕДАКТИРОВАТЬ 1

следующее не сработало для меня.

$smarty->assign('user', $user);

OR

$smarty->register_object('user', $user);

тогда я пытаюсь {$user->title}

ничего не вышло.

РЕДАКТИРОВАТЬ 2

Я только сейчас пытаюсь вывести открытое свойство объекта в шаблоне smarty. Извините, если я перепутал кого-то с функцией.

Спасибо.

Ответы [ 3 ]

9 голосов
/ 10 марта 2010

Вы должны иметь доступ к любым открытым свойствам объекта из шаблона Smarty. Например:

$o2= new stdclass;
$o2->myvar= 'abc';
$smarty->assign('o2', $o2);

### later on, in a Smarty template file ###

{$o2->myvar}  ### This will output the string 'abc'

Вы также можете использовать assign_by_ref, если планируете обновить объект после назначения его шаблону Smarty:

class User2 {
  public $title;
  public function changeTitle($newTitle){
    $this->title = $newTitle; 
  }
}
$user2= new User2();
$smarty->assign_by_ref('user2', $user2);
$user2->changeTitle('title #2');

А в файле шаблона

{$user2->title}  ## Outputs the string 'title #2'
2 голосов
/ 10 марта 2010
$smarty->assign('user', $user);

в шаблоне

{$user->title}
1 голос
/ 11 марта 2010

Этот работает для меня.

$smarty->register_object('user', $user);

// Inside the template. note the lack of a $ sign
{user->title}

Этот не работает независимо от того, есть ли у меня знак $

$smarty->assign('user', $user);

Я надеюсь, что кто-то может сказать мне, почему.

...