MODX Revo + Расписание
Доброго дня всем!
Столкнулся с задачей: необходимо выводить расписание занятий — тренингов, которые группируются по дате (например 10 апреля и выводим список имеющихся тренингов), + подцепляются некоторые значения (Имя ведущего, время, описание, стоимость, кнопка «Записаться»), и на главную страницу выводим самый ближайший тренинг на сегодня.
Прошедшие мероприятия или удаляем или скидываем в архив.
Может кто-то уже сталкивался с реализацией чего-то подобного или встречал решения?
Буду очень признателен за любые комментарии.
Столкнулся с задачей: необходимо выводить расписание занятий — тренингов, которые группируются по дате (например 10 апреля и выводим список имеющихся тренингов), + подцепляются некоторые значения (Имя ведущего, время, описание, стоимость, кнопка «Записаться»), и на главную страницу выводим самый ближайший тренинг на сегодня.
Прошедшие мероприятия или удаляем или скидываем в архив.
Может кто-то уже сталкивался с реализацией чего-то подобного или встречал решения?
Буду очень признателен за любые комментарии.
Комментарии: 11
Первая часть решается через pdoTools. Подробнее не скажу, зависит от того по каким таблицам все разбросано.
Вторая совсем просто. Скрипт в кроне переодически проверяет даты и прошедшие отключает или переносит
Вторая совсем просто. Скрипт в кроне переодически проверяет даты и прошедшие отключает или переносит
Можете подробнее как реализовать через pdoTools?
Сгородил MIGX таблицу для удобного заполнения тренингов, по-сути осталось как-то группировать в одну дату события, пока туплю над этим.
Сейчас реализовано так:
MIGX: fedorova-e.ru/calendar
Через pdoTools: fedorova-e.ru/raspisanie (там еще и фильтр сверху)
Сгородил MIGX таблицу для удобного заполнения тренингов, по-сути осталось как-то группировать в одну дату события, пока туплю над этим.
Сейчас реализовано так:
MIGX: fedorova-e.ru/calendar
Через pdoTools: fedorova-e.ru/raspisanie (там еще и фильтр сверху)
Через MIGX ничего сортировать и группировать НЕЛЬЗЯ. Потому что записи лежат в одной большой куче.
ВСЕ данные, по которым вам нужно организовывать сортировку и группировку, должны находиться отдельно. На каждый тип данных отдельное поле. Например TV.
Для каких то подробных советов надо смотреть детально организацию материала в админке.
ВСЕ данные, по которым вам нужно организовывать сортировку и группировку, должны находиться отдельно. На каждый тип данных отдельное поле. Например TV.
Для каких то подробных советов надо смотреть детально организацию материала в админке.
Через MIGX ничего сортировать и группировать НЕЛЬЗЯ.Параметры where и sort в getImageList вполне себе работают, причем можно задавать несколько условий.
Сгородил MIGX таблицуТаблицу через TV ввода migx? Или отдельную БД через конфигурацию migx с составлением схемы таблицы? Если идти по второму варианту, то выборку можно будет делать непосредственно из БД, а тут и фильтруйте, сортируйте, выбирайте ближайшие по дате.
Я сказал про НЕЛЬЗЯ, условно. Можно конечно, но это все велосипедно-костыльные труды. При большом количестве информации производительность крайне низкая из-за того, что все хранится в json строках. Это нужно сначала выбрать ВСЕ данные, декодировать их, собрать в единый массив. Ну а дальше конечно можно уже крутить этим массивом как хочешь.
Если таких таблиц тысячи, то нужно немалое количество ОЗУ, чтобы все это обработать.
Если таких таблиц тысячи, то нужно немалое количество ОЗУ, чтобы все это обработать.
Таблицу через TV ввода migx?Да, просто ТВ поле с типом ввода MIGX
Если надо выбирать из разных ресурсов, то могу посоветовать написать сниппет, в котором получить все нужные TV migx, потом их json_decode, объединить массивы через array_merge, и потом опять json_encode, и полученный результат передать в getImageList. Ну или после array_merge при помощи php производить нужные манипуляции.
Для каких то подробных советов надо смотреть детально организацию материала в админке.В админке данные = отдельные материалы (тренинги, вебинары), в принципе через pdoTools сортировка работает нормально, но столкнулся с такой проблемой — даты не верно выдаются, т.е. если несколько ТВ полей (обычные ТВ, не MIGX) заполнены, то все данные в перемешку выводятся.
Т.к. один тренинг может идти в разные дни или повторяться несколько раз в день, к примеру.
Вообще вызываю расписание на странице так:
Как бы все работает и выполняет свои задачи, но вот как сгруппировать тренинги в расписании по дате, чтобы скажем на 18 апреля выводились все тренинги и вебинары на 18 апреля, сейчас же все происходит отдельными записями.
[[!mFilter2?
&element=`pdoResources`
&parents=`8`
&limit=`0`
&hideContainers=`1`
&sort=`tv|t_date:asc,tv|t_date2:asc,tv|t_date3:asc,tv|t_date4:asc,tv|t_date5:asc,tv|t_time:asc`
&where=`{"t_date:>=":1}`
&tpl=`RaspisanieCatTplItem`
&includeTVs=`trener,trener2,trener3,trener4,trener5,t_date,t_date2,t_date3,t_date4,t_date5,t_time,t_time2,t_time3,t_time4,t_time5,t_cost,t_cost2,t_cost3,t_cost4,t_cost5,sort`
&filters=`
resource|pagetitle
,tv|trener
,parent:parents
`
&tplFilter.outer.tv|trener=`tpl.mFilter2.filter.select`
&tplFilter.row.tv|trener=`tpl.mFilter2.filter.option`
&tplFilter.outer.resource|pagetitle=`tpl.mFilter2.filter.select`
&tplFilter.row.resource|pagetitle=`tpl.mFilter2.filter.option`
&tplFilter.outer.resource|parent=`tpl.mFilter2.filter.select`
&tplFilter.row.resource|parent=`tpl.mFilter2.filter.option`
&suggestionsRadio=`tv|trener`
]]
Чанк RaspisanieCatTplItem:[[DATE_RU]]
[[+tv.trener:!empty=`
<div class="row" style="margin: 0; padding-bottom: 20px;">
<form action="[[~[[*id]]]]" method="post" class="ajax_form af_example">
<input type="hidden" name="category" value="[[+pagetitle]]">
<input type="hidden" name="date" value="[[+tv.t_date:dateAgo]]">
<input type="hidden" name="time" value="[[+tv.t_time]]">
<input type="hidden" name="trener" value="[[+tv.trener]]">
<input type="hidden" name="cost" value="[[+tv.t_cost]]">
<div class="col-md-12 rasp_title">[[+tv.t_date:dateAgo]]</div>
<div style="background: #fff;">
<div class="col-md-2 ptop20">[[+tv.t_time]]</div>
<div class="col-md-6 ptop20"><a href="[[~[[+id]]]]">[[+pagetitle]]</a>
<span class="rasp-teacher">Инструктор: <b>[[+tv.trener]]</b></span>
</div>
<div class="col-md-2 ptop20">
[[+tv.t_cost]] р.
</div>
<div class="col-md-2 ptop20">
<button class="btn-green" data-toggle="modal" target="_self" data-target="#addTrening[[+id]]">Записаться</button>
<!-- <button data-toggle="modal" target="_self" data-target="#addTrening[[+id]]" class="rasp-btn-online">Online Тренинг</button>-->
</div>
</div>
</form>
</div>
`]]
Как бы все работает и выполняет свои задачи, но вот как сгруппировать тренинги в расписании по дате, чтобы скажем на 18 апреля выводились все тренинги и вебинары на 18 апреля, сейчас же все происходит отдельными записями.
Код не проверял, но думаю смысл понятен будет. Я бы пошел по такому пути.
[[!+last_date:ne=`[[+tv.t_date]]` &then=`<div class="col-md-12 rasp_title">[[+tv.t_date:dateAgo]]</div>[[+tv.t_date:toPlaceholder=`last_date`]]`]]
Немного в синтаксисе ошибся, проект на evo дает о себе знать
[[!+last_date:ne=`[[+tv.t_date]]`:then=`<div class="col-md-12 rasp_title">[[+tv.t_date:dateAgo]]</div>[[+tv.t_date:toPlaceholder=`last_date`]]`]]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.