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

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

Виталий
Виталий
Баг с обновлениями подтвержден в ишьюсах модуля — 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);
Николай Савин
Николай Савин
Поле остаток не было добавлено в базу данных и модель (был только внешний интерфейс)
В последнем обновлении 1.4.0. добавил это поле. Должно работать. На крайний случай можно добавить поле руками в таблицу ms3_products
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К ресурсов в несколько кликов