HTML — можно ли написать PHP в Jade / Pug?

Является ли это возможным? Если так, то как?
Если это не так, я должен отказаться от мопса, если мне нужно написать PHP в моих документах?
После поиска вокруг я не нашел никого, кто обратился к этому.

4

Решение

Вы можете встраивать 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, вам нужно изменить расширение. Один из простых способов сделать это — обработать их, используя глоток с Глоток-мопс а также глоток переименование плагины, которые бы выглядели примерно так:

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.

7

Другие решения

Поскольку 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>
2

Вы проверили pug-php проект? Лично у меня нет опыта работы с этим конкретным модулем, но он, похоже, делает то, что вы пытаетесь достичь: возможность использовать PHP в Pug.

1

Вы можете использовать синтаксис scape с кавычками:

!{'<?php #php code  ?>'}

Например:

p Hello !{'<?php echo "My name"; ?>'}

Окажет:

<p>Hello <?php echo "My name"; ?></p>

Вы можете проверить это здесь: https://pug-demo.herokuapp.com/

0
По вопросам рекламы [email protected]