[MIGX] Исправляем "сжатые" таблицы

Всем привет, есть такая давняя проблема, когда редактируешь ТВ поля MIGX в ресурсах, они изначально «сжаты» влево… Я решил эту проблему, для этого нужен небольшой плагин.




Создаём плагин на событие OnManagerPageBeforeRender, называем например fitMIGXtables

Код:
<?php
/**
 * Automatically fits MIGX grid columns on resource create/update pages
 * 
 * @event OnManagerPageBeforeRender
 */
if ($modx->event->name !== 'OnManagerPageBeforeRender') {
    return;
}

if (!$modx->controller instanceof modManagerController) {
    return;
}

$action = $modx->controller->config['controller'] ?? '';
$isResourcePage = ($action === 'resource/update' || $action === 'resource/create');

if (!$isResourcePage) {
    return;
}

$shouldAddScript = false;
$resource = $modx->controller->resource ?? null;

if ($resource instanceof modResource && $resource->get('template')) {
    $tvCount = $modx->getCount('modTemplateVarTemplate', [
        'templateid' => $resource->get('template')
    ]);
    $shouldAddScript = ($tvCount > 0);
} elseif (is_null($resource)) {
    $shouldAddScript = true;
}

if (!$shouldAddScript) {
    return;
}

$modx->controller->addHtml(<<<HTML
<script>
    Ext.onReady(function() {
        function isMIGXGrid(component) {
            return component.xtype && component.xtype.startsWith('modx-grid-multitvgrid-');
        }

        function fitMIGXGridColumns(grid) {
            const view = grid.getView();
            if (view) {
                view.fitColumns();
            }
        }

        function fitAllMIGXGrids() {
            Ext.ComponentMgr.all.each(function(component) {
                if (isMIGXGrid(component)) {
                    fitMIGXGridColumns(component);
                }
            });
        }

        // Run initially and then periodically
        fitAllMIGXGrids();
        setInterval(fitAllMIGXGrids, 500);
    });
</script>
HTML
);
P.S. Плагин добавляет JS только на страницах редактирования ресурсов, где есть хотя бы 1 ТВ поле.
P.P.S. Плагин будет встроен в мой компонент EclipseUI.
Денис Усманов
05 августа 2025, 14:27
modx.pro
4
783
+12

Комментарии: 10

Наумов Алексей
05 августа 2025, 14:31
0
О, хорошая тема! С меня плюс.

Правда не понял почему?
else {
    $addScript = true;
}
    Денис Усманов
    05 августа 2025, 14:38
    0
    Проверка, есть ли ТВ поля, выше по коду, если нет, останется false, иначе else… true
Raimei
06 августа 2025, 12:34
0
Была задачка на сайте клиента решить этот вопрос, но его отложили на потом и как-то забылось.

Вспомнил, прямо сейчас поставил и красота. Спасибо!
    Антон Тарасов
    06 августа 2025, 14:25
    0
    Весьма полезный плагин, благодарю
      Sergey (Sentinel)
      12 августа 2025, 18:50
      0
      Нужен пулРеквест 😉😉
        Артур Шевченко
        16 августа 2025, 10:30
        0
        Плагин исправляет сжатые таблицы MIGX, но подключается при наличии любого TV у ресурса, может быть стоит добавить проверку на тип TV?
          Arahort
          28 августа 2025, 22:42
          0
          Полезно, жду в Eclipse)
            Mike
            30 августа 2025, 17:44
            0
            Отлично! Спасибо!
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              10