Дмитрий

Дмитрий

Был в сети 30 июля 2026, 20:06
Заказы принимаю
@Ivan K. Привет, подскажи, пожалуйста, нет ли у тебя в планах разместить доку для Thumb3x и Thumb2x на docs.modx.pro? Ну или как-то вообще решить этот вопрос с документацией в экосистеме русскоязычного modx. Для таких системообразующих компонентов это мастхэв, мне кажется. Благодарю за ответ!
Возвращался к этому вопросу, чтобы не грузить ничего заранее, делаем просто встраивание iframe после нажатия на div и вместо него встраиваем iframe. Не буду приводить никакие стили, просто суть:

<div class="rutube" id="f1513a11d3821109ac8283a7423f8f05" data-params="autoplay=true" style="width: 100%;height: 290px;background: url(путь до собственной заглушки) no-repeat;"></div>

и на jquery так:

$(".rutube").each(function() {        
        $(this).append($('<div/>', {'class': 'play'}));
        $(document).delegate('#'+this.id, 'click', function() {
            var iframe_url = "https://rutube.ru/play/embed/" + this.id + "/?r=wd";
            if ($(this).data('params')) iframe_url+='&'+$(this).data('params');
            var iframe = "<iframe  width=" + $(this).width() +" height="+ $(this).height() + " src=" + iframe_url + " style='border: none;' allow='clipboard-write; autoplay' webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>";
            $(this).replaceWith(iframe);
        });
    });
создаёте файл, создаете статический чанк и указываете путь до файла в нём. Но сам чанк в админке создать всё равно придётся, это да. Как и сами блоки. C migx тоже всё через админку: собрать конфу, создать TV поле. Никак не обойтись без админки так или иначе.

Ну а в целом на вкус и цвет, наверно чтобы понять, «в чем его преимущество» — нужно поставить и попользоваться, чтобы сделать для себя какие-то выводы.
Отличный компонент, иногда кажется громоздким, но его возможности и гибкость при правильном подходе позволяют получать очень хорошие результаты. Нужно немного разобраться, а дальше любая сложность и структура страницы набирается довольно просто и быстро. Очень широкий функционал и набор типов полей, таблицы. Для сложных сайтов необходимая вещь.
Интересно сколько весит фрейм с видео? Метра 3? Допустим у вас 10 видео,
Само видео не грузится, пока вы не нажмете кнопку Play. Если вы для всех видео включите autoplay, тогда да… А вставлять фрейм при нажатии — ну такое… Зачем? Сам по себе фрейм загружается быстро.

А может быть вам сделать так, чтобы была картинка с rutube и кнопка.
По умолчанию и так видео вставляется со своей заглушкой. В моем решении вы имеете возможность вставить своё изображение в качестве заглушки поверх.

а не всем видео одинаковую делать)
так и не делайте одинаковую, меняйте изображение хоть для каждого видео на странице, а хотите — уберите вообще — и вы получите стандартную заглушку с rutube.

И по поводу sticky. В CSS вы код показываете, а в JS нет.
так у нас целиком блок прилипает, отрываясь от основного контента, ничего не меняется, поэтому js будет работать и там и там.

А еще интересно будет ли это работать в IOS в safari.
Тут могут быть проблемы. Лично я тестировал на iPhone 13 — всё работало. Версию ios не помню, но не последняя. При этом на другом iphone (11 или 12) с версией ios ниже — уже не работало.

Здесь уже частные случаи, нужно смотреть индивидуально по задаче, можно для ios вставлять просто блок с mp4 и отображать его, если у нас safari. Что-то в общем, можно придумать, при желании)
начиная со 2й версии на modx 2.8.7 компонент валит админку в 500…

2024/09/03 14:28:11 [error] 1762146#1762146: *32171 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Call to undefined method ExtraFields::getTableFields() in /var/www/site_user/data/www/site.ru/core/cache/includes/elements/modplugin/53.include.cache.php:44
Stack trace:
#0 /var/www/site_user/data/www/site.ru/core/model/modx/modscript.class.php(76): include()
#1 /var/www/site_user/data/www/site.ru/core/model/modx/modx.class.php(1674): modScript->process(NULL)
#2 /var/www/site_user/data/www/site.ru/core/model/modx/modx.class.php(570): modX->invokeEvent('OnMODXInit', Array)
#3 /var/www/site_user/data/www/site.ru/manager/index.php(53): modX->initialize('mgr')
#4 {main}
  thrown in /var/www/site_user/data/www/site.ru/core/cache/includes/elements/modplugin/53.include.cache.php on line 44" while reading response header from upstream, client: 10.10.10.10, server: site.ru, request: "GET /manager/?a=workspaces HTTP/2.0", upstream: "fastcgi://unix:/var/run/site.ru.sock:", host: "site.ru", referrer: "https://site.ru/manager/?"

53-й плагин — это плагин ExtraFields
31 июля 2024 разработчики обновили панель, после чего у меня перестал работать сайт. Пришлось поправить конфиг. Актуальный конфиг теперь такой:

server {
    listen 10.10.10.10:80;
    server_name my-site.ru www.my-site.ru;
    return 301 https://my-site.ru$request_uri;
}

server {
    listen 10.10.10.10:443 ssl http2;
    server_name my-site.ru www.my-site.ru;

    # Изменить имя сертификата, если создан другой сертификат (нужно выпустить wildcard, для корректной работы переадресации с www)
    ssl_certificate     /var/www/httpd-cert/my-site.ru_2023-06-27-00-03_12.crt;
    ssl_certificate_key /var/www/httpd-cert/my-site.ru_2023-06-27-00-03_12.key;

    charset utf-8;

    gzip on;
    gzip_min_length 1000;
    gzip_proxied any;
    gzip_types gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_comp_level 5;

    set $root_path /var/www/my_site_user/data/www/my-site.ru;
    root $root_path;
    index index.php;
    disable_symlinks if_not_owner from=$root_path;
    
    location / {
    	root $root_path;
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /index.php?q=$1 last;
        }
    }

    # Редирект с www на адрес без www
    if ($host ~* '^www\.(.*)$') {
        return 301 $scheme://$1$request_uri;
    }

    # Редирект с index.php на корень сайта:
    if ($request_uri ~* '^/index.php$') {
        return 301 /;
    }

    # Убираем повторяющиеся слеши из адреса
    # Вариант, работающий только при merge_slashes = on
    if ($request_uri ~ ^[^?]*//) {
        rewrite ^ $uri permanent;
    }
    # Универсальный вариант
    #if ($request_uri ~ ^(?P<left>[^?]*?)//+(?P<right>[^?]*)) {
    #    rewrite ^ $left/$right permanent;
    #}

    # Удаление слеша в конце URL
    # Если изменили адрес админки MODX, то нужно указать его в условии этого правила, иначе будет бесконечный редирект.
    #if ($request_uri ~ ".*/$") {
    #    rewrite ^/((?!core|connectors|manager|setup).*)/$ /$1 permanent;
    #}

    # Добавление слеша в конце URL
    #if ($request_uri !~* "(?:\?)|(?:\.\w+$)|(?:\/$)") {
    #    return 301 $request_uri/;
    #}

    # Запрет для всех для при обращении к ядру MODx из браузера
	location ~ ^/core/.* {
	  deny all;
	  return 403;
	}
    
    location ~ ^/config.core.php {
	  return 404;
	}

	location @rewrite {
	  rewrite ^/(.*)$ /index.php?q=$1;
	}

    location ~ \.php$ {
        # Базовая авторизация в служебные каталоги
        location ~* ^/(manager|connectors)/ {
            auth_basic "Restricted Access";
            auth_basic_user_file /var/www/my_site_user/data/.htpasswd;
            try_files $uri $uri/ @rewrite;
            location ~ \.php$ {
                include /etc/nginx/fastcgi_params;
                fastcgi_pass unix:/var/run/my-site.ru.sock;
                fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
                fastcgi_param DOCUMENT_ROOT $realpath_root;
            }
        }
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/my-site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|ttf|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri @rewrite;
        access_log off;
	    expires 30d;
	    break;
    }

    location @fallback {
        fastcgi_pass unix:/var/run/my-site.ru.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

	location ~ /\.ht {
	  deny all;
	}
    
    include "/etc/nginx/fastpanel2-sites/my_site_user/my-site.ru.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;

    error_log /var/www/my_site_user/data/logs/my-site.ru-frontend.error.log;
    access_log /var/www/my_site_user/data/logs/my-site.ru-frontend.access.log;
}
Спасибо, интересная заметка.

В общем я сделал так:
$_GET = array_diff_assoc($_REQUEST, $_COOKIE);
Единственное, в url в пагинации остается параметр limit=

*?page=3&limit=36

Но при переходе он очищается из url.