Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 129 комментариев

Артур Шевченко
Артур Шевченко
файлы нужно где-то временно хранить и отслеживать, были они отправлены или нет. То есть, сохранять их в БД, чистить неотправленное и всякое такое.
В SendIt всё это есть, только без БД. Файлы загружаются автоматически и удаляются автоматически при перезагрузке или закрытии страницы. Если отправлять не надо, то пишешь хук, который переместит файлы. В общем, я вдохновлялся AjaxForm и AjaxSnippet и получился универсальный компонент для отправки форм.

Вообще очень интересно получилось. Твои старые компоненты на фронте используют jQuery, а теперь ты врываешься с Vue, VanillaJS не зашёл тебе совсем?)))

Что касается твоих идей, мне они кажутся революционными для Modx, если не найдётся тот, кто разжуёт всё для малообразованных вроде меня, будет сложно разобраться.
Павел Бигель
Павел Бигель
Первым делом я написал mmxDatabase, который добавляет возможность работы с основными таблицами MODX через Eloquent. Про это уже давно и много где говорили, но дальше примеров «смотрите как можно» дело до сих пор не зашло.
Хз, Вась ) А зачем тебе тогда modx?
И зачем этот пакет? Просто заменить один синтаксис другим?
Если тейк про скорость, то это не элокенту
Павел Романов
Павел Романов
Они шлют прямыми запросами на assets/components/ajaxform/action.php.
Сделайте сниппет chkbot:
<?php
$_SESSION['afchk'] = 1;
return true;

Добавьте его в &preHooks:
[[!AjaxForm?
&preHooks=`chkbot`
&hooks=`spam,email`
...
]]

А в файле assets/components/ajaxform/action.php на 23 строке добавьте:
if($_SESSION['afchk'] != 1){
    echo  $AjaxForm->success('Сообщение успешно отправлено.');
    die();
}
unset($_SESSION['afchk']);
Александр Туниеков
Александр Туниеков
Блин. Насчет того, что точно не буду использовать vesp/core 4 кажется погорячился. Проблема в том, что ресурсов на собственный аналог не хватает :-(. Чтоб предложить более менее полноценное приложение надо потратить много времени… В принципе можно было бы перейти на vesp, но главная проблема отсутствие модульности. У нас сайт с, условно, сотней модулей. Пересоберать весь сайт при изменении одного модуля или добавлении нового желания нет.
У меня, при использовании gtsAPI, на странице вызывается сниппет, который подгружает однофайловый модуль на vue. Который весит пару килобайт. Соберается за секунды и никак не влияет на другие модули. Нужно, чтоб модуль можно было отдельно редактировать и соберать. Чтоб модуль отдельно подгружался при использовании на странице и чтоб при загрузке какой-либо страницы не загружались все сто модулей.
Пример модуля
ExcelCalc
Александр Туниеков
Александр Туниеков
Нда… вот бы была такая система год назад… Сейчас уже активно пишу на более простом самописном аналоге с primeVue. Все проще и PSR-7 не поддерживает, но зато все мне понятно. Так что для меня врядли пригодиться. Хотелось бы современный и понятный стандарт, чтоб не плодить кучу разнообразных систем в которых ногу сломишь, но по моему новинки в программировании редко взлетают. С минишопом у Вас повезло. Ко времени пришелся. А vesp/core 4 может и не взлететь. Разве что на авторитете подымется. Думаю 3 проблемы помешают.
1 это не простой порог входа. Подробной документации еще нет, но система кажется не простой.
2. MODX с системой сниппетов и чанков довольно простой конструктор сайтов. Многие не знают php и пишут на MODX сайты. А с vesp/core уже так не получиться.
3. У vesp нет компонентов и модулей, чтоб не писать нужный функионал с 0, а как, например, установил минишоп и просто под свой сайт подстроил.

Ну это я так вижу :-). Может у кого-то другие впечатления…
Денис Усманов
Денис Усманов
Хочу отметить, что не пытаюсь высказаться, что ты изобретаешь «велосипед», вижу, что в твоём решении больше контроля данных, что несомненно очень здорово! Поэтому, я обязательно как писал выше, буду пробовать твоё решение!
Денис Усманов
Денис Усманов
Всё верно, SendIt не работает с БД, он работает как аналог AjaxForm и имеет большие преимущества как отметили многие воспользовавшиеся им, в том числе и я. Он временно загружает файлы в папку так же временную называя его по sessionid, и удаляет её сразу после отправки, но если есть необходимость файлы сохранить, до отправки файлы само собой можно перенести на постоянное хранение хуком, что я и делал. Удаляются файлы не зависимо от того, отправилось письмо или нет…
Василий Наумкин
Василий Наумкин
такое уже есть в SendIt
У Vueform всё
немного сложнее. Там грузятся временные файлы до отправки формы, а потом их можно удалить или заменить.

А это значит, что файлы нужно где-то временно хранить и отслеживать, были они отправлены или нет. То есть, сохранять их в БД, чистить неотправленное и всякое такое.

В логике mmxForms это новые таблицы, модели и связи. Sendit, насколько я вижу по исходникам, с БД вообще не работает.
Денис Усманов
Денис Усманов
Николай Савин
Николай Савин
Одно дело написать «У меня возникла такая же проблема, решил вот так-то». Это действительно полезное сообщение для потомков.

Другое дело, поступить как вы — целенаправленно отвечать человеку на его сообщение 8 летней давности. Да еще и совет даете, что ему попробовать.
Константин
Константин
У меня только сейчас возникла такая проблема. Начал рыть интернет. В поиске выдало эту страницу, на которой не нашел ответа. Но нашел в другом месте. Написал здесь, чтобы закрыть тему. Что не так?
vectorserver
vectorserver
Тоже замучился но у меня форма динамическая инпуты подставляются через JS и хеш не совпадает, сделал такой костыль пока:
В assets/components/ajaxform/action.php
Закомментировал с 25 по 27 строку проверку
$_REQUEST['af_action']
Кому лень вот готовый код (костыль):
<?php
/** @var modX $modx */
define('MODX_API_MODE', true);
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';
$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');

// Switch context if need
if (!empty($_REQUEST['pageId'])) {
    if ($resource = $modx->getObject('modResource', (int)$_REQUEST['pageId'])) {
        if ($resource->get('context_key') != 'web') {
            $modx->switchContext($resource->get('context_key'));
        }
        $modx->resource = $resource;
    }
}

/** @var AjaxForm $AjaxForm */
$AjaxForm = $modx->getService('ajaxform', 'AjaxForm', $modx->getOption('ajaxform_core_path', null,
        $modx->getOption('core_path') . 'components/ajaxform/') . 'model/ajaxform/', array());

if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {
    $modx->sendRedirect($modx->makeUrl($modx->getOption('site_start'), '', '', 'full'));
} /*elseif (empty($_REQUEST['af_action'])) {
    echo $AjaxForm->error('af_err_action_ns');
}*/ else {
    echo $AjaxForm->process($_REQUEST['af_action'], array_merge($_FILES, $_REQUEST));
}

@session_write_close();