<![CDATA[ Как распарсить чанк? - My Forums]]> https://forums.modx.com/thread/?thread=104910 <![CDATA[Как распарсить чанк?]]> https://forums.modx.com/thread/104910/#dis-post-564101 Можно ли распарсить чанк и отправлять части кода с помощью $modx->regClient...() в соответствующие части страницы. Например, ниже код чанка:
<!-- CSS -->
<link rel="stylesheet" href="css/blueimp-gallery.min.css">
<style>
	.blueimp-gallery {
	/* кастомизируем */		
	}

</style>

<!-- JS -->
<script src="js/blueimp-gallery.min.js"></script>
<script>
blueimp.Gallery(
    document.getElementById('links').getElementsByTagName('a'),
    {
        container: '#blueimp-gallery-carousel',
        carousel: true

    }
);
</script>


<!-- HTML -->
<div id="blueimp-gallery" class="blueimp-gallery">
    <div class="slides"></div>
    <h3 class="title"></h3>
    <a class="prev">‹</a>
    <a class="next">›</a>
    <a class="close">×</a>
    <a class="play-pause"></a>
    <ol class="indicator"></ol>
</div>

В идеале, при вызове чанка, отправить код между <!-- CSS --> и <!-- JS --> в голову $modx->regClientStartupHTMLBlock()

отправить код между <!-- JS --> и <!-- HTML --> вниз страницы $modx->regClientHTMLBlock();
Но не могу понять, как распарсить чанк...
]]>
aliasnameless Feb 16, 2019, 08:19 PM https://forums.modx.com/thread/104910/#dis-post-564101
<![CDATA[Re: Как распарсить чанк?]]> https://forums.modx.com/thread/104910/#dis-post-564123 Ссылка на песочницу с регулярным выражением
<?php
switch ($modx->event->name) {
    case 'OnParseDocument':
        $re = '/\A\s*<!--.*?(CSS|JS|HTML).*?-->/i';
        if(!preg_match_all($re, $content, $matches, PREG_SET_ORDER, 0)) break;
        
        $re = '/<!--.*?(CSS|JS|HTML).*?-->(.*?)(?=<!--.*?(CSS|JS|HTML).*?--\>|\z)/mis';
        if(!preg_match_all($re, $content, $matches, PREG_SET_ORDER, 0)) break;
        
        foreach($matches as $match) {
            switch(strtoupper($match[1])) {
                case 'CSS':
                    $modx->regClientStartupHTMLBlock(trim($match[2]));
                break;
                case 'JS':
                    $modx->regClientHTMLBlock(trim($match[2]));
                break;
                case 'HTML':
                        @$output .= trim($match[2]);
                break;
            }
        }

        $modx->documentOutput = @$output;
    break;
}
]]>
aliasnameless Feb 18, 2019, 12:53 PM https://forums.modx.com/thread/104910/#dis-post-564123
<![CDATA[Re: Как распарсить чанк?]]> https://forums.modx.com/thread/104910/#dis-post-564114
А если вам захочется несколько таких чанков, подозреваю, что при увеличении их числа может возникнуть нагромождение, ведь в идеале(если мы говорим и об оптимизации), стилям хорошо бы жить в шапке в одном файле(немногих нескольких), а скриптам - в подвале в другом(немногих нескольких).
Посему я бы сделал так: сниппет, параметром в который передавать перечислением список таких вот чанков.
Каждый чанк парсится по регулярным выражениям, вырезается CSS/JS часть, а дальше уже ваша логика - либо собираете стили отдельно, скрипты отдельно и отправляете либо в подвал,либо в шапку...или же создаете какое-то количество js/css файлов(опираясь,например, на название чанка,проверяете на предварительное существование), складываете туда найденное и подключаете уже файлом/файлами.

Варианты есть, главное, как оно вам интереснее)]]>
himurovi4 Feb 18, 2019, 08:42 AM https://forums.modx.com/thread/104910/#dis-post-564114