我有可能向页面添加类名吗?我不知道如何实现这样的功能,或者它是否已经存在。
我正在使用 Processwire 3.0.42。
将这样的内容放在正文所在的模板中:
<body class="<?php echo $page->template->name; ?>">
这将为您的页面正文标签提供一个等于页面模板名称的类。
您可以以相同的方式添加页面标题。
<body class="<?php echo $page->name; ?>">
不要担心为每个页面添加一个类。这样做的开销可以忽略不计。
如果您希望添加不同的类,则需要在模板中添加一个字段并将其附加到上面的代码中。
与 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。
有很多选择,这取决于您的需求,也许还有想象力:-)。
您可以使用页面名称、模板名称、页面 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