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

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

Василий Наумкин
Василий Наумкин
такое уже есть в 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();
Володя
Володя
Разобрался, благодаря вам!
Отлично!
Эти данные надо вынимать из msOrderAddress, а не из msOrder.
ну значит пакет пишет не пропертис заказа, а в пропертис адреса заказа.
Еще раз убедился на практике в большом потенциале дополнения msStatOrders. Благодарю автора!
Пожалуйста, обращайтесь!
Андрей Шевяков
Андрей Шевяков
Разобрался, благодаря вам!
Эти данные надо вынимать из msOrderAddress, а не из msOrder.

Получается надо сделать так:

1) Добавляем выборку поля Address.properties



2) Добавляем рендер



<?php
/** @var modX $modx */
/** @var array $row */
$utm= '';

if (!empty($row['Address.properties'])) {
    $properties = json_decode($row['Address.properties'], true);
    $utm = $properties['utm_campaign'] ?: '';
}

return $utm;

3) Добавляем поле



Теперь выводится поле utm_campaign в заказах. Изначально я пытался вывести utm_source, оно делается аналогично.

Еще раз убедился на практике в большом потенциале дополнения msStatOrders. Благодарю автора!
Андрей Шевяков
Андрей Шевяков
Не заработало, выводит "{" и ошибки в логах вида:
PHP warning: Illegal string offset 'utm_source'
Скрин

Рендер
<?php
/** @var modX $modx */
/** @var array $row */
$utm= '';

if (!empty($row['Order.properties'])) {
    $utm = $row['Order.properties']['utm_source']; // тут берете нужное поле из массива properties
}

return $utm;

В ТП к сожалению не могу написать, прошло больше года после покупки дополнения.
Володя
Володя
Доброе утро.

Добавьте выборку поля Order.properties



добавьте рендер



<?php
/** @var modX $modx */
/** @var array $row */
$utm= '';

if (!empty($row['Order.properties'])) {
    $utm = $row['Order.properties']['utm']; // тут берете нужное поле из массива properties
}

return $utm;

добавьте поле



Должно работать, если не получится — пишите в ТП.
Андрей Шевяков
Андрей Шевяков
Добрый день!
На сайте используем дополнение
utmMark, оно пишет данные utm меток в формате json в поле properties заказа.

Помогите пожалуйста, как вывести поле properties в читаемом виде?

По умолчанию выводит [object Object]