Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. CMS
  4. MODX
  5. msGallery ограниченный вывод превью

msGallery ограниченный вывод превью

Запланировано Прикреплена Закрыта Перенесена MODX
modxfenom
6 Сообщения 5 Постеры 68 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • kirilljsxK Не в сети
    kirilljsxK Не в сети
    kirilljsx
    js
    написал в отредактировано
    #1

    Снимок экрана 2025-08-26 в 13.53.45.png

    Появилась задача сделать вывод превью под основной каруселью товаров до 3-х итемов.

    Вот основной чанк tpl.msGallery, в моем случае он переделан, у вас он может выглядеть по дефолту.

    <div class="product-slider productSticky">
      <div class="product-slider__slides">
        {if $files?} {foreach $files as $file}
        <img
          class="product-slider__image"
          src="{$file['url']}"
          alt="[[*pagetitle]]"
        />
        {/foreach} {/if}
      </div>
      <div class="product-slider__preview">
        <!-- Вот необходимый код для вывод превью -->
        {if $files && is_array($files)}
            {var $count = 0}
            {foreach $files as $file}
                {if $count < 3 && !empty($file['url'])}
                    <img
                        class="product-slider__image-preview"
                        src="{$file['url']}"
                        alt="[[*pagetitle]]"
                    />
                    {var $count = $count + 1}
                {/if}
            {/foreach}
        {/if}
        <!-- Вот необходимый код для вывод превью -->
      </div>
      <button class="product-slider__btn product-slider__btn_prev">️</button>
      <button class="product-slider__btn product-slider__btn_next">️</button>
    </div>
    

    Что мы тут делаем, проверяем является ли $files массивов - {if $files && is_array($files)}, если все ок то далее создаем переменную {var $count = 0} далее по стандарту используем метод перебор массива {foreach $files as $file}.

    Далее делаем проверку на количество что бы переменная$count не была больше 3-х
    {if $count < 3 && !empty($file['url'])}
    При при каждой итерации (перебор массива) прибавляем значение переменной {var $count = $count + 1}

    Вот и все, теперь у нас в превью под основной каруселью будет выводиться максимум 3.

    1 ответ Последний ответ
    0
    • Алекс44А Не в сети
      Алекс44А Не в сети
      Алекс44
      написал в отредактировано
      #2

      А что если в массиве меньше трёх изображений? Не сломается ли вёрстка из-за пустых элементов? Может стоит добавить проверку на минимальное количество?

      1 ответ Последний ответ
      0
      • В Не в сети
        В Не в сети
        Ванек
        написал в отредактировано
        #3

        В текущем коде если изображений меньше трёх - просто выведутся все имеющиеся. Цикл остановится сам, когда массив закончится. Пустых элементов не будет - проверка !empty($file[‘url’]) отсечет битые ссылки.

        1 ответ Последний ответ
        0
        • ВасилийВ Не в сети
          ВасилийВ Не в сети
          Василий
          написал в отредактировано
          #4

          Почему бы не использовать array_slice для обрезки массива сразу? Был бы код короче: {foreach array_slice($files, 0, 3) as $file} и не нужна переменная $count.

          1 ответ Последний ответ
          0
          • WowkW Не в сети
            WowkW Не в сети
            Wowk
            написал в отредактировано
            #5

            вариант с array_slice действительно элегантнее, но не все шаблонизаторы поддерживают PHP-функции напрямую. В ModX часто приходится работать с синтаксисом Fenom, где такие трюки не всегда проходят.

            1 ответ Последний ответ
            0
            • Алекс44А Не в сети
              Алекс44А Не в сети
              Алекс44
              написал в отредактировано
              #6

              Теперь понял логику и буду использовать такой же подход для лимитирования вывода новостей в сайдбаре. Только переменную $count нужно будет обнулять перед каждым новым блоком.

              1 ответ Последний ответ
              0

              Категории

              • Главная
              • Новости
              • Фронтенд
              • Бекенд
              • Языки программирования

              Контакты

              • Сотрудничество
              • info@exlends.com
              • Наш чат
              • Наш ТГ канал

              © 2024 - 2025 ExLends, Inc. Все права защищены.

              Политика конфиденциальности
              • Войти

              • Нет учётной записи? Зарегистрироваться

              • Войдите или зарегистрируйтесь для поиска.
              • Первое сообщение
                Последнее сообщение
              0
              • Лента
              • Категории
              • Последние
              • Метки
              • Популярные
              • Пользователи
              • Группы