Всего 125 003 комментария

Дмитрий Середюк
04 июня 2025, 03:57
+1
А примерно понял что имели ввиду, можно сделать как то так

<!-- above-the-fold:start -->
    <header class="site-header">
        <div class="logo-wrapper">
            <img src="logo.svg" alt="Логотип" class="logo">
        </div>
        <nav class="main-nav">
            <a href="#" class="nav-link active">Главная</a>
            <a href="#" class="nav-link">Контакты</a>
        </nav>
    </header>

    <section class="hero-slider js-slider">
        <div class="slide">Слайд 1</div>
        <div class="slide">Слайд 2</div>
    </section>
<!-- above-the-fold:end -->

Обрамляем нужные элементы маркерами

Далее парсим всем классы, индификаторы, теги. Ищем их в файле стилей и формируем.
Но есть конечно же нюансы если к примеру используется какие либо js библиотеки по типу того же swiper slider которые после рендора внедряют свои классы элементам то это не сработает, в общем нужно обмозговать это дело, возможно что то и выкачу позже.
Дмитрий Середюк
04 июня 2025, 03:30
0
Не совсем понимаю что имеете ввиду, но у себя я делаю так
Использую migx в админке выглядит вот так
и на каждую секцию генерирую свой css
Далее в head прохожусь только по текущим секциям страницы собираю объект path, который в свою очередь передаю в MinifyX

{set $rows = json_decode($_modx->resource.id | resource : 'multiMigx', true)}
{if $rows}
    {set $arrDouble=[]}
    {set $path=[]}
    {foreach $rows as $row}
      {if $row.MIGX_formname | in : $arrDouble}{continue}{/if}
      {set $arrDouble[] = $row.MIGX_formname}
      {if $row.MIGX_formname != 'default' && $row.MIGX_formname != 'code'}
        {set $path[] = ('project_path' | config)~'css/modules/'~$row.MIGX_formname~'.min.css'}
      {/if}
    {/foreach}
{/if}

{'!MinifyX' | snippet : [
    'minifyCss' => 1,
    'cssSources' => ($path | join : ','),
]}

Для страниц где не используется migx просто добавляю по условию на нужные страницы

{if $_modx->resource.id === 245}
    {set $path=[
      ('project_path' | config)~'css/modules/cart.min.css',
      ('project_path' | config)~'css/modules/order.min.css',
    ]}
{/if}

В общем суть я думаю ясна
Дмитрий Середюк
04 июня 2025, 03:19
0
На счет js файлов думаю что можно по такому же принципу сделать, но целесообразность этого не подскажу, у себя на проекте использую ES6 Modules загружаю только нужные скрипты в зависимости от секций + всякие фишки с использованием IntersectionObserver

По скорости прироста в процентах не подскажу, была задача повысить показатель всеми любимого google page speed и результат до использования инлайн стилей прыгал от 93-95 балов, при подключение основных файлов удалось добиться долгожданной сотки
Ivan
04 июня 2025, 00:48
0
Наверно было бы круто если бы можно было первый экран страницы обрамить маркером, например

И сделать проверку всех тегов и классов которые есть в этой области в html коде и чтобы плагин подключил в head из основного файла стилей, в все стили для всех тегов и классов которые ему встретились. А все остальные подключения стилей можно было бы разместить перед . Тогда бы у пользователя который заходит первый раз первый экран загрузился бы максимально быстро, а остальные стили уже чут позже.
Ivan
04 июня 2025, 00:38
0
Подскажите, на практике у реального пользователя на сколько уменьшилось время загрузки? Можно в процентах. Спасибо

P.S. А если JS файлы так же сделать будет какой-то толк?
Николай Савин
03 июня 2025, 21:25
0
Эх хорошо ответил. Лев Толстой бы лучше не написал
Nikita
03 июня 2025, 16:19
0
Николай, спасибо за ответ!

Сам уже дошёл до подобной схемы и реализовал ))
vectorserver
03 июня 2025, 07:57
+1
Мне хватает указать ссылки)
<?php
/** @var modX  $modx*/
/** @var modResource  $res*/
Артур Шевченко
02 июня 2025, 08:39
0
По-моему как раз когда икоки индивидуальные самое то делать через migx, так как там можно задавать любую конфигурацию полей, в том числе сделать отдельное поле для иконки. А то что импорт из файла это вообще прекрасно, плагином собрал данные в нужный формат и записал в migx. И работало бы всё автоматически, а не как сейчас.
Олег
02 июня 2025, 00:18
0
Делать через MigX не вариант т.к. иконки идут индивидуальными для каждого товара (а товаров много и импортируются они из файла, а не вручную)
Добавлять каждому товару поле «показывать блок или нет» тоже не вариант. Надо, чтобы все автоматом работало.
Написал сниппет:
if ($ozon!='' and $wb!='' and ...){
echo '...';
}
Вопрос задавал в надежде узнать, что можно какими-то стандартными модификаторами сделать сложный запрос на несколько проверок
Артур Шевченко
01 июня 2025, 18:37
0
Давай закроем эту тему. Я добавил версионирование. Остальные вопрос по компоненту задавай через техподдержку modstore.
Александр Туниеков
01 июня 2025, 17:41
0
Печалька. Вот казалось человек а на проверку мнит себя самым умным :-(
vit
vit
01 июня 2025, 15:40
0
Можно через снимает или fenom. Сделать. Да и if else не кто не отменял, даже в стандартном шаблонизаторе
Артур Шевченко
01 июня 2025, 13:02
+1
Проблемы из-за неправильных настроек обязательно возникнут, на то они и неправильные.
Даша
01 июня 2025, 10:26
0
О, это приятная новость! А скажите, пожалуйста, не возникало проблем в ходе эксплуатации из-за неправильных настроек или вообще самого наличия других языковых версий?
Артур Шевченко
01 июня 2025, 09:16
0
А кто-то когда-то вообще делал ручной перевод?
Я сейчас работаю с сайтом где 36 контекстов и 10 языковых версий, все переводы сделаны вручную. Babel там не используется ибо незачем. Ресурсы можно связать по псевдониму или заморозив uri. Синхронизацию полей, если она нужно, можно написать самостоятельно, там ничего сложного.
Артур Шевченко
01 июня 2025, 09:10
0
Ну да, придумано. Можно было изначально сгруппировать соцсети в поле типа migx и тогда проверка значительно упростилась бы. Наконец, можно добавить ещё одно поле «Не показывать соцсети» и если оно true то скрывать блок вне зависимости от того заполнен он или нет.
Олег
01 июня 2025, 01:19
0
Это логично. Но как это реализовать? Можно нагородить сниппет, в котором посчитать пустые поля и если их количество не совпадет с известным общим количеством, тогда выводить блок.
Но наверняка уже все придумано
Роман
31 мая 2025, 16:11
0
Век живи, век учись. Спасибо большое за помощь