1

我有可能向页面添加类名吗?我不知道如何实现这样的功能,或者它是否已经存在。

我正在使用 Processwire 3.0.42。

4

4 回答 4

2

将这样的内容放在正文所在的模板中:

<body class="<?php echo $page->template->name; ?>">

这将为您的页面正文标签提供一个等于页面模板名称的类。

于 2017-03-01T15:49:15.207 回答
1

您可以以相同的方式添加页面标题。

<body class="<?php echo $page->name; ?>">

不要担心为每个页面添加一个类。这样做的开销可以忽略不计。

如果您希望添加不同的类,则需要在模板中添加一个字段并将其附加到上面的代码中。

于 2017-03-02T09:54:47.117 回答
0

与 ProcessWire 一样,一切都在您的控制之下。@ivangretsky 的完美答案的替代方案包括 -

只需在模板文件中包含一个条件。(如果您需要使用相同的模板将其他类添加到其他页面,这不能很好地扩展。)

<?php
  $bodyClass = '';
  if($page->id == 1021) $bodyClass = 'my-class';
?>

<body class="<?php echo $bodyClass; ?>">

NB 使用 $page->id 比使用 $page->name 更好,例如,因为 ID 不会更改,而名称可以更改。

您还可以在页面模板定义中添加一个字段。添加一个名为“Body Class”之类的字段。然后在模板文件中使用该字段的内容。

<body class="<?php echo $page->body-class; ?>">

这将比我的其他建议更好地扩展,并且如果您不希望用户弄乱它的值,ProcessWire 后端有一些选项可以在正常使用期间隐藏或部分隐藏该字段。

CSS 规范中需要注意的一个“问题”是 CSS 标识符(包括类名和 ID)不能以数字开头,因此您不能使用 $page->id。

于 2017-03-02T10:01:45.433 回答
0

有很多选择,这取决于您的需求,也许还有想象力:-)。

您可以使用页面名称、模板名称、页面 ID 或组合。

<body class="<?php echo $page->template->name; ?> page-id-<?php echo $page->id; ?>">

// Output
<body class="your-template-name page-id-1234">

通过这种方式,您可以定位模板、页面或两者。

或者,正如@ivangretsky 所述,您可以将自定义字段添加到页面。同样,您可以将此方法与模板名称等结合使用。这取决于您的需求和您想要实现的目标。

注意:

使用 $page->id 比使用 $page->name 更好,因为 ID 不会更改,而名称可以更改。@DaveP

于 2017-07-26T07:31:51.753 回答