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

Всего 126 101 комментарий

SYAN
SYAN
Для вывода данной migx videogallery в виде табов Источник1, Источник2 и тд

Чанк videogalleryVideosTabs.tpl
[[!VideoJsonToPlaceholders? &json=`[[+video]]` &prefix=`video[[+idx]].`]]
<li class="nav-item" role="videocase">
        <button class="nav-link [[+idx:isequal=`1`:then=`active`:else=``]]" id="videogal[[+idx]]-tab" data-bs-toggle="tab" data-bs-target="#videogal[[+idx]]" type="button" role="tab" aria-controls="videogal[[+idx]]" aria-selected="true">Источник [[+idx]]</button>
</li>`

Чанк videogalleryVideos.tpl
<div class="tab-pane fade [[+idx:isequal=`1`:then=`show active`:else=``]]"  id="videogal[[+idx]]" role="tabpanel" aria-labelledby="videogal[[+idx]]-tab">
        <div class="pb-3">
            <div class="embed-responsive embed-responsive-16by9" style="width: 100%;"> 
            <iframe class="embed-responsive-item" 
            src="[[+video[[+idx]].video]]" title="[[+video[[+idx]].title]]" 
            frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" 
            webkitAllowFullScreen mozallowfullscreen allowFullScreen allowtransparency="true" name="main" 
            style="width:100%;height:100%;background-image:url([[+video[[+idx]].image]]);background-size: cover; background-repeat: no-repeat;background-position: center center;">
            </iframe> 
            </div>
        </div>
        <div class="pb-3">видео в источнике <ignore><a href="[[+video[[+idx]].video]]" target="_blank">[[+video[[+idx]].video]]</a></ignore></div>
    </div>

Вызов на странице
<ul class="nav nav-tabs" id="videoTab" role="tablist">
[[!getImageList?
    &tvname=`videogallery`
    &tpl=`videogalleryVideosTabs.tpl`
]]
</ul>

<div class="tab-content" id="videoTabContent">
{'!getImageList' | snippet : [
'tvname' => 'videogallery',
'tpl' => 'videogalleryVideos.tpl']}
</div>
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)