Andrey Grachov

Andrey Grachov

Был в сети 30 августа 2021, 18:52
Заказы принимаю
Это была дружеская помощь, если будет что-то серьезное — обращайтесь :)
Пример оставим для истории, для тех кто придет, а ссылка уже не работает:
// Вызов mFilter2
[[!mFilter2? &parents=`[[*id]]` &filters=`resource|publishedon:date` &tplFilter.row.resource|publishedon=`tpl.mFilter2.filter.date`]]

// Чанк tpl.mFilter2.filter.date
[[+idx:is=`0`:then=`
    <input type="hidden" name="[[+table]][[+delimeter]][[+filter]]" id="mse2_[[+table]]_[[+filter]]_[[+idx]]" value=""/>
    <div id="mse2_[[+table]]_[[+filter]]_[[+idx]]_datepicker"></div>
    <script type="text/javascript">
        $(function () {
            $('#mse2_[[+table]]_[[+filter]]_[[+idx]]_datepicker').datepicker({
                altField: '#mse2_[[+table]]_[[+filter]]_[[+idx]]',
                dateFormat: 'yy-mm-dd'
            });
        });
    </script>
`:else=``]]
Компонент для Dropbox выложен только в виде готового пакета (DropSource), но поскольку Github упразднил раздел Downloads, так просто его сейчас не найти :)
Я занимался его разработкой и насчет токена думаю можно применить ту же схему: если указаны API key и API secret, то в описании параметра Auth token выводится ссылка на авторизацию. После перехода по ней и подтверждения пользователь возвращается обратно на страницу настройки Media Source и токен автоматически сохраняется в настройки.
Поскольку для Яндекс redirect_url должен задаваться в настройках приложения, можно на странице редактирования Media Source выводить ссылку на текущую страницу, отметив что ее необходимо указать в настройках приложения. А в остальном использовать тот же принцип для авторизации пользователя.
Если радиобаттоны имеют имя tv{$tv->id}[ {$item.value} ], то значение тв параметра по идее должно сохраняться, но вы потеряете в итоговом значении ключи этого массива. Лучше создать скрытое поле с именем tv{$tv->id} и при изменении радиобаттонов сериализовать в него нужное значение.
Проблема в том, что когда ресурсов с требуемой датой нет, параметр resources будет содержать пустую строку и соотв. будут выбираться все ресурсы. Один из вариантов решения — можно указать parents=`-1` в вызове getPage.
Проблема возникает из-за того, что компонент не готов к ситуации, когда MODX установлен в папку, а не в корень домена. Когда MODX установлен в папку, а не в корень домена, настройка site_url содержит в конце название этой папки, и в процессе генерации ссылок внутри компонента к ней еще добавляется значение REQUEST_URI, которое тоже содержит в начале название этой папки.
Временным решением (теоретически) может быть передача в вызов сниппетов компонента параметра siteUrl со значением, равным адресу домена (в данном примере — http:// sfeduprojects.ru/).
После этой строки вашего первоначального кода:
$modx->resource->setTVValue(11, 1);
надо добавить
$modx->resource->set('tv_name', null);
или
$tv = $modx->resource->get('tv_name');
if (is_array($tv)) {
	$tv[1] = 1;
	$modx->resource->set('tv_name', $tv);
}
где tv_name — имя tv-параметра с id равным 11. Это позволит дальше на странице использовать новое значение tv-параметра, если оно необходимо.
В ходе обработки запроса modx загружает ресурс и все его tv-параметры, и потом при получении значений tv-параметров обращается к первоначальным данным. После установки нового значения надо выполнить что-то вроде:
$modx->resource->set('tv_name', null);