1

我有一些代码可以工作并使用表单更改样式表。只要您保持浏览器窗口打开,它就可以工作。您可以返回另一个站点,样式将是您选择的样式,这很好,但是如果您关闭浏览器并返回,它将被设置为默认值。这是因为我每次都开始一个新会话,还是因为我没有设置 cookie 的有效期?那是问题一。

问题 2 是我有当前可用的下拉菜单并选择正确的样式表,但我也有一些用于文本大小的单选按钮。我希望将它们合并,但它们将使用不同的样式表工作,这些样式表只包含文本大小,因此默认文本大小是标准的,用户可以与样式表一起更改它们,但它们可以独立工作。任何人都可以建议一些编码谢谢。

以下是我目前正在使用的内容。干杯

php设置样式:

  if (isset($_COOKIE["selectedStyle"])) // has the cookie already been set
  {
    $style=$_COOKIE["selectedStyle"];
  }else{
$style = spring;
}

  if (isset($_POST["changeStyle"]))  // changing the style
  {
    $style=$_POST["changeStyle"];
  }

  setcookie("selectedStyle",$style); // update or create the cookie
 ?>

带有适用于文本转换器的下拉菜单和单选按钮的表单:

<div id="headerInfo">
<p><strong>User Controls</strong></p>
  <form method="post" action="<?= $_SERVER["PHP_SELF"];?>">
Select Page Style:<br/>
<select name="changeStyle">
<option value="spring">Spring (Green)</option>
<option value="summer">Summer (Yellow)</option>
<option value="winter">Winter (Blue)</option>
<option value="autumn">Autumn (Orange)</option>
</select>
<input type="submit" name="submitstyle" value="Set Style">
  </form>
    <form method="post" action="<?= $_SERVER["PHP_SELF"];?>">
Select Font Size:<br/>
<span class="smallText">A</span><input type="radio" name="changeFontSize" value="small"/>
<span class="standardText">A</span><input type="radio" name="changeFontSize" value="standard"/>
<span class="largeText">A</span><input type="radio" name="changeFontSize" value="large"/>
<span class="xLargeText">A</span><input type="radio" name="changeFontSize" value="extraLarge"/>
</select>
<input type="submit" name="submitfont" value="Set Size">
</div>
4

3 回答 3

2

setcookie有一个expire参数,您可以使用它来设置所需的到期日期。文档有一个关于如何做到这一点的例子。

只需创建另一个带有字体大小信息的 cookie 并调用相关的样式表。单选按钮需要在form标签内作为 http 请求的一部分发送。

于 2009-02-11T13:09:17.453 回答
1

当谈到字体大小调整时,我个人会说,你最好在客户端更改大小,例如使用 jQuery。我认为一般来说,如果有人在每个页面上需要更大的字体大小(为了可访问性),他们会在浏览器中增加字体大小。

尽管如果您想更改样式表元素/永久设置更高的字体大小,您也可以执行 AJAX 调用来设置 cookie/在数据库中保存记录。

于 2009-02-11T19:50:57.957 回答
1

您最好使用$_SESSION跨页面保留样式。这样,即使用户关闭了 cookie,它也能正常工作,因为它会用会话 ID 为您重写 URL。

于 2009-02-11T20:08:51.780 回答