{"id":265615,"date":"2015-09-14T23:24:02","date_gmt":"2015-09-14T19:24:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=265615"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=265615","title":{"rendered":"QuadBraces \u2014 \u043f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043f\u0430\u0440\u0441\u0435\u0440\u0430 MODx"},"content":{"rendered":"<p>       \u0414\u043e\u0431\u0440\u043e\u0433\u043e \u0437\u0434\u0440\u0430\u0432\u0438\u044f \u0445\u0430\u0431\u0440\u0430\u0436\u0438\u0442\u0435\u043b\u044f\u043c!<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u043b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 MODx Evolution, \u043c\u0435\u043d\u044f \u0435\u0434\u0432\u0430 \u043b\u0438 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b \u0443\u0434\u0430\u0440. \u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c, \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c \u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c, \u043a\u0430\u043a, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0441\u043a\u0430\u0437\u0430\u043b \u0431\u044b \u0418\u043b\u044c\u0438\u0447. \u041f\u043e \u0441\u0435\u043c\u0443 \u043c\u0435\u043d\u044f \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0435\u0434\u0432\u0430 \u043b\u0438 \u043d\u0430 \u043f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u044f \u0437\u0430\u0431\u0440\u043e\u0441\u0438\u043b \u044d\u0442\u043e \u0434\u0435\u043b\u043e, \u0438\u0431\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e. \u041d\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043f\u043e\u0439\u0434\u0451\u0442 \u043d\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c.<\/p>\n<p>  \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 MODx \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043b\u0443\u0447\u0448\u0438\u0445. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432 MODx Revolution. \u0412\u0441\u0451 \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e, \u0433\u0438\u0431\u043a\u043e \u0438 \u043f\u0440\u044f\u043c-\u0442\u0430\u043a\u0438 \u043f\u0430\u0441\u0442\u043e\u0440\u0430\u043b\u044c\u043d\u043e. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 MODx \u2014 \u044d\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0447\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u0442 \u0432\u043e\u0441\u0445\u0438\u0449\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043b\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0441\u0442\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0443 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u0418 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u043a\u043e\u043b\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c \u0433\u0432\u043e\u0437\u0434\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u043b\u0435\u043d\u0434\u0438\u043d\u0433\u043e\u0432 MODx, \u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u0418 \u0434\u0430\u0436\u0435 \u0434\u0430\u043b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u2014 QuadBraces.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u0435\u0440\u0432\u043e\u0435, \u043e \u0447\u0451\u043c \u0445\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 MODx-\u0435\u0440\u0430\u043c \u0447\u0430\u043d\u043a\u0438, \u0448\u0430\u0431\u043b\u043e\u043d\u044b, \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u044b \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u0440\u0441\u0435\u0440\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0435 \u0432 \u0411\u0414, \u0430 \u0432 \u0444\u0430\u0439\u043b\u0430\u0445. \u041f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0451\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b PARSER_TPL_PATH.<\/p>\n<h3>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438<\/h3>\n<p>  <\/p>\n<ul>\n<li>\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445;<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432: \u0447\u0430\u043d\u043a\u0438, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u044b, \u043e\u0442\u043b\u0430\u0434\u043a\u0430, \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u044b;<\/li>\n<li>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442.\u043d. \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442-\u043f\u0430\u043a\u043e\u0432 (\u0432 \u043f\u0430\u043f\u043a\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043f\u0430\u0440\u0441\u0435\u0440\u0430), \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 (\u043a\u0430\u043a \u0432 \u041d\u0435\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u043c-\u041c\u043d\u043e\u044e-\u041e\u0431\u044b\u0447\u043d\u043e-\u0414\u0432\u0438\u0436\u043a\u0435);<\/li>\n<li>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430. \u0422\u043e\u0447\u043a\u0430 \u0432 \u0430\u043b\u0438\u0430\u0441\u0435 \u0447\u0430\u043d\u043a\u0430 \/ \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \/ \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438;<\/li>\n<li>\u041e\u0448\u0438\u0431\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u0447\u0435 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u0434;<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u0438 \u00ab\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a\u00bb \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445;<\/li>\n<li>\u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0430\u043a\u0441\u0435\u0441\u0441\u043e\u0440\u043e\u0432;<\/li>\n<li>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 MODx \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0430\u0440\u0441\u0435\u0440\u0430.<\/li>\n<\/ul>\n<p>  \u0412 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430\u0445. \u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u0438 \u00ab\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a\u00bb \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c. \u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0438 \u0441\u043e \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u0430\u043c\u0438 \u2014 \u044d\u0442\u043e \u0432\u0441\u0451 \u0443\u0436\u0435 \u043d\u0430 \u0441\u043e\u0432\u0435\u0441\u0442\u0438 \u0442\u043e\u0433\u043e, \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441. \u0412 \u0441\u043c\u044b\u0441\u043b\u0435 \u0441\u0430\u043c\u0438 \u043f\u0438\u0448\u0438\u0442\u0435 =)<\/p>\n<p>  \u041d\u0438\u0436\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043a\u043b\u0430\u0441\u0441\u0430:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;?php   if (!defined(&quot;PARSER_TPL_PATH&quot;)) {     $_ = realpath($_SERVER['DOCUMENT_ROOT']).DIRECTORY_SEPARATOR;     $_ = $_.implode(DIRECTORY_SEPARATOR,array('content','tpl')).DIRECTORY_SEPARATOR;     define(&quot;PARSER_TPL_PATH&quot;,$_);   }   if (!defined(&quot;PARSER_STARTTIME&quot;)) define(&quot;PARSER_STARTTIME&quot;,microtime(true));   if (!defined(&quot;PARSER_STARTMEM&quot;))  define(&quot;PARSER_STARTMEM&quot;,memory_get_usage());    \/**    * Class quadBracesParser     * @property      string $template    * @property-read string $templateName    * @property      string $templatePack    * @property      array  $data    * @property      array  $settings    *\/   class quadBracesParser {     protected static $_maxLevel = 32;     protected static $_tags     = null;      protected $_debugTrace   = array();     protected $_template     = '';     protected $_templateName = '';     protected $_templatePack = '';     protected $_data         = array();     protected $_settings     = array();     protected $_arguments    = array();      function __construct() {       self::initTags();       $this-&gt;_debugTrace['starttime'] = microtime(true);     }      function __get($n) {       if (method_exists($this,&quot;get_$n&quot;))       { $f = &quot;get_$n&quot;; return $this-&gt;$f();       } elseif (property_exists($this,&quot;_$n&quot;))  { $f = &quot;_$n&quot;; return $this-&gt;$f;       } elseif (method_exists($this,&quot;set_$n&quot;)) { $e = 'is write only';       } else { $e = property_exists($this,$n) ? 'is protected' : 'does not exists'; }       throw new Exception(&quot;property $n $e&quot;);     }      function __set($n,$v) {       if (method_exists($this,&quot;set_$n&quot;))       { $f = &quot;set_$n&quot;; return $this-&gt;$f($v);       } elseif (method_exists($this,&quot;get_$n&quot;)) { $e = 'is read only';       } else { $e = property_exists($this,$n) ? 'is protected' : 'does not exists'; }       throw new Exception(&quot;property $n $e&quot;);     }      function __toString() { return $this-&gt;parse(); }      protected function set_template($name) {       $content = '[*content*]';       if (!empty($name)) {         $this-&gt;_templateName = '';         if ($fn = $this-&gt;search('template',$name)) {           $content = @file_get_contents($fn);           $this-&gt;_templateName = $name;         }       }       $this-&gt;_template = $content;       return $this-&gt;_template;     }      protected function set_data($d) {       $this-&gt;_data = self::megreData($this-&gt;_data,$d);       return $this-&gt;_data;     }      protected function set_settings($d) {       $this-&gt;_settings = self::megreData($this-&gt;_settings,$d);       return $this-&gt;_settings;     }      protected function set_templatePack($v) {       if (is_dir(PARSER_TPL_PATH.$v)) $this-&gt;_templatePack = $v;       return $this-&gt;_templatePack;     }      \/* CLASS:METHOD       @description : \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043d\u0438\u043f\u043f\u0435\u0442 \u0438\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f        @param : $name | string | value |        | \u0418\u043c\u044f \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u0430       @param : $A    | array  | value | @EMPTY | \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b       @param : $I    | string | value | @EMPTY | \u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435        @param : int\/string     *\/     public function execute($name,$A=array(),$I='') {       $result = '';       \/** @noinspection PhpUnusedLocalVariableInspection *\/       $input  = strval($I);       \/** @noinspection PhpUnusedLocalVariableInspection *\/       $arguments = $A;       if ($fn = $this-&gt;search('snippets',$name)) $result = include($fn);       return strval($result);     }      public function parse_chunk($m)       { return $this-&gt;parse_element($m,'chunk'); }     public function parse_constant($m)    { return $this-&gt;parse_element($m,'constant'); }     public function parse_path($m)        { return $this-&gt;parse_element($m,'path'); }     public function parse_deploy($m)      { return $this-&gt;parse_element($m,'deploy'); }     public function parse_setting($m)     { return $this-&gt;parse_element($m,'setting'); }     public function parse_placeholder($m) { return $this-&gt;parse_element($m,'placeholder'); }     public function parse_debug($m)       { return $this-&gt;parse_element($m,'debug'); }     public function parse_snippet($m)     { return $this-&gt;parse_element($m,'snippet'); }     public function parse_local($m)       { return $this-&gt;parse_element($m,'local'); }      \/* CLASS:METHOD       @description : \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430        @param : $m     | array  | value |        | \u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435       @param : $etype | string | value | @EMPTY | \u0422\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430        @param : string     *\/     private function parse_element($m,$etype='') {       $arguments = array();       if (isset($m[8]) && !empty($m[8]))         if ($_ = preg_match_all('|\\&([\\w\\-\\.]+)\\=`([^`]*)`|si',$m[8],$ms,PREG_SET_ORDER))           foreach ($ms as $pr) $arguments[$pr[1]] = $pr[2];        $k = $m[1]; $v = '';        if (empty($etype)) return '';       switch($etype) {         case 'chunk':           if ($fn = $this-&gt;search('chunk',$k)) {             $v  = @file_get_contents($fn);           } else { return &quot;&lt;!-- EMPTY chunk\/$k --&gt;&quot;; }           break;         case 'constant':           if (empty($k) || !defined($k)) return &quot;&lt;!-- EMPTY $etype\/$k --&gt;&quot;;           $v = strval(constant($k));           break;         case 'setting': case 'local': case 'placeholder':         $PA = array('setting' =&gt; '_settings','local' =&gt; '_arguments','placeholder' =&gt; '_data');         $PN = strval($PA[$etype]);         $AR = $this-&gt;$PN; \/\/ \u0424\u0438\u043a\u0441         if (!isset($AR[$k])) return &quot;&lt;!-- EMPTY $etype\/$k --&gt;&quot;;         $v = strval($AR[$k]);         break;         case 'debug':           $dd = explode('.',$k);           $dk = $dd[0];            $asz = array('kb' =&gt; 1000,'mb' =&gt; 1000000,'gb' =&gt; 1000000000);           $atm = array('ms' =&gt; 1000,'us' =&gt; 1000000,'ns' =&gt; 1000000000);            switch ($dk) {             case 'memory':             case 'mem':               $v = memory_get_usage();               if (count($dd) &gt; 1) if (array_key_exists($dd[1],$asz)) $v \/= $asz[$dd[1]];               $v = strval(round($v,2));               break;             case 'time':               $v = self::microTime();               if (count($dd) &gt; 1) if (array_key_exists($dd[1],$atm)) $v *= $atm[$dd[1]];               $v = strval(round($v,2));               break;             case 'totalmem':               $v = '&lt;!-- PARSER:TOTALMEM';               if (count($dd) &gt; 1) if (array_key_exists($dd[1],$asz)) $v.= ' '.$dd[1];               $v.= &quot; --&gt;&quot;;               break;             case 'totaltime':               $v = '&lt;!-- PARSER:TOTALTIME';               if (count($dd) &gt; 1) if (array_key_exists($dd[1],$atm)) $v.= ' '.$dd[1];               $v.= &quot; --&gt;&quot;;               break;             default: $v = '';           }            if (empty($v)) {             if (!isset($this-&gt;_debugTrace[$k])) return &quot;&lt;!-- EMPTY debugtrace\/$k --&gt;&quot;;             $v  = $this-&gt;_debugTrace[$k];           }           break;         case 'snippet':           if ($_ = $this-&gt;execute($k,$arguments)) {             $v  = strval($_);           } else { if ($_ === false) return &quot;&lt;!-- EMPTY snippet\/$k --&gt;&quot;; }           break;       }        if (isset($m[2])) $v = $this-&gt;extensions($v,$m[2]);       $this-&gt;_arguments = $arguments;       if (!in_array($etype,array('snippet')) && is_array($arguments))         if (count($arguments) &gt; 0)           foreach ($arguments as $phk =&gt; $phv) $v = str_replace(&quot;[+$phk+]&quot;,$phv,$v);       return ($v != '') ? $this-&gt;parse($v,$etype,$k) : '';     }      \/* CLASS:METHOD       @description : \u041f\u0430\u0440\u0441\u0438\u043d\u0433        @param : $d   | string | value | @EMPTY | \u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435       @param : $elt | string | value | @EMPTY | \u0422\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430       @param : $key | string | value | @EMPTY | \u041a\u043b\u044e\u0447 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430        @param : string     *\/     public function parse($d='',$elt='',$key='') {       static $_level  = -1;       static $_levels = null;        $P = is_null($_levels) ? 2 : 1;       $O = is_null($_levels) ? $this-&gt;_template : strval($d);       if (is_null($_levels)) $_levels = array();       if (empty($O)) return $O;        for ($c = 0; $c &lt; $P; $c++) {         $_level++;         if ($_level &lt;= self::$_maxLevel) {           $_levels[$_level] = array('element' =&gt; $elt,'key' =&gt; $key);           $this-&gt;_debugTrace['levels'] = $_levels;           foreach (self::$_tags as $k =&gt; $t) {             if (method_exists($this,&quot;parse_$k&quot;)) {               if (preg_match($t,$O))                 $O = preg_replace_callback($t,array($this,&quot;parse_$k&quot;),$O);             } else { throw new Exception(&quot;parser not implemented: $k&quot;); }           }         } else { $O = self::sanitize($O); }         $_level--;       }        if ($_level == -1) {         $st = self::microTime();         $tm = self::memoryUsage();         $ph = array(           'TOTALTIME'    =&gt; round($st,2),           'TOTALTIME ms' =&gt; round($st*1000,2),           'TOTALTIME us' =&gt; round($st*1000000,2),           'TOTALTIME ns' =&gt; round($st*1000000000,2),           'TOTALMEM'     =&gt; round($tm,2),           'TOTALMEM kb'  =&gt; round($tm\/1000,2),           'TOTALMEM mb'  =&gt; round($tm\/1000000,2),           'TOTALMEM gb'  =&gt; round($tm\/1000000000,2)         );          foreach ($ph as $phk =&gt; $phv) $O = str_replace(&quot;&lt;!-- DEBUG:$phk --&gt;&quot;,$phv,$O);          $O = self::sanitize($O);         $_levels = null;       }        return $O;     }      \/* CLASS:METHOD       @description : \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439        @param : $value | string | value |        | \u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435       @param : $ext   | string | value | @EMPTY | \u0422\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430        @param : string     *\/     public function extensions($value,$ext='') {       $RET  = $value;       $TRET = trim($RET);       if (empty($ext)) return $value;       if ($_ = preg_match_all('|\\:([\\w\\-\\.]+)((\\=`([^`]*)`)?)|si',$ext,$ms,PREG_SET_ORDER)) {         for($c = 0; $c &lt; count($ms); $c++) {           $a = $ms[$c][1];           $v = isset($ms[$c][4]) ? $ms[$c][4] : '';           if (in_array($a,array('is','eq','isnot','neq','lt','lte','gt','gte'))) {             $cond = false;             switch ($a) {               case 'is':               case 'eq':  $cond = ($value == $v); break;               case 'isnot':               case 'neq': $cond = ($value != $v); break;               case 'lt':  $cond = ($value &lt;  $v); break;               case 'lte': $cond = ($value &lt;= $v); break;               case 'gt':  $cond = ($value &gt;  $v); break;               case 'gte': $cond = ($value &gt;= $v); break;             }             $cthen = $RET;             if ($ms[$c+1][1] == 'then') { $c++; $cthen = $ms[$c][2]; }             $celse = $RET;             if ($ms[$c+1][1] == 'else') { $c++; $celse = $ms[$c][2]; }             $RET = $cond ? $cthen : $celse;           } else {             $EMP  = (empty($TRET) && ($TRET !== '0'));             switch ($a) {               case 'empty'   : $RET = $EMP ? $v : $TRET; break;               case 'notempty': $RET = $EMP ? '' : str_replace('[+value+]',&quot;$TRET&quot;,$v); break;               default: if ($_ = $this-&gt;execute($a,$v,$RET)) $RET = $_;             }           }         }       }       return $RET;     }      \/* CLASS:METHOD       @description : \u041f\u043e\u0438\u0441\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430        @param : $type | string | value | | \u0422\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430       @param : $name | string | value | | \u0418\u043c\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430        @param : string     *\/     public function search($type,$name) {       $sdir = 'chunks';       $ext  = 'html';       $DS   = DIRECTORY_SEPARATOR;        switch ($type) {         case 'template': $sdir = 'pages'; break;         case 'chunk'   : break;         case 'snippet' : $sdir = 'snippets'; $ext = 'php'; break;         default: throw new Exception('No parser type'); break;       }        $dname = explode('.',$name);       $ename = $dname[count($dname)-1];       unset($dname[count($dname)-1]);       $dname = count($dname) &gt; 0 ? implode($DS,$dname).$DS : '';       $found = '';        $_ = array();       if (!empty($this-&gt;_templatePack)) $_[] = $this-&gt;_templatePack;       $_[] = $sdir;       $path = PARSER_TPL_PATH.implode($DS,$_).$DS.$dname;        $fname = $path.&quot;$ename.$ext&quot;;       if (is_file($fname)) $found = $fname;        return $found;     }      \/* \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0435\u0433\u043e\u0432 *\/     public static function initTags() {       if (is_null(self::$_tags)) {         $map = array(           'chunk'       =&gt; array('\\{\\{','\\}\\}'),           'constant'    =&gt; array('\\{\\*','\\*\\}'),           'setting'     =&gt; array('\\[\\(','\\)\\]'),           'placeholder' =&gt; array('\\[\\*','\\*\\]'),           'debug'       =&gt; array('\\[\\^','\\^\\]'),           'snippet'     =&gt; array('\\[\\!','\\!\\]'),           'local'       =&gt; array('\\[\\+','\\+\\]'),         );         self::$_tags = array();         foreach ($map as $k =&gt; $d) {           self::$_tags[$k] = &quot;#&quot;.$d[0]             . '([\\w\\.\\-]+)'                         \/\/ Alias             . '((:?\\:([\\w\\-\\.]+)((=`([^`]*)`))?)*)' \/\/ Extensions             . '((:?\\s*\\&([\\w\\-\\.]+)=`([^`]*)`)*)'   \/\/ Parameters             . $d[1].'#si';         }       }     }      \/* \u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u043e\u0442 \u0442\u0435\u0433\u043e\u0432 *\/     public static function sanitize($data='') {       self::initTags();       if (empty($data)) return '';       $O = $data;       foreach (self::$_tags as $t) if (preg_match($t,$O)) $O = preg_replace($t,'',$O);       return $O;     }      public static function microTime() { return microtime(true) - PARSER_STARTTIME; }     public static function memoryUsage() { return memory_get_usage() - PARSER_STARTMEM; }      public static function megreData($input,$value) {       if (!is_array($value) || !is_array($input)) return $input;       if (empty($input)) return $value;       $ret = $input;       foreach ($value as $k =&gt; $v) $ret[$k] = $v;       return $ret;     }   } ?&gt;<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u0430:<\/p>\n<pre><code class=\"php\">&lt;?php   require 'parser.class.php';      $parser = new quadBracesParser();   $parser-&gt;templatePack = 'default'; \/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d-\u043f\u0430\u043a   $parser-&gt;template = 'index'; \/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0430\u043c \u0448\u0430\u0431\u043b\u043e\u043d   $parser-&gt;data = array(     'foo' =&gt; 'bar',     'pagetitle' =&gt; '\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430',     'content' =&gt; 'Hello world!'   );   $parser-&gt;settings = array(     'my_setting' =&gt; '\u041c\u043e\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0430\u0434\u043d\u0430\u043a\u0430'   );   echo $parser; ?&gt;<\/code><\/pre>\n<h3>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0440\u0430\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/h3>\n<p>  <strong>is, eq, isnot, neq, lt, lte, gt, gte, then, else<\/strong> \u2014 \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f<br \/>  <strong>empty<\/strong> \u2014 \u0435\u0441\u043b\u0438 \u043f\u0443\u0441\u0442\u043e<br \/>  <strong>notempty<\/strong> \u2014 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e<\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439<\/h3>\n<p>  {{path.to.my-chunk}} \u2014 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0447\u0430\u043d\u043a\u0430, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 \/path\/to\/my-chunk.html \u0432 \u043f\u0430\u043f\u043a\u0435 \u043f\u0430\u0440\u0441\u0435\u0440\u0430. \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432, \u043d\u0435 \u0441\u0432\u0430\u043b\u0438\u0432\u0430\u044f \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u0443 \u043a\u0443\u0447\u0443.<\/p>\n<p>  {{my-chunk &#038;foo=`bar`}} \u2014 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0447\u0430\u043d\u043a\u0430 my-chunk, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440 [+foo+] \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u00abbar\u00bb. \u042d\u0442\u0430 \u0444\u0438\u0447\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u0445 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u0432-\u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432. \u041d\u0430\u0434\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0432 \u043b\u0435\u043d\u0434\u0438\u043d\u0433\u0435 \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432? \u041d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0449\u0435! \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0447\u0430\u043d\u043a \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0442\u0443\u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0435\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c, \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u2014 PROFIT!<\/p>\n<p>  [*cool-data &#038;foo=`bar`*] \u2014 \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 \u0432\u044b\u0448\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u043c cool-data.<\/p>\n<p>  [*cool-data:empty=`bar`*] \u2014 \u0435\u0441\u043b\u0438 \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440 cool-data \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u043c, \u0432\u044b\u0432\u0435\u0434\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u00abbar\u00bb<\/p>\n<p>  {*MY_CONSTANT*} \u2014 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b MY_CONSTANT, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043b\u044e\u0431\u044b\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438. \u0410\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0435\u0435 \u0441 \u00ab\u0432\u043e\u043b\u0448\u0435\u0431\u043d\u044b\u043c\u0438\u00bb \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438. \u0418\u043d\u043e\u0433\u0434\u0430 \u0441\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0432\u0435\u0449\u0438.<\/p>\n<p>  [!my.cool.snippet:empty=`\u043f\u0443\u0441\u0442\u043e\u043d\u0430\u0444\u0438\u043a` &#038;argument=`foobar`!] \u2014 \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0441\u043d\u0438\u043f\u043f\u0435\u0442 my\/cool\/snippet.php \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c argument \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u00abfoobar\u00bb. \u0415\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043d\u0438\u043f\u043f\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u043c, \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u00ab\u043f\u0443\u0441\u0442\u043e\u043d\u0430\u0444\u0438\u043a\u00bb.<\/p>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430. \u041f\u043e \u0441\u0435\u043c\u0443 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435. \u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0437\u0430\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0438\u0448\u0438\u0442\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u044b\u0435 \u0431\u0443\u0434\u0443\u0442. \u042f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u2014 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.        \t<\/p>\n<div class=\"polling\">\n<form action=\"\/json\/polling\/\" class=\"poll\" method=\"post\">\n<div class=\"poll_title\">\u0410 \u0412\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0435\u043d\u0434\u0438\u043d\u0433\u0438 \u043d\u0430 MODx<\/div>\n<p>  \t\t<input type=\"hidden\" name=\"post_id\" value=\"266865\"\/> \t\t<input type=\"hidden\" name=\"polling_question_id\" value=\"13991\"\/>  \t\t<\/p>\n<table class=\"answer\">\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv68721\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"68721\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv68721\">\u042f \u0432\u0441\u0451 \u0434\u0435\u043b\u0430\u044e \u043d\u0430 MODx<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv68723\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"68723\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv68723\">\u0418\u043d\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u0430\u044e<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv68725\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"68725\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv68725\">\u0422\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043e\u0447\u0435\u043d\u044c \u0436\u0443\u0442\u043a\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv68727\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"68727\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv68727\">\u0414\u0430 \u043d\u0430\u0444\u0438\u0433 \u043d\u0430\u0434\u043e!<\/label> \t\t\t\t<\/td>\n<\/tr>\n<\/table>\n<p class=\"total\">\u041d\u0438\u043a\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b. \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.<\/p>\n<\/p><\/form>\n<p class=\"for_users_only_msg\">\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a href=\"https:\/\/habrahabr.ru\/auth\/login\/\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<\/p><\/div>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/266865\/\"> http:\/\/habrahabr.ru\/post\/266865\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u0414\u043e\u0431\u0440\u043e\u0433\u043e \u0437\u0434\u0440\u0430\u0432\u0438\u044f \u0445\u0430\u0431\u0440\u0430\u0436\u0438\u0442\u0435\u043b\u044f\u043c!<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u043b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 MODx Evolution, \u043c\u0435\u043d\u044f \u0435\u0434\u0432\u0430 \u043b\u0438 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b \u0443\u0434\u0430\u0440. \u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c, \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c \u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c, \u043a\u0430\u043a, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0441\u043a\u0430\u0437\u0430\u043b \u0431\u044b \u0418\u043b\u044c\u0438\u0447. \u041f\u043e \u0441\u0435\u043c\u0443 \u043c\u0435\u043d\u044f \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0435\u0434\u0432\u0430 \u043b\u0438 \u043d\u0430 \u043f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u044f \u0437\u0430\u0431\u0440\u043e\u0441\u0438\u043b \u044d\u0442\u043e \u0434\u0435\u043b\u043e, \u0438\u0431\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e. \u041d\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043f\u043e\u0439\u0434\u0451\u0442 \u043d\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c.<\/p>\n<p>  \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 MODx \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043b\u0443\u0447\u0448\u0438\u0445. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432 MODx Revolution. \u0412\u0441\u0451 \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e, \u0433\u0438\u0431\u043a\u043e \u0438 \u043f\u0440\u044f\u043c-\u0442\u0430\u043a\u0438 \u043f\u0430\u0441\u0442\u043e\u0440\u0430\u043b\u044c\u043d\u043e. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 MODx \u2014 \u044d\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0447\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u0442 \u0432\u043e\u0441\u0445\u0438\u0449\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043b\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0441\u0442\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0443 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u0418 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u043a\u043e\u043b\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c \u0433\u0432\u043e\u0437\u0434\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u043b\u0435\u043d\u0434\u0438\u043d\u0433\u043e\u0432 MODx, \u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u0418 \u0434\u0430\u0436\u0435 \u0434\u0430\u043b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u2014 QuadBraces.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-265615","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/265615","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=265615"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/265615\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=265615"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=265615"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=265615"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}