Я использую Ли Манро хрюкать-электронный документооборот создать набор шаблонов электронной почты для PHP-фреймворка, который не имеет шаблонизатора, то есть: он использует необработанные переменные php <?= $firstname; ?>
и т.д., в шаблонах.
Все шло хорошо, пока я не попытался реализовать эти переменные в источниках электронной почты, а потом обнаружил, что assemble
душит и выбрасывает ошибки каждый раз, когда сталкивается с переменной.
gruntfile
для этого проекта уже включены grunt-replace
поэтому я подумал сделать замену текста, который не будет проанализирован handlebars
лайк ## item ##
и превратить его в фигурные скобки {{ item }}
затем я могу использовать Twig в приложении PHP для анализа PHP.
Моя проблема в том, что я не могу решить replacement
часть grunt-replace
,
я нашел Эта статья который делает что-то похожее на то, что я хочу, но эта функция замены не будет работать для этого.
Пока у меня есть это:
replace: {
dist: {
options: {
usePrefix: false,
patterns: [
{
match: /\##[^##]*\##/g,
replacement: ???????
}
]
},
files: {
expand: true,
flatten: true,
src: ['<%= paths.dist %>/**/*.html'],
dest: '<%= paths.dist %>/'
},
}
}
ОБНОВИТЬ:
После некоторых дополнительных попыток у меня есть это:
replace: {
dist: {
options: {
usePrefix: false,
patterns: [
{
match: /\##[^##]*\##/g,
replacement: '{{ $1 }}'
}
]
},
files: [
{
expand: true,
flatten: true,
src: ['<%= paths.dist %>/front/*.html'],
dest: '<%= paths.dist %>/front/'
},
{
expand: true,
flatten: true,
src: ['<%= paths.dist %>/back/*.html'],
dest: '<%= paths.dist %>/back/'
}
]
}
}
В моих скомпилированных шаблонах ## firstname ##
теперь заменяется {{ $1 }}
Как получить значение содержимого в соответствующих тегах для замены?
Вам просто нужно использовать группу захвата (круглые скобки, круглые скобки) вокруг шаблона, который вам нужен для захвата значения, и конструкцию, которая будет соответствовать любому количеству любых символов от ## до ближайшего ##:
Либо используйте ленивую конструкцию:
match: /##([^#]*(?:#(?!#)[^#]*)*)##/g
Или используйте развернутую версию:
match: /##([\s\S]*?)##/g
Других решений пока нет …