仅当参数已存在以保存选择退出选项响应式设计时,才在每个请求中附加URL参数

时间:2013-07-19 08:12:38

标签: php wordpress url parameters

我有一个响应迅速的Wordpress网站:www.2eenheid.de。我的客户希望移动设备上的选项以全尺寸方式查看网站,这是一个选择退出的响应选项。现在,我找到了这个解决方案:

http://css-tricks.com/user-opt-out-responsive-design/

当调用URL参数meta name="viewport"(URL变为:www.2eenheid.de/?resp=no)时,使用PHP删除?resp=no标记。通过删除meta name="viewport"标记,该网站会在移动设备上变为全尺寸。请参阅以下代码:

<head>

   <title>My cool site huzzah</title>

   <?php
     if (!$_GET['resp'] == 'no') { ?>
       <meta name="viewport" content="width=device-width">
   <?php } ?>

</head>

<body class="<?php if (!$_GET['resp'] == 'no') { echo "resp"; } ?>">

这会将当前页面更改为fullsize,但如果我单击其他链接,它将更改回响应,这是合乎逻辑的,因为该链接不再包含参数?resp=no

现在我的客户要求如果用户想要全尺寸网站,即使用户点击不同的网址,也需要保持全尺寸,直到用户将其更改回响应状态。

所以我的问题是如何在每次点击网址请求时点击?resp=no参数,直到用户将其更改为响应时间为点击其他链接(可能使用不同的参数)?

我试过谷歌搜索,但我找不到任何好的解决方案。我看到人们建议会话值,但我发现很难理解,有些人说这不是很好的做法,因为会话值用于登录。

任何帮助都将受到高度赞赏。

编辑3: 下面的建议似乎很好,但我对PHP会话很新。我将我的代码更改为以下建议:

<?php ini_set('display_errors', true);

session_start(); 
if(isset($_REQUEST['resp'])) {
    $_SESSION['resp'] = boolval($_REQUEST['resp']);
}

// Check if enabled
$enabled = isset($_SESSION['resp']) && $_SESSION['resp'];


?><!DOCTYPE html>

<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>" />

<?php if($enabled): ?>
    <meta name="viewport" content="width=device-width">
<?php endif; ?>

<title>LALALA</title>

</head>

<body <?php body_class(); ?> id="<?php if(isset($_SESSION['resp']) && $_SESSION['resp']) { echo "resp"; } ?>">

任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

session_start();

// ...

if(isset($_REQUEST['resp'])) {
    $_SESSION['resp'] = boolval($_REQUEST['resp']);
}

并且:

<?php if(isset($_SESSION['resp']) && $_SESSION['resp']): ?>
    <meta name="viewport" content="width=device-width">
<?php endif; ?>

你可能也会像评论中所说的那样使用cookies,但我从来没有看过它是如何运作的。

编辑:一个例子:

<?php

// If the parameter is in the URL, enable/disable (else leave as it currently is).
if(isset($_REQUEST['enableMode'])) {
    $_SESSION['enableMode'] = boolval($_REQUEST['enableMode']);
}

// Check if enabled
$enabled = isset($_SESSION['enableMode']) && $_SESSION['enableMode'];

?>

<?php if($enabled): ?>
    <meta name="viewport" content="width=device-width">
<?php endif; ?>

<a href="index.php?enableMode=1">Enable mode</a>
<a href="index.php?enableMode=0">Disable mode</a>
<a href="index.php">Change page without changing anything</a>

答案 1 :(得分:0)

用于此的会话会话太多,存在更好的机制,称为&#34; output_add_rewrite_var&#34;。使用这个系统,我们可以说如下:

<?php if(!isset($_GET['resp'])): ?>
<meta name="viewport" content="width=device-width">
<?php else:
    output_add_rewrite_var("resp", "1");
endif; ?>

以上代码完全适合MVC系统的视图位置,因为它是视图特定选项。该代码的工作方式是查看$_GET['resp']是否存在,并根据具体情况,如果存在,请调用output_add_rewrite_var("resp", "1");将其自身置于其他网址中,如果它不存在,它添加了元标记。