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

SYAN
09 февраля 2026, 15:03
0
решение в итоге нашлось?
SYAN
09 февраля 2026, 14:09
0
у меня заработала только эта конструкция. пробелы вокруг условия и двойные кавычки
&sort =`[{ "sortby":"MIGX_id", "sortdir":"DESC" }]`
SYAN
09 февраля 2026, 13:37
0
Переносим все видео ранее созданные на сайте с tv-полями video =1 и video2 = 26 в новое tv-поле videogallery = 38
-- Шаг 1: увеличиваем лимит для текущей сессии
SET SESSION group_concat_max_len = 1000000;
-- Шаг 2: выполняем основной запрос
INSERT INTO modx_site_tmplvar_contentvalues (tmplvarid, contentid, value)
SELECT
    38 AS tmplvarid,
    src.contentid,
    CONCAT(
        '[',
        GROUP_CONCAT(
            CONCAT(
                '{',
                '"MIGX_id":"', src.migx_num, '",',
                '"video":"',
                REPLACE(
                    REPLACE(
                        REPLACE(src.value, '\\', '\\\\'),
                        '"', '\\"'
                    ),
                    '\n', '\\n'
                ),
                '"}'
            )
            ORDER BY src.migx_num
            SEPARATOR ','
        ),
        ']'
    ) AS value
FROM (
    SELECT t1.contentid, t1.value, 1 AS migx_num
    FROM modx_site_tmplvar_contentvalues t1
    WHERE tmplvarid = 1

    UNION ALL

    SELECT t26.contentid, t26.value, 2 AS migx_num
    FROM modx_site_tmplvar_contentvalues t26
    WHERE tmplvarid = 26
) AS src
GROUP BY src.contentid
ON DUPLICATE KEY UPDATE
    value = VALUES(value);
Николай Савин
09 февраля 2026, 11:52
0
Поле остаток не было добавлено в базу данных и модель (был только внешний интерфейс)
В последнем обновлении 1.4.0. добавил это поле. Должно работать. На крайний случай можно добавить поле руками в таблицу ms3_products
Дмитрий
09 февраля 2026, 11:05
0
Да, у меня тоже такая проблема
SYAN
09 февраля 2026, 10:47
0
Для вывода данной 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
09 февраля 2026, 01:44
0
решал эту проблему следующим образом
  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К ресурсов в несколько кликов
Николай Савин
08 февраля 2026, 21:20
+1
Переключил минммальную версию в modStore. Программно заменю при следующем обновлении
Артур Шевченко
07 февраля 2026, 22:26
0
процессор, который сохраняет данные, но я бы подождал обновления.
Ivan K.
07 февраля 2026, 22:08
0
Николай сделай пожалуйста, невозможность установки компонентов если версия меньше 8.2.
А то если на сайте 8.1, потребуется восстановление из резервной копии) после попытки установить компонент.
Наумов Алексей
07 февраля 2026, 21:29
0
конечно нет, просто в описании компонента нужно актуализировать версию пэхэпэ
Николай Савин
07 февраля 2026, 19:12
0
Это при актуальном 8.5 то. Может не стоит пытаться оживить давно умирающего дедушку?
Наумов Алексей
07 февраля 2026, 16:02
0
Да, есть такое) при попытке установить на 8,1 сломается все с концами
Сергей Карпович
07 февраля 2026, 10:46
1
0
При встаке ссылок на 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,
            ];
        }
Олег
06 февраля 2026, 16:53
0
Важно именно «МойСклад»
Вячеслав
06 февраля 2026, 12:40
0
Спасибо за компонент, но что-то с ходу не могу предположить в каких ситуациях он понадобиться. Можно несколько примеров накидать?
Ivan K.
06 февраля 2026, 12:29
0
Более того, если используется на сайте 8.1 — то установку «клинит», сайт перестает работать вообще, выводится ошибка типа минимальная версия 8.2. И с другими компонентами тоже самое (mFilter и mSearch)
Наумов Алексей
06 февраля 2026, 10:15
0
Привет! Хоть у ms3 указана совместимость с php >= 8.1, однако тянутся библиотеки symfony/*, которые просят php >= 8.2.
Сергей Карпович
06 февраля 2026, 00:13
0
С MoySklad не знаю, а с 1С — работает точно