Php Silverstripe会话变量仅在刷新页面时显示

Php Silverstripe会话变量仅在刷新页面时显示,php,silverstripe,Php,Silverstripe,我最初是在Silverstripe论坛上问这个问题的。 我试图从各种谷歌定位广告中获取一个变量,根据广告中的?number=xxx来更改电话号码 该数字显示默认值,除非刷新页面,然后显示变量值 有没有更好的方法显示变量号而无需刷新页面 在page.ss中 <% if phonenumber %>$phonenumber <% else %>0800 xxx xxx<% end_if %> 正如本杰明·史密斯(Benjamin Smith)所建议的,您只需返

我最初是在Silverstripe论坛上问这个问题的。

我试图从各种谷歌定位广告中获取一个变量,根据广告中的?number=xxx来更改电话号码

该数字显示默认值,除非刷新页面,然后显示变量值

有没有更好的方法显示变量号而无需刷新页面

在page.ss中

<% if phonenumber %>$phonenumber <% else %>0800 xxx xxx<% end_if %>

正如本杰明·史密斯(Benjamin Smith)所建议的,您只需返回从$\u GET中获得的号码即可
请尝试以下操作:

php

public function Phonenumber() {
    if (isset($_GET['number']))
        $number = $_GET['number'];
    else
        $number = Session::get('number');
    $number = strip_tags($number);
    Session::set('number', $number);
    if ($number)
        return $number;
    else 
        return '0800 xxx xxx';
}
$Phonenumber
模板

public function Phonenumber() {
    if (isset($_GET['number']))
        $number = $_GET['number'];
    else
        $number = Session::get('number');
    $number = strip_tags($number);
    Session::set('number', $number);
    if ($number)
        return $number;
    else 
        return '0800 xxx xxx';
}
$Phonenumber

另外,我非常确定您不需要使用ob_start(),也不需要启动会话(silverstripe已经启动了一个会话)

我可以问一下defines.php是做什么用的,为什么您将该代码排除在defines.php中?为什么要摆弄会话?一个简单的“return$\u GET['number']”就可以了,不是吗?(当然,出于安全原因,您应该将其转义)defines.php用于将$phonenumber设置为googel location广告中的变量“?number=123456”。当用户登陆网站时,他们需要将phonenumber设置为任何位置,并且在访问期间不得更改。这就是我为什么要摆弄会议的原因。这是有效的,但只有当页面刷新时才有效。不过,为什么要将其放入defines.php文件中?为什么不在函数Phonenumber()中运行代码呢?除了通过Silverstripe创建的静态站点遗留的代码外,没有其他特定的原因。但那不是有它长那么宽吗?不管怎样,我已经将代码添加到Phonenumber()函数中,以一起删除include,仍然有相同的结果-只处理页面刷新。这是预期的效果。谢谢你在这里的坚持,但是球门柱被稍微移动了一下。。。我现在有一些页面是针对有机列表的,没有使用变量。但我仍然需要在会议中获得本地号码。我已经创建了一个新的$StaticNumber文本字段,在其中输入数字。在header.ss中,我有一个
$phonenumber$StaticNumber 0800 xxx xxx
。如何将$StaticNumber设置为会话变量@扎乌伯费什