Processwire 添加 css class 到页面

Processwire Add css class to page

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

我正在使用 Processwire 3.0.42。

在正文所在的模板中放置类似这样的内容:

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

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

您可以用同样的方法添加页面标题。

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

不要担心在每个页面上添加 class。这样做的开销可以忽略不计。

如果您想添加一个不同的 class,您需要向您的模板添加一个字段并将其附加到上面的代码。

在 ProcessWire 中,一切 都在您的掌控之中。 @ivangretsky 完美答案的替代方案包括-

只需在您的模板文件中包含一个条件。 (如果您需要使用相同的模板向其他页面添加其他 classes,则这种扩展效果不佳。)

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

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

注意使用 $page->id 优于 $page->name,例如,因为 ID 不会改变而名称可以。

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

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

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

CSS spec 中的一个 'gotcha' 需要注意的是 CSS 标识符,包括 class 名称和 ID 不能以数字开头,因此您不能 只需使用$page->id.

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

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

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

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

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

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

通知:

Using $page->id is better than $page->name, as the ID doesn't change while the name could. @DaveP