[英]Is it possible to write PHP in jade/pug?
可能吗? 如果是这样,如何? 如果不是,如果我需要在我的文档中编写 PHP,我是否必须放弃 pug? 在四处搜索之后,我没有找到任何人解决这个问题。
您可以将 PHP 嵌入到 Pug 模板中,就像您希望通过相对不受干扰的任何文字纯文本一样[*]。 文档中包含许多选项,但我认为这些很可能是嵌入 PHP 的最佳选项:
p Good morning, <?php echo $user->name?>
。<?php echo $foo; ?>
)都可以正常工作。多行 PHP 是它变得有点复杂的一种情况。 如果您同意将其包装在 HTML 元素中,则可以使用 Pug 的块文本语法:在元素后放置一个点,然后在下方缩进纯文本。
p. <?php if ($multiline) { echo 'Foo;'? } ?>
如果您需要在元素外部使用它,另一种选择是在每一行前加上管道:
|<?php |if ($multiline) { | echo 'Foo;'? |} |?>
(从技术上讲,由于上面的第 2 点,第一行不需要加前缀,但如果使用这种方法,为了保持一致性,我无论如何都会加前缀。)
p(class?="<?php echo $foo ?>")
。 (有趣的是,专门为此用例添加了对未转义属性值的支持。)当然默认情况下.pug 文件被编译成.html 文件,所以如果你使用它们来生成PHP,你会想要更改扩展名。 一种简单的方法是使用带有gulp -pug和gulp-rename插件的 gulp 来处理它们,看起来像这样:
var gulp = require('gulp'),
pug = require('gulp-pug'),
rename = require('gulp-rename');
gulp.task('default', function () {
return gulp.src('./*.pug')
.pipe(pug())
.pipe(rename({
extname: '.php'
}))
.pipe(gulp.dest('.'));
});
我没有广泛使用 Pug,所以我不知道在现实世界的用例中是否会出现任何潜在的陷阱,但上面的简单示例都按预期工作。
[*] Pug 仍然对纯文本执行变量插值,但它使用#{variable}
格式,这不应与 PHP 的标准语法中的任何内容冲突。
由于 PHP 不关心“外部”代码是 HTML 还是任何特定的代码,您可以像往常一样简单地使用 PHP 并让它输出 Pug 格式的代码而不是 HTML。 例如:
myPugTemplate.pug.php
html
head
title "<?= $this->title ?>"
body
<?php
// Since we're outputing Pug markup, we have to take care of
// preserving indentation.
$indent=str_repeat(' ', 2);
if ($this->foo) {
echo $indent . 'bar= myPost';
} else {
echo $indent . 'baz= myNav';
}
?>
footer
+footerContent
如果你的 Pug 在服务器上处理,那么你还需要包括一个Pug 处理步骤,例如,如果你使用Apache ,你可以使用以这种方式配置的mod_ext_filter并安装pug-cli :
ExtFilterDefine pug-to-html mode=output intype=text/pug outtype=text/html \
cmd="pug"
<Location />
SetOutputFilter pug-to-html
</Location>
你检查过pug-php
项目了吗? 我个人没有使用这个特定模块的经验,但它似乎可以完成您想要完成的工作:能够在 Pug 中使用 PHP。
您可以使用带引号的 scape 语法:
!{'<?php #php code ?>'}
例如:
p Hello !{'<?php echo "My name"; ?>'}
将呈现:
<p>Hello <?php echo "My name"; ?></p>
你可以在这里测试它: https ://pug-demo.herokuapp.com/
有一个以 PHP 原生编写的著名且维护良好的 Pug 处理器。 您可以使用它来将您的 Pug 文件处理成 HTML,就像原来的 Pug 一样,其优点是它允许您轻松地在 Pug 文件中嵌入和使用 PHP 代码。 如果您在 Pug 中使用 PHP,请查看:
p Hello !{'<?php echo "My name"; ?>'}
工作但是
link(href="../assets/css/style.css?v=!{'<?=$AppsVersion?>'}" rel="stylesheet" type="text/css")
不工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.