Php 在会话中存储值并在tpl文件xcart上检索

Php 在会话中存储值并在tpl文件xcart上检索,php,session,smarty,x-cart,Php,Session,Smarty,X Cart,我在x-cart中面临问题, 我正在尝试创建会话并在x-cart中存储值 为此,我使用了 x_session_register('subscription'); 以及其中的简单变量 $rs=1; if($rs==1) { $subscription=1; } else { $subscription=0; } 之后,在tpl文件中使用了一些代码 {$smarty.session.subscription} 但什么也没发生 我也试过了 {php}{/php} $_SESSION[''

我在x-cart中面临问题, 我正在尝试创建会话并在x-cart中存储值 为此,我使用了

x_session_register('subscription');
以及其中的简单变量

$rs=1;
if($rs==1)
{
  $subscription=1;
}
else
{
  $subscription=0;
}
之后,在tpl文件中使用了一些代码

{$smarty.session.subscription}
但什么也没发生 我也试过了

{php}{/php}
$_SESSION[''];
但是我帮不了我,我不明白这到底是怎么回事 文件和模板不同,文件路径也不同 尝试在login.php中创建会话,并将其保存在head.tpl文件中
请帮我一下。提前感谢

您应该首先检查
$\u会话
中是否有任何变量。在PHP中运行(不是在Smarty中)
var\u dump($\u SESSION)
以确保其中有任何变量

// Try this in you php 
$smarty->assign('session',$_SESSION);

// OR in tpl
/*
{$session|print_r} // for above assignment

// OR
{php}
    print_r($_SESSION);
{/php}

// OR
{$smarty.session.*}

*/
我查看了文档,似乎x-cart没有按照您认为的方式存储会话变量(因此
$\u session
中不会有变量)。它不会将会话存储在
$\u SESSION
中,而是以一些自定义方式存储。你可以看看


当您尝试在Smarty中使用
$\u SESSION
时,由于
$\u SESSION
中没有数据,因此无法正常工作。您需要使用x-cart方法获取会话变量,然后将它们分配给Smarty,下面是一些与会话变量相关的注释,涉及x-cart 4.4.x分支

使用
x\u session\u register()
函数,可以将每个变量插入到
$XCART\u session\u VARS
数组中,从而使用
x\u session\u save()
函数,会话变量数组保存在数据库中

xcart中的会话数据保存在
xcart\u Session\u data
表中,主键使用每个访问者的会话id值(“sessiond”列),所有数据以序列化格式保存在“data”列中

示例代码段:

if ($some_var == "Y"){
  x_session_register("my_var");  
  $my_var="true";
  x_session_save();
}

if($XCART_SESSION_VARS['my_var '] =="true")
  $smarty->assign("my_var", $my_var); 
如果
$XCART\u SESSION\u VARS
变量不在范围内,我们将其声明为全局变量并检索它。

在php文件中

    if ($var1){
      x_session_register("my_var");  
      $my_var="content";
      x_session_save();
    }

    if($XCART_SESSION_VARS['my_var'] !=""){
      $smarty->assign("my_var", $XCART_SESSION_VARS['my_var']);
      x_session_unregister("my_var"); 
    }
在tpl文件中

{if $my_var}
    {$my_var}
{/if}

php和tpl位于不同的位置,而不是此php文件中指定的tpl。不工作。您是否在任何php文件中打印了会话?调试它可能会有所帮助。你确定你的会话存在吗?当你打印{$smarty.session.*}时会发生什么?如果你的会话存在,那么它必须按照,您需要使用
$subscription=1
而不是
$subscription==1
,它只是将变量的值与1进行比较,但除此之外什么都不做。