Является ли это возможным? Если так, то как?
Если это не так, я должен отказаться от мопса, если мне нужно написать PHP в моих документах?
После поиска вокруг я не нашел никого, кто обратился к этому.
Вы можете встраивать 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, вам нужно изменить расширение. Один из простых способов сделать это — обработать их, используя глоток с Глоток-мопс а также глоток переименование плагины, которые бы выглядели примерно так:
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
И если ваш мопс обрабатывается на сервере, то вы также включите МОПС обработки шаг, например, если вы используете апаш вы могли бы использовать
mod_ext_filter настроен таким образом с мопс-кли установлены:
ExtFilterDefine pug-to-html mode=output intype=text/pug outtype=text/html \
cmd="pug"
<Location />
SetOutputFilter pug-to-html
</Location>
Вы проверили pug-php
проект? Лично у меня нет опыта работы с этим конкретным модулем, но он, похоже, делает то, что вы пытаетесь достичь: возможность использовать PHP в Pug.
Вы можете использовать синтаксис scape с кавычками:
!{'<?php #php code ?>'}
Например:
p Hello !{'<?php echo "My name"; ?>'}
Окажет:
<p>Hello <?php echo "My name"; ?></p>
Вы можете проверить это здесь: https://pug-demo.herokuapp.com/