Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 099 комментариев

SYAN
SYAN
решал эту проблему следующим образом
  1. установил autoRedirector
  2. далее через phpMyAdmin
  3. экспортировал со старого сайта modx_site_content
  4. залил в базу к новому с именем modx_site_content_old
  5. сравнил две базы. если у одинаковых id ресурсов значения uri не совпадают, то добавил новые редиректы в базу modx_ar_rules
  6. удалил дубликаты записей в modx_ar_rules
  7. удалил modx_site_content_old
INSERT INTO `modx_ar_rules` (`res_id`, `context_key`, `uri`)
SELECT
    sc.id AS res_id,
    'web' AS context_key,
    sc2.uri AS uri
FROM
    modx_site_content sc
    LEFT JOIN modx_site_content_old sc2 ON sc.id = sc2.id
WHERE
sc.uri <> sc2.uri; -- uri не совпадают


DELETE FROM `modx_ar_rules`
WHERE id NOT IN (
    SELECT `min_id`
    FROM (
        SELECT MIN(id) AS min_id
        FROM modx_ar_rules
        GROUP BY `res_id`, `context_key`, `uri`
    ) AS keep
);
все четенько на 7К ресурсов в несколько кликов
Ivan K.
Ivan K.
Николай сделай пожалуйста, невозможность установки компонентов если версия меньше 8.2.
А то если на сайте 8.1, потребуется восстановление из резервной копии) после попытки установить компонент.
Сергей Карпович
Сергей Карпович
При встаке ссылок на Rutube ролики с доступом по ссылке, из ссылки вырезается ключ доступа после ID ролика: rutube.ru/play/embed/id_ролика/?p=ключ

Соответственно видео не работает

Решение:
в файле core/components/videogallery/lib/VideoThumb/VideoThumb.php заменить блок парсинга ссылку рутуб на этот:
// Rutube
        elseif (preg_match('~https?://(?:www\\.|)rutube\\.ru/video/embed/([a-zA-Z0-9_\\-]+)/?~i', $video, $matches) ||
                preg_match('~https?://(?:www\\.|)rutube\\.ru/video/([a-zA-Z0-9_\\-]+)/?~i', $video, $matches) ||
                preg_match('~https?://(?:www\\.|)rutube\\.ru/tracks/([a-zA-Z0-9_\\-]+)(&.+)?/?~i', $video, $matches)) {
            
            $videoId = $matches[1];
            $newVideo = 'https://rutube.ru/video/embed/' . $videoId;

            // --- НАЧАЛО ПРАВКИ: Добавляем поддержку приватного ключа ?p= ---
            $parts = parse_url($video);
            if (isset($parts['query'])) {
                parse_str($parts['query'], $queryParams);
                if (!empty($queryParams['p'])) {
                    // Добавляем ключ к embed ссылке
                    $newVideo .= '/?p=' . $queryParams['p'];
                }
            }
            // --- КОНЕЦ ПРАВКИ ---

            $video = $newVideo;
            $image = '';

            // Добавил @ перед file_get_contents, чтобы не сыпались ошибки если Rutube вернет 404 для закрытого видео
            if ($json = json_decode(@file_get_contents('https://rutube.ru/api/video/' . $videoId), true)) {
                $image = $json['thumbnail_url'];
                $image = $this->getRemoteImage($image);
            }
            $data = [
                'video' => $video,
                'videoId' => $videoId,
                'image' => $image,
            ];
        }
Ivan K.
Ivan K.
Более того, если используется на сайте 8.1 — то установку «клинит», сайт перестает работать вообще, выводится ошибка типа минимальная версия 8.2. И с другими компонентами тоже самое (mFilter и mSearch)
Дмитрий
Дмитрий