HTML <a>передача переменных PHP, но не загрузка новой страницы - PullRequest
1 голос
/ 14 февраля 2011

Я работаю над сайтом, где пользователь может обновить тему по ссылке вверху страницы. Отказ от ответственности: позже я заменю ссылку на Javascript, но сейчас я хочу безопасное резервное копирование на случай, если пользователь не поддерживает Javascript.

Я могу заставить ссылку отображаться нормально с моим PHP. Он выходит на <a href="?theme=dark">, если это светлая тема, и отображается как <a href="?theme=light">, если пользователь использует темную тему.

Однако, если щелкнуть любую из этих ссылок, обновляется только браузер в моей адресной строке, что заставляет меня обновить страницу вручную, чтобы сменить тему. Страница не перезагружается, когда я нажимаю на ссылку, и поэтому тема не меняется. Он действует как асинхронный запрос, но все соответствующие изменения встроены в HTML, поэтому они не происходят до обновления.

Я что-то не так делаю? Есть ли способ заставить страницу перезагрузиться, когда я нажимаю на эти ссылки?

Спасибо за любую помощь, которую вы можете предложить!

РЕДАКТИРОВАТЬ: Вот текущий сценарий:

<?php
if ($_GET["theme"]) {
    $theme = $_GET["theme"];
    setcookie("theme", $theme, time()+21*24*60*60);
}
else if (isset($_COOKIE["theme"]))
    $theme = $_COOKIE["theme"];
else {
    $theme = "light";
    setcookie("theme", $theme, time()+21*24*60*60);
}
?>
<!DOCTYPE HTML>
<html>
<head>
<!-- head content... -->
</head>
<body id="<?php
    echo $_COOKIE["theme"];
    ?>">

<div id="container">
    <div id="header">
        <a id="switch" href="?theme=<?php
            if ($_COOKIE["theme"]=="light")
                echo "dark";
            else
                echo "light";
        ?>">Lights</span>
    </div>
    <!-- Rest of page content -->
</div>
</body>
</html>

С помощью приведенного выше кода, нажав на ссылки, я перехожу на /index.php?theme=theme, но я должен обновить, прежде чем изменения вступят в силу. С сервера не загружается новый html, поэтому идентификатор тела не меняется.

Печенье остается без изменений.

P.S. Как я уже говорил, я буду делать асинхронную версию с Javascript, я просто хочу сначала поддержать пользователей, у которых она не включена. Спасибо.

1 Ответ

3 голосов
/ 14 февраля 2011

Изменить эту строку

<body id="<?php
echo $_COOKIE["theme"];
?>">

к этому

<body id="<?php
echo $theme;
?>">

и это

if ($_COOKIE["theme"]=="light")

к этому

if ($theme=="light")

Ваша проблема заключается в том, что когда вы устанавливаете cookie-файл при загрузке текущей страницы, он недоступен до следующей загрузки страницы. следовательно, почему освежение, кажется, заставляет его работать.

...