Привет, я смотрел PHP-код из социального движка, и у них есть что-то вроде этого:
header("Location:user_event.php?event_id={$event_id}&justadded=1")
почему id it not
header("Location:user_event.php?event_id=$event_id&justadded=1")
или
header("Location:user_event.php?event_id=".$event_id."&justadded=1")
потому что значение $event_id верное, но когда перенаправление страницы я перехожу к:
user_event.php?event_id=&justadded=1
теперь я уверен, что сделал что-то, чтобы испортить значение {$ event_id}, но я даже не знаю, что это значит. это связано с умением?
Использование {$ variable} внутри строк с двойными кавычками имеет две причины: a) для предотвращения ошибок, таких как:
$variable = "prefix";
header("Location:somepage.php?value=$variable_name"); // PHP would actually look for a variable called $variable_name instead of the desired $variable
b), позволяющий вставлять переменные массивов и объектов в строку без прерывания ее
header("Location:somepage.php?value=$myObject->someValue"); // this wouldn't work
header("Location:somepage.php?value={$myObject->someValue}"); // this works
Но все это не должно иметь никакого эффекта с Smarty, потому что Smarty анализирует только {} объекты внутри файлов шаблона и header("Location: ....");
определенно не принадлежит там, если у вас нет {php}header("Location:...");{/php}
Если у вас есть более поздний, чем вам нужно получить доступ к $event_id по-другому, потому что он недоступен из класса Smarty, если вы сначала не назначили его
$smarty->assign('event_id', $event_id);
чем
{php}
$event_id = $this->get_template_vars('event_id');
header("Location:user_event.php?event_id={$event_id}&justadded=1");
{/php}
или
{php}
global $event_id;
header("Location:user_event.php?event_id={$event_id}&justadded=1");
{/php}
Но наличие такого кода внутри шаблона совершенно неверно. Обычно такие вещи следует делать в файле php активации до того, как шаблон когда-либо вызывается.