Вопросы
Видеогалерея на MIGX. Может кому понадобится (решено)
*Помогите толком разобраться как это все привести в божеский вид на fenom
Видеогалерея на MIGX
Видеогалерея на MIGX
- Устанавливаем VideoGallery
- Создаем tv с именем video тип ввода VideoGallery
- Создаем tv с именем videogallery. Тип ввода migx, конфигурация videogallery, выбираем шаблон для отображения
- Создаем сниппет VideoJsonToPlaceholders
<?php // Получаем параметры $json = $modx->getOption('json', $scriptProperties, ''); $prefix = $modx->getOption('prefix', $scriptProperties, 'json.'); // 1. Проверяем наличие данных if (empty($json)) { return 'Ошибка: JSON‑строка пуста'; } // 2. Декодируем HTML‑экранирование $json = htmlspecialchars_decode($json); // 3. Исправляем экранированные слеши $json = str_replace('\\/', '/', $json); // 4. Парсим JSON $data = json_decode($json, true); if (json_last_error() !== JSON_ERROR_NONE) { return 'Ошибка JSON: ' . json_last_error_msg() . ' (строка: ' . htmlspecialchars($json) . ')'; } // 5. Проверяем, что результат — массив if (!is_array($data)) { return 'Ошибка: JSON не содержит массив'; } // 6. Устанавливаем плейсхолдеры с обработкой foreach ($data as $key => $value) { // Приводим строки к UTF‑8 if (is_string($value)) { $value = mb_convert_encoding($value, 'UTF-8', 'UTF-8'); } // Преобразуем videoDuration из PT... в оптимальный формат if ($key === 'videoDuration') { if (empty($value) || !is_string($value)) { $value = '0 с'; // или '' — на ваш выбор } else { // Извлекаем часы, минуты, секунды preg_match( '/PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?/', $value, $matches ); $hours = isset($matches[1]) ? (int)$matches[1] : 0; $minutes = isset($matches[2]) ? (int)$matches[2] : 0; $seconds = isset($matches[3]) ? (int)$matches[3] : 0; // Формируем строку в зависимости от наличия компонентов if ($hours > 0) { // Есть часы: выводим HH:MM:SS $value = sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds); } elseif ($minutes > 0) { // Нет часов, но есть минуты: выводим MM:SS $value = sprintf('%02d:%02d', $minutes, $seconds); } else { // Только секунды: выводим SS с $value = $seconds . ' с'; } } } // Подставляем значения по умолчанию для критических полей switch ($key) { case 'title': if (empty($value)) { $value = 'Без названия'; } break; case 'desc': if (empty($value)) { $value = 'Описание отсутствует'; } break; } // Устанавливаем плейсхолдер $modx->setPlaceholder($prefix . $key, $value); } return ''; - Создаем новое MIGx поле videogallery
- Экспортируем туда конфиг
{ "formtabs": [ { "caption": "Видеогалерея", "print_before_tabs": "0", "fields": [ { "field": "video", "caption": "Видео", "inputTV": "video" } ], "pos": 1 } ], "contextmenus": "", "actionbuttons": "", "columnbuttons": "", "filters": "", "extended": { "actionbuttonsperrow": 4, "gridload_mode": 1, "has_jointable": "yes" }, "permissions": {}, "fieldpermissions": "", "columns": [ { "header": "Рендер", "dataIndex": "render", "width": 1, "sortable": "false", "show_in_grid": 0, "renderer": "this.renderChunk", "renderchunktpl": "[[!VideoJsonToPlaceholders? &json=`[[+video]]` &prefix=`video.`]]" }, { "header": "Название", "dataIndex": "video_title", "sortable": "false", "show_in_grid": 1, "renderer": "this.renderChunk", "renderchunktpl": "[[+video.title]]" }, { "header": "Видео", "dataIndex": "video_video", "sortable": "false", "show_in_grid": 1, "renderer": "this.renderChunk", "renderchunktpl": "<iframe src=\"[[+video.video]]\" width=\"160\" height=\"90\" frameborder=\"0\"></iframe>" }, { "header": "Превью", "dataIndex": "video_image", "sortable": "false", "show_in_grid": 1, "renderer": "this.renderChunk", "renderchunktpl": "<img src=\"[[+video.image]]\" width=\"160\">" }, { "header": "Время", "dataIndex": "video_duration", "width": 100, "sortable": "false", "show_in_grid": 1, "renderer": "this.renderChunk", "renderchunktpl": "[[+video.videoDuration]]" }, { "header": "videoId", "dataIndex": "video_videoId", "sortable": "false", "show_in_grid": "0", "renderer": "this.renderChunk", "renderchunktpl": "[[+video.videoId]]" }, { "header": "Описание", "dataIndex": "video_description", "sortable": "false", "show_in_grid": 1, "renderer": "this.renderChunk", "renderchunktpl": "[[+video.desc]]" } ], "category": "" }
minishop3 - не сохраняется в карточке товара "Остаток на складе"
Добрый день!
Поставила minishop3.
В админке, в свойстве товара есть стандартный параметр «Остаток на складе» (stock). Ввожу количество, сохраняю. При обновлении поле остаётся пустое.
Что нужно поправить?
Поставила minishop3.
В админке, в свойстве товара есть стандартный параметр «Остаток на складе» (stock). Ввожу количество, сохраняю. При обновлении поле остаётся пустое.
Что нужно поправить?
mSync и moysklad.ru
Подскажите, mSync отправляет заказы в MoySklad?
Компонент не обновлялся с 2023 года. Работает ли все сейчас на текущих версиях склада и ModX 2.8.8?
Компонент не обновлялся с 2023 года. Работает ли все сейчас на текущих версиях склада и ModX 2.8.8?
Как удалить с сайта счетчик Google Analytics?
Доброго времени суток. Столкнулся с тем что не могу удалить счетчик Google Analytics,.т.к. не понимаю где он может находится. Если открыть код главной страницы сайта в браузере то показывает что счетчик под футером. Посмотрел в админке шаблоны, чанки но ничего не нашел. Где ещё может находится счетчик?
Нужен специалист по гугл консоли , настройка seo
Нужен специалист по гугл консоли, настройка seo
Сайт на modx revo нужен seo мастер и, или программист разбирающийся в сео
@moversTir
Сайт на modx revo нужен seo мастер и, или программист разбирающийся в сео
@moversTir
Кнопки как в ModStore
День добрый.
Что-то я упускаю, никак не могу понять… как реализовать такие кнопки как в modstore.ru в каталоге — «Все», «Платные», «Бесплатные».
У меня на сайте работает mSearch2 и mFilter2.
Мне нужна такая же дополнительная фильтрация, по другому свойству товара — стране производителя. Но суть, думаю, та же.
Как реализовать такой функционал?
UPD: Предложенный вариант с формированием ссылок рабочий, конечно, но он вызывает перезагрузку страницы.
Как бы решить эту задачу красиво, с Ajax как в МодСтор — ecommerce?paid=1
Что-то я упускаю, никак не могу понять… как реализовать такие кнопки как в modstore.ru в каталоге — «Все», «Платные», «Бесплатные».
У меня на сайте работает mSearch2 и mFilter2.
Мне нужна такая же дополнительная фильтрация, по другому свойству товара — стране производителя. Но суть, думаю, та же.
Как реализовать такой функционал?
UPD: Предложенный вариант с формированием ссылок рабочий, конечно, но он вызывает перезагрузку страницы.
Как бы решить эту задачу красиво, с Ajax как в МодСтор — ecommerce?paid=1
Сбор новостей с разных сайтах на один общий
Коллеги, подскажите плз, какие есть решения для такой задачи:
Существуют несколько сайтов на MODX, пусть это будут А, В, С
Нужно что бы новости (ресурсы определенного родителя с сайтов В и С) как-то автоматически попадали на сайт А, и все добавленные фото копировались тоже.
Везде используется migxResourceMediaPath
Существуют несколько сайтов на MODX, пусть это будут А, В, С
Нужно что бы новости (ресурсы определенного родителя с сайтов В и С) как-то автоматически попадали на сайт А, и все добавленные фото копировались тоже.
Везде используется migxResourceMediaPath
mFilter2 в некоторых опциях не подменяется aliases
Здравствуйте.
не могу понять в чем проблема. Некоторые опции отлично подменяют aliases, а некоторые не в какую и выводят всегда msoption|…
смотреть пример тут — greifus.ru/catalog/bortovyie-avtomobili-s-kmu
по шасси и манипулятору aliases подменяется, а по другим опциям — нет.
причем в выоде все указано:
не могу понять в чем проблема. Некоторые опции отлично подменяют aliases, а некоторые не в какую и выводят всегда msoption|…
смотреть пример тут — greifus.ru/catalog/bortovyie-avtomobili-s-kmu
по шасси и манипулятору aliases подменяется, а по другим опциям — нет.
причем в выоде все указано:
&filters=`
msoption|filtrshassi2
,msoption|wheelFormula
,msoption|kmu
,msoption|agpVisota
,msoption|agpKorzina
,msoption|filtrSclad
`
&aliases=`
resource|parent==category,
msoption|agpVisota==visota,
msoption|agpKorzina==korzina,
msoption|wheelFormula==wheel,
msoption|filtrshassi2==shassi,
msoption|filtrSclad==nalichie,
msoption|kmu==kmu
`в чем может быть проблема? Доступ к репозиторию MODX на digitaloceanspaces.com заблокирован для российских IP?
Приветствую сообщество! Не могу загрузить пакеты из админки. Через VPN пакеты доступны.