Сергей

Сергей

Был в сети 14 декабря 2024, 20:01
Заказы не принимаю
Предлагаю такой вариант. Новый тип TV — поля.

Что дает этот плагин?
Мы знаем, что можно использовать динамический биндинг в TV — полях типа «список» и «множественный список» с @eval return $modx->runSnippet('snippetname') для формирования списка. Список формируется динамически из сниппета, но представляет собой только текстовое обозначение. Что не всегда удобно и понятно.

Описанный ниже плагин по — сути делал бы то же самое, только формировал «Расширенный динамический список», позволяя самим выбирать внешний вид списка элементов, и показывать информацию об элементах



Показываю на примере font-awesome.
Выбранный элемент должен рендериться рядом с полем TV-шки. При этом в «сыром виде» в самом поле будет храниться текст типа «fa-facebook». При настройке TV — поля пользователь должен сам указывать способ «рендера» этого «fa-facebook» в предпросмотре TV — поля.

То есть чтобы можно было либо подключать отдельный css — файл для этого, либо указывать инлайново стиль (а лучше и то и другое). В том, числе — подключать свои кастомные стили.

Но чтобы сами стили затрагивали только TV — поле, область рендера должна быть обернута в блок с названием, которое можно указывать в настройках TV. К примеру «Класс контейнера для предпросмотра». И текстовое поле, куда можно указать класс.

Тут главная особенность — чтобы пользователи могли подключить свои стили и сами определять способ рендера превьюшки. Еще возможно чтобы можно было указывать сниппет — хук для обработки данных перед рендером (опционально)

Это все было по внешнему виду предпросмотра
Теперь при нажатии кнопки выбор. Должно открываться окно с возможностью выбора элементов из списка. Но как должен выводиться список тоже должно быть определено в настройках TV — поля (без привязки к ExtJS). То есть чтобы тут можно было — бы подключить свои стили аналогично, определить как отображаются элементы. А при нажатии на них происходил выбор. То есть в документации указать например: «Отображать список можно любым произвольным способом, главное, чтобы у элементов был реализован метод onclick=»choose('fa-facebook')". И все. То есть определять то, что выбрал пользователь будет срабатывание этого метода.

Было — бы неплохо, если бы также можно было реализовать множественный выбор, а при выборе нескольких элементов просто добавлялся определенный класс к элементам. Ну а «внешний вид» уже определялся бы пользователем.

Потом еще бы сделать вывод информации в окне выбора не статичным html — файлом, а с возможностью полноценного использования сниппетов, чанков и т.д. — то есть динамически подготовить вывод.
pdoPage имеет функционал для создания пагинации и ajax- подгрузки. У сниппета getImageList есть offset и limit. Судя по всему возможно использовать их вместе

[[!pdoPage? 
        &element=`getImageList`
        &maxLimit=`15`
        &totalVar=`ImagesTotal`
        &toPlaceholder=`ImagesResult`
        &ajaxMode=`scroll`
        &pageLimit=`10`
]]
    
    [[!+ImagesTotal:ne=`0`:then=`
        <div id="pdopage">
            <div class="rows clearfix">
                [[+ImagesResult]]
            </div>
            <div class="text-center" style="margin-top: 15px; display: none">
                [[!+page.nav]]
            </div>
        </div>
    `:else=`
        <p>Нет фотографий</p>
    `]]
Может получиться, а может и нет.
Буквально на днях перед праздниками клиенту позвонил сбербанк и предложил свою систему оплаты. Сделал вот абсолютно точно такой — же плагин, но чет поленился в пакет собрать :3. Я там не все функции API сбера реализовал. Только оплату и смену статуса в списке заказов minishop2. У сбера еще есть возможность возврата денег по запросу клиента. Но магазин торгует цветами, и возврат у них не предусмотрен. Илья, в твоей версии такой функционал добавлен? (хотя наверное он не всем нужен)