как назначить объект умным шаблонам?

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

class User {
  public $title;

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

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

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

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

но мой объект имеет более 20 свойств.

Пожалуйста, порекомендуйте.

ИЗМЕНИТЬ 1

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

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

OR

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

затем я пытаюсь {$user->title}

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

ИЗМЕНИТЬ 2

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

Спасибо.


person Kim Stacks    schedule 10.03.2010    source источник


Ответы (3)


Вы должны иметь доступ к любым общедоступным свойствам объекта из шаблона 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'
person leepowers    schedule 10.03.2010
comment
извините, это не сработало для меня. Я не уверен, почему. Пожалуйста, смотрите мой РЕДАКТИРОВАТЬ 1. - person Kim Stacks; 11.03.2010
comment
Вы вызываете $user->changeTitle() до или после назначения объекта Smarty? - person leepowers; 11.03.2010
comment
мои извинения. в настоящее время я пытаюсь вывести свойство объекта. позвольте мне добавить еще одно сообщение EDIT - person Kim Stacks; 11.03.2010

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

в шаблоне

{$user->title}
person Sinan    schedule 10.03.2010
comment
извините, это не сработало для меня. Я не уверен, почему. Пожалуйста, смотрите мой РЕДАКТИРОВАТЬ 1. - person Kim Stacks; 11.03.2010

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

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

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

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

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

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

person Kim Stacks    schedule 11.03.2010