繁体   English   中英

可以用 jade/pug 编写 PHP 吗?

[英]Is it possible to write PHP in jade/pug?

可能吗? 如果是这样,如何? 如果不是,如果我需要在我的文档中编写 PHP,我是否必须放弃 pug? 在四处搜索之后,我没有找到任何人解决这个问题。

您可以将 PHP 嵌入到 Pug 模板中,就像您希望通过相对不受干扰的任何文字纯文本一样[*]。 文档中包含许多选项,但我认为这些很可能是嵌入 PHP 的最佳选项:

  1. 在一个元素之后,它就会起作用。 例如, p Good morning, <?php echo $user->name?>
  2. 单独在一条线上。 由于任何以“<”开头的行都作为纯文本传递,因此任何一行 PHP 语句(例如, <?php echo $foo; ?> )都可以正常工作。
  3. 多行 PHP 是它变得有点复杂的一种情况。 如果您同意将其包装在 HTML 元素中,则可以使用 Pug 的块文本语法:在元素后放置一个点,然后在下方缩进纯文本。

     p. <?php if ($multiline) { echo 'Foo;'? } ?>

    如果您需要在元素外部使用它,另一种选择是在每一行前加上管道:

     |<?php |if ($multiline) { | echo 'Foo;'? |} |?>

    (从技术上讲,由于上面的第 2 点,第一行不需要加前缀,但如果使用这种方法,为了保持一致性,我无论如何都会加前缀。)

  4. 要在属性中使用 PHP,您只需要通过在等号前加上感叹号来防止转义: p(class?="<?php echo $foo ?>") (有趣的是,专门为此用例添加了对未转义属性值的支持。)

当然默认情况下.pug 文件被编译成.html 文件,所以如果你使用它们来生成PHP,你会想要更改扩展名。 一种简单的方法是使用带有gulp -puggulp-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,请查看:

Phug - PHP 的 Pug 模板引擎

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM