【问题标题】:PHP variable change based on device width基于设备宽度的PHP变量更改
【发布时间】:2013-09-17 15:19:21
【问题描述】:

我想要做的是让我的网站获得访问者当前窗口的宽度。然后我想有两个不同的选择。像这样的:

<script>
if (screen.width < 768) {
<?php $a = 1; ?>
} else {
<?php $a = 2; ?>
}
</script>

我想要做的是我的 php 变量应该根据设备宽度而改变。

哪种方法是最简单的方法?我无法编写或理解单行 AJAX,所以如果这是唯一的方法,我会对某种指南感到非常满意,以使其尽可能简单。

而用 CSS 来实现并不是正确的方法。所以,请不要告诉我与 CSS 有任何关系的事情。

编辑:

我不确定你们是否理解我真正想从这段代码中得到什么。

所以我会写的更具体。

我有一个网站,上面有一个显示 2 条最新消息的图像滑块。在此下方,我查询了设置为偏移量 2 的帖子,因为我不想查询滑块中的相同新闻。

所以我的代码是这样的:

<?php 
$offset = 2;
$showposts = 10; 
?>
    
    <?php query_posts(array('offset' => $offset, 'showposts' => $showposts,'cat' => '8')); ?>

而且我无法进行两个不同的查询,因为我的广告脚本加载次数不能超过 1 次,因为那样它们就根本不会显示。所以这一切都需要在一个查询中完成,这就是为什么它必须根据设备宽度进行更改。

现在我忘了告诉我在宽度

我希望这更有意义......

【问题讨论】:

  • 您不能将 javascript 与 PHP 混合使用。您只能将 $_GET 或 $_POST 返回到脚本(或某种形式的 AJAX)。
  • 在页面发送到客户端之前,您无法获取屏幕宽度。您可以将这两个值都发送到客户端代码,并且只根据那里的屏幕宽度使用一个。但这取决于这些值的用途。
  • 阅读question。也许它可以帮助您理解为什么,为什么不,以及如何从另一个 pov 中实现这一目标。
  • 请仔细检查您的代码。您确定您的代码不能以您在客户端处理的方式进行转换吗?这个检查可以很容易地在客户端的 CSS 和 JavaScript 中完成。如果没有,则需要 AJAX 和 PHP 的组合。
  • 事实上,任何尝试这样做都需要总共 两个 请求。第一个渲染页面,第二个将宽度值发送回服务器。除非您想重新加载整个页面,否则您正在考虑根据客户端代码中的宽度来操作您的 UI。理想情况下,您将呈现具有显示两种样式的能力的页面,并在宽度已知后选择在客户端代码中显示哪一种。

标签: javascript php jquery ajax


【解决方案1】:

您可以使用 cookie 在 JS 和 PHP 之间进行通信。

这里是设置或更新 cookie 的 JS:

document.cookie = "someKey=someVal; path=/;";

然后你就可以使用$_COOKIE["someKey"]来访问PHP中的数据了。

有一些 PHP 脚本试图从用户代理中检测设备类型,这就是我在此 cookie 不可用时使用的(第一页加载)。因此,我可以根据智能猜测在页面加载之前更改我的 UI。

【讨论】:

  • 这个答案取决于用户是否启用了 cookie。可以在浏览器中禁用它们,然后您将无法确定宽度。
  • @schmidt382 是的。您知道检测 cookie 是否被禁用的任何标准方法吗?
  • 最基本的方法是首先在javascript中验证它,尝试设置cookie并检查该变量是否设置了预期值。如果没有,则可能未启用 cookie。有一些关于检查 cookie 是否启用的方法的票:herehere
【解决方案2】:

一个简单的方法是使用 AJAX。然后,您将能够向服务器发出请求并执行某些脚本。

$.post("http://yoursite.com/script.json",  { windowsWidth:  screen.width });

您可以在变量上接收窗口宽度,然后在脚本中执行您想要的任何操作。

【讨论】:

  • 正如我之前写的;我不知道该怎么做,而且 AJAX 对我来说没有任何意义。您是否阅读了我对问题的编辑描述?
  • 您正在寻找的通常是使用 CSS3 查询或使用 jQuery 和其他样式表来完成。没有人会做你想做的事,这毫无意义......想想其他方法,忘记在 PHP 中使用窗口宽度的条件。
【解决方案3】:

试试这样的:

var w = $(document).width(); // if you are using jquery
var v;
if (w < 768)
    v = <?php echo $var;?>;
else
    v = <?php echo $var2;?>;

【讨论】:

  • 我没有投反对票,但是...这样您将 PHP 变量传递给 JavaScript 变量。
  • 你是对的。没有正确抓住话题发起者的问题,尽管这实际上可能会解决他的问题,因为没有人真正知道他想要什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多