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

Всего 126 102 комментария

Дмитрий
Дмитрий
Здравствуйте, компонент куплен, на основной домен ставится, на dev. не ставится,
Could not generate encryption key
Vehicle 04b9f528f736384b46f7132420614ef0 in transport msproductremains-2.1.28-pl failed to install and indicated the process should be aborted.
Невозможно установить пакет с подписью: msproductremains-2.1.28-pl

Но пробовал на основном домене, при установленном пакете, сделать заказ — вылетает ошибка и заказ не проходит /core/components/gallery/elements/tv/output/
в системных настройках

mspr_active_bcstatus
Нет
2026-02-17, 9:58 am

Проверка до добавления в корзину
mspr_active_before_add
Нет
2026-02-17, 9:47 am

Проверка до сохранения заказа
mspr_active_before_order
Нет
Виталий
Виталий
Баг с обновлениями подтвержден в ишьюсах модуля — github.com/modmore/importX/issues/64
Решения, кроме частичного, предложенного в ветке этого ишьюса (https://github.com/modmore/importX/issues/64#issuecomment-201342383) до сих пор нет.
Имхо, автору не стоило данный функционал вообще упоминать, как рабочий. Только потратил кучу времени на тестирование
Виталий
Виталий
Баг с обновлениями подтвержден в ишьюсах модуля — github.com/modmore/importX/issues/64
Решения, кроме частичного, предложенного в ветке этого ишьюса (https://github.com/modmore/importX/issues/64#issuecomment-201342383) до сих пор нет.
Имхо, автору не стоило данный функционал вообще упоминать, как рабочий. Только потратил кучу времени на тестирование
Виталий
Виталий
Предварительный анализ показал, что этот модуль при обновлении не работает нормально с магазином (под вопросом как с другими ресурсами).
Идет затирание целого ряда других полей у товаров, включая родительский ресурс, менеджеры и другие поля.

Очень странная картинка — по идее, при обновлении полей, должны изменяться данные только тех полей, которые были в csv. А в результате идет затирание целого ряда полей, которых даже не прописывали в csv.

Вобще, функционал данного модуля для импорта-обновления уже существующих ресурсов мягко сказать странный. Нафига, для обновления 2 полей товара/ресурса мне прописывать его алиас, родительский ресурс и другие поля, которые вообще трогать не планировал? По идее, все, что надо — это айдишник ресурса и содержимое обновляемых полей.
Сергей Фещуков
Сергей Фещуков
Сергей Карпович
Сергей Карпович
Это таблица компонента msProductRemains
он использует поле remains, но в Minishop2 4.0.0 тоже появилось это поле, и что то пошло не так. Может оно всегда было, но не участвовало в схеме, хз.

Тут скоррее вопрос к msProductRemains, нужно его научить смотреть remains из своей таблицы
Сергей Карпович
Сергей Карпович
Обнаружил прикол, как понимаю он возникает в Minishop => 4.4.0
Поле remains присутствует в стандартных полях минишопа — присутствует в таблице modx_ms2_products
И в админке на странице со всеми остатками: /manager/?a=mgr/remains&namespace=msproductremains тянется именно поле из modx_ms2_product, а не из modx_ms2_product_remains

А если перейти в карточку товара, на вкладку остатки — там все правильно, остаток подтягивается из таблицы modx_ms2_product_remains

Не понимаю, как это так получается и как это исправить?
SYAN
SYAN
А вот все то же самое, только на fenom сразу вызов на странице без дополнительных чанков
{set $rows = $.php.array_reverse(json_decode($_modx->resource.videogallery, true))}
{if $rows && is_array($rows)}
<!-- Табы (заголовки) -->
<ul class="nav nav-tabs" id="videoTab" role="tablist">
    {foreach $rows as $idx => $row}
    <li class="nav-item" role="presentation">
        <button class="nav-link {if $idx == 0}active{/if}" id="videogal-tab-{$idx}" data-bs-toggle="tab" data-bs-target="#videogal{$idx}" type="button" role="tab" aria-controls="videogal{$idx}" aria-selected="{if $idx == 0}true{else}false{/if}">
            Источник {$idx + 1}
        </button>
    </li>
    {/foreach}
</ul>
<!-- Контент табов -->
<div class="tab-content" id="videoTabContent">
    {foreach $rows as $idx => $row}
    {* Декодируем JSON из поля video *}
    {set $videoData = json_decode(trim($row.video, '"') | replace:'\"':'"', true)}
    {if $videoData}
    <div class="tab-pane fade {if $idx == 0}show active{/if}" id="videogal{$idx}" role="tabpanel" aria-labelledby="videogal-tab-{$idx}">
        <!-- Видео -->
        <div class="pb-3">
            <div class="embed-responsive embed-responsive-16by9" style="width: 100%;">
                <iframe class="embed-responsive-item" src="{$videoData.video}" title="{$videoData.title | default:'Видео'}" 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({$videoData.image | default:''}); background-size: cover; background-repeat: no-repeat; background-position: center center;"></iframe>
            </div>
        </div>
        <!-- Ссылка на источник -->
        <div class="pb-3">
            Видео в источнике: <ignore><a href="{$videoData.video}" target="_blank">{$videoData.video}</a></ignore>
        </div>
        <!-- Описание (если есть) -->
        {if isset($videoData.desc) && $videoData.desc}
        <div class="pb-3">{$videoData.desc | nl2br}</div>
        {/if}
    </div>
    {else}
    <!-- Резервный блок при ошибке декодирования -->
    <div class="tab-pane fade {if $idx == 0}show active{/if}" id="videogal{$idx}" role="tabpanel" aria-labelledby="videogal-tab-{$idx}">
        <p class="text-danger">Не удалось загрузить видео (ошибка JSON).</p>
    </div>
    {/if}
    {/foreach}
</div>
{else}
<p>Нет данных для отображения.</p>
{/if}
SYAN
SYAN
Переносим все видео ранее созданные на сайте с 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);