рдЬреИрд╕реЗ {{ helper1 helper2 text }}
, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрднреА-рдХрднреА рдХреЗрд╡рд▓ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рднрд╛рд╡реЛрдВ рдХреЛ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: {{headerText {{getTitle "my_page"}}}}
ред
рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╣рд╛рдпрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рдЬрдВрдЬреАрд░ рджреЗрддрд╛ рд╣реИ:
{{chain "helper1" "helper2" text}}
рдЕрдЧрд░ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдРрд╕рд╛ рд╕рд╣рд╛рдпрдХ рдмрдирд╛рдпрд╛ рд╣реИ:
Handlebars.registerHelper('chain', function () {
var helpers = [], value;
$.each(arguments, function (i, arg) {
if (Handlebars.helpers[arg]) {
helpers.push(Handlebars.helpers[arg]);
} else {
value = arg;
$.each(helpers, function (j, helper) {
value = helper(value, arguments[i + 1]);
});
return false;
}
});
return value;
});
рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
{{chain "taxAdd" "formatPrice" this.product.price}}
@Znarkus рдЬреЛ jQuery рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ
@jrajan рдореИрдВрдиреЗ рдХреЗрд╡рд▓ jQuery.each
, рдЬреЛ рднреА рдЖрдкрдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рд╣реИрдВ, рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ jQuery рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ:
Handlebars.registerHelper('chain', function() {
var helpers = [];
var args = Array.prototype.slice.call(arguments);
var argsLength = args.length;
var index;
var arg;
for (index = 0, arg = args[index];
index < argsLength;
arg = args[++index]) {
if (Handlebars.helpers[arg]) {
helpers.push(Handlebars.helpers[arg]);
} else {
args = args.slice(index);
break;
}
}
while (helpers.length) {
args = [helpers.pop().apply(Handlebars.helpers, args)];
}
return args.shift();
});
рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рдпрджрд┐ рдХрд┐рд╕реА рднреА рддрд░реНрдХ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХрд┐рд╕реА рд╕рд╣рд╛рдпрдХ рдХреЛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рд╕рд╣рд╛рдпрдХ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд╛рд░ (рдЬрдмрд░рджрд╕реНрддреА) рднреА рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реЛрдВрдЧреЗред
рдпрд╣рд╛рдВ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВред рд╡реЗ рджреЛрдиреЛрдВ рдЖрдкрдХреЛ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░рддреНрдпреЗрдХ рд╕рд╣рд╛рдпрдХ рдХреЛ рдХрдИ рддрд░реНрдХ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рд╡реЗ рдХреЙрдлреА-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рднреА рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ рдФрд░ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдпрд╛ рд▓реЙрд╢ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред
рдкрд╣рд▓рд╛ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
{{{chain 'join-strings' 'link-twitter-handles' '@' twitterUsername}}}
рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛:
{{{chain 'join-strings' 'link-twitter-handles' '@' 'join-strings' twitterUsername}}}
Handlebars.registerHelper 'chain', ->
# Get rid of the options hash
args = Array.prototype.slice.call arguments, 0, -1
helpers = []
argsForHelpers = null
value = undefined
_.each args, (arg, i) ->
if Handlebars.helpers[arg]
helpers.push Handlebars.helpers[arg]
else if not value # Only call the helpers once
value = arg
unless argsForHelpers
argsForHelpers = args[i+1..-1]
argsForHelpers.unshift value
_.each helpers, (helper) ->
argsForHelpers[0] = value
value = helper.apply null, argsForHelpers
value
рдЗрд╕ рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рд╣реИ рдЬреЛ chain
рдХреЛ рддрд░реНрдХреЛрдВ рд╕реЗ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред
рд╕рд╣рд╛рдпрдХ рдпрд╣ рдорд╛рди рд▓реЗрдЧрд╛ рдХрд┐ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд╕рд╛рдордиреЗ рд╣рд░ рддрд░реНрдХ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╣реИ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдХреЛ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
Handlebars.registerHelper 'chain', ->
# Get rid of the options hash
args = Array.prototype.slice.call arguments, 0, -1
helpers = []
for arg,i in args
if arg is '--'
argsForHelpers = args.slice i + 1
value = argsForHelpers[0]
break
else
helpers.push Handlebars.helpers[arg]
_.each helpers, (helper) ->
argsForHelpers[0] = value
value = helper.apply null, argsForHelpers
value
рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП:
{{{chain 'join-strings' 'link-twitter-handles' '@' 'join-strings' twitterUsername}}}
рдФрд░ рдпрд╣ рд╡рд╕реНрддреБ:
{twitterUsername: 'abc'}
рд╣рдо рдЗрд╕ рддрд░рд╣ рдПрдХ рд╕рдВрдХрд▓рд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<a href="https://twitter.com/join-stringsabc">@join-stringsabc</a>
рдореИрдВрдиреЗ @cdata рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмреНрд▓реЙрдХ
/**
* Takes an arbitrary number of arguments, the first of which is the operation type 'AND' or 'OR'.
* Following that will be a list of block helper names prefixed by '!!'.
* Calls each block helper with the remaining arguments.
*
* <strong i="7">@returns</strong> {string} returns options.fn(this) or options.inverse(this) depending on result of each helper and operation type
*/
Handlebars.registerHelper('chainBlockHelpers', function() {
var index, arg, helperResult, pass,
helpers = [],
args = Array.prototype.slice.call(arguments),
argsLength = args.length,
options = args[argsLength-1],
operation = args.shift(),
passVal = options.fn(this),
failVal = options.inverse(this);
if (operation !== 'AND' && operation !== 'OR')
throw new Error ('chainBlockHelpers only supports "AND" or "OR" operations.')
for (index = 0, arg = args[index]; index < argsLength; arg = args[++index]) {
if (typeof arg == 'string' && arg.startsWith('!!') && Handlebars.helpers[arg.substr(2)]) {
helpers.push(Handlebars.helpers[arg.substr(2)]);
} else {
args = args.slice(index);
break;
}
}
if (operation === 'AND') {
pass = true;
while (helpers.length) {
helperResult = helpers.pop().apply(Handlebars.helpers, args);
if (helperResult == failVal) {
pass = false;
break;
}
}
} else {
pass = false;
while (helpers.length) {
helperResult = helpers.pop().apply(Handlebars.helpers, args);
if (helperResult == passVal) {
pass = true;
break;
}
}
}
return pass ? passVal : failVal;
});
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдореВрд▓ рд╕рдорд░реНрдерди рд╣реИ:
{{ helper1 (helper2 text) }}
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдЕрдкрдиреЗ рд╕рд╣рд╛рдпрдХреЛрдВ рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рд╡рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
{{#helper1}}{{helper2}}content{{/helper2}}{{/helper1}}
@Znarkus рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЬрдм рдореИрдВ рджреЛ рд╕рд╣рд╛рдпрдХреЛрдВ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдореЗрд░рд╛ рдХреЛрдб рдмреНрд░реЗрдХ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдПрдХ рд╡рд╕реНрддреБ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ? рдореЗрд░реЗ рдбреАрдмрдЧрд░ рдореЗрдВ рдпрд╣ 'рдирд╛ рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рдФрд░ рдлрд┐рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ:' рдорд╛рдИ рд╡реИрд▓реНрдпреВ' рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ; рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ SafeString рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рджреЛ рдмрд╛рд░ рдкрд╛рд╕ рдХрд░рдирд╛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
Handlebars.registerHelper('shortNumber', function (value) {
//return new Handlebars.SafeString(iSpot.number.shortNumber(value)); // Breaks
return iSpot.number.shortNumber(value); // Works
});
Handlebars.registerHelper('asDollars', function (value) {
//return new Handlebars.SafeString(iSpot.number.asDollars(value)); // Breaks
return iSpot.number.asDollars(value); // Works
});
+1 @amwmedia рджреГрд╖реНрдЯрд┐рдХреЛрдг - {{pluralize (titleize (humanize schema.name))}}
+1 рдЬреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╛рдл рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
+1 @amwmedia рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдзрдиреНрдпрд╡рд╛рдж
@breandr / @amwmedia рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ @cssagogo рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗрд╡рд▓ Handlebars.SafeString()
w/o рд╣реИред
рддреЛ рдЖрдк рд╕реНрдорде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╕рдВрдж:
{{> partial text=(concat value (default extension 'PDF')) }}
рдзрдиреНрдпрд╡рд╛рдж
рдореИрдВ рдЦреБрдж рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдореИрдВрдиреЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рд▓рд┐рдпрд╛)ред рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рд╕реАрдзрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ (рдПрдХ рдорд╛рди рдкрд░ рдПрдХрд╛рдзрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рдирд╛)ред
рдореИрдВ рдЕрдкрдиреЗ рд╕рднреА рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ рд░рдЦрддрд╛ рд╣реВрдВред рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реИрдВ, рдореИрдВ рдорд╛рди рдХреЛ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдореЗрд░реЗ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рднреА рдЕрдиреНрдп рдХрд╛рд░реНрдп рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП:
{{ function1 value }}
рд╕рд╣рд╛рдпрдХ рдлрд╝рд╛рдЗрд▓
function2 (value) {
// code
}
function1 (value) {
// code
function2(value)
// code
return value;
}
рдмреЗрд╢рдХ, рдпрд╣ рдЬрд┐рддрдиреЗ рдЪрд╛рд╣реЗрдВ рдЙрддрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдЖрдк рдПрдХ рдЖрдзрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ "рдЪреЗрдирд░" рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
{{ chainer value }}
рд╕рд╣рд╛рдпрдХ рдлрд╝рд╛рдЗрд▓
function1 (value) {
// code
}
function2 (value) {
// code
}
function3 (value) {
// code
}
function4 (value) {
// code
}
function chainer(value) {
function1(value)
function2(value)
function3(value)
function4(value)
return value;
}
рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдиреЛрдЯ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдкрдиреЗ рдПрдЪрдЯреАрдПрдордПрд▓ рдореЗрдВ рд╣реИрдВрдбрд▓рдмрд╛рд░ рд╣реЗрд▓реНрдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореЗрд░реЗ рд╕рднреА рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЙрдирдХрд╛ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдЦреБрдж рдХреЛ рд╕реАрдзреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдордмреИрдХ :)
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдореВрд▓ рд╕рдорд░реНрдерди рд╣реИ:
{{ helper1 (helper2 text) }}