Тодор

Тодор

С нами с 08 мая 2018; Место в рейтинге пользователей: #225
Тодор
06 августа 2021, 16:58
0
<?php
$values = $hook->getValues();
$identifier = basename($_SERVER['REQUEST_URI']);
$contextKey = '-';
if ($modx->resource) {
    $identifier = $modx->resource->get('id');
    $contextKey = $modx->resource->get('context_key');
}
$formName = $modx->getOption('formName', $formit->config, 'form-'.$identifier);
// process formName. Pick a value from the form
// Inspired from the email's hook of formit (fihooks.class.php)
if (is_string($formName)) {
    foreach ($fields as $k => $v) {
        if (is_scalar($k) && is_scalar($v)) {
            $formName = str_replace('[[+'.$k.']]',$v,$formName);
        }
    }
}

$formEncrypt = $modx->getOption('formEncrypt', $formit->config, false);
$formFields = $modx->getOption('formFields', $formit->config, false);
$fieldNames = $modx->getOption('fieldNames', $formit->config, false);
$updateSavedForm = $modx->getOption('updateSavedForm', $formit->config, false); // true, false, '1', '0', or 'values'
// In order to use update process, you need to provide the hash key to the user somehow
// Usually with [[!FormItRetriever]] to populate this form field:
$formHashKeyField = $modx->getOption('savedFormHashKeyField', $formit->config, 'savedFormHashKey');
// Disable if you want to use the session_id() in your hash, like FormIt does
// WARNING: this can cause potential hash key collisions and overwriting of the wrong form record!!
$formHashKeyRandom = $modx->getOption('formHashKeyRandom', $formit->config, true);
// process formHashKeyField into variable for later use
$formHashKey = (isset($values[$formHashKeyField])) ? (string) $values[$formHashKeyField] : '';
// our hashing methods return 32 chars
if (strlen($formHashKey) !== 32) $formHashKey = '';
unset($values[$formHashKeyField]);

if ($formFields) {
    $formFields = explode(',', $formFields);
    foreach($formFields as $k => $v) {
        $formFields[$k] = trim($v);
    }
}
// Build the data array
$dataArray = array();
if ($formFields) {
    foreach ($formFields as $field) {
        $fieldValue = isset($values[$field]) ? $values[$field] : '';
        // When field is file field, value is an array
        if (is_array($fieldValue) && isset($fieldValue['tmp_name'], $fieldValue['name'])) {
            $fieldValue = $fieldValue['name'];
        }
        $dataArray[$field] = $fieldValue;
    }
} else {
    $dataArray = $values;
}
// Change the fieldnames
if ($fieldNames) {
    $newDataArray = array();
    $fieldLabels = array();
    $formFieldNames = explode(',', $fieldNames);
    foreach ($formFieldNames as $formFieldName) {
        $parts = explode('==', $formFieldName);
        $fieldLabels[trim($parts[0])] = trim($parts[1]);
    }
    foreach ($dataArray as $key => $value) {
        if ($fieldLabels[$key]) {
            $labelKey = $fieldLabels[$key];
            if (array_key_exists($labelKey, $newDataArray)) {
                $labelKey .= ' ('.$key.')';
            }
            $newDataArray[$labelKey] = $value;
        } else {
            $newDataArray[$key] = $value;
        }
    }
    $dataArray = $newDataArray;
}
// We only enter update mode if we already have a valid formHashKey (tested above)
// AND the updateSavedForm param was set to a truth-y value.
$mode = ($updateSavedForm && $formHashKey) ? 'update' : 'create';
// Create/get obj
$newForm = null;
if ($mode === 'update') {
    $newForm = $modx->getObject('FormItForm', array('hash' => $formHashKey));
}
if ($newForm === null) {
    $newForm = $modx->newObject('FormItForm');
}

// Array from which to populate form record
$newFormArray = array();

// Handle encryption
$encryptionType = 1;
if ($formEncrypt) {
    $dataArray = $newForm->encrypt($modx->toJSON($dataArray));
    // Only set encryption type if encryption is successful
    if ($dataArray) {
        // Set encryption type to 2 (openssl)
        $encryptionType = 2;
    }
} else {
    $dataArray = $modx->toJSON($dataArray);
}

// Create new hash key on create mode, and handle invalid hash keys. 
if ($mode === 'create') {
    $formHashKey = ($formHashKeyRandom) ? $newForm->generatePseudoRandomHash() : pathinfo($formit->getStoreKey(), PATHINFO_BASENAME);
}

// Special case: if updateSavedForm has the flag 'values' we only merge in
// the form values, not the other stuff
if ($mode === 'update' && $updateSavedForm === 'values') {
    $newFormArray = $newForm->toArray();
    $newFormArray = array_merge($newFormArray, array(
        'values' => $dataArray,
        'encryption_type' => $encryptionType,
    ));
} else {
    $newFormArray = array(
        'form' => $formName,
        'date' => time(),
        'values' => $dataArray,
        'user_id' => $modx->user->id ?: 0,
        'ip' => $modx->getOption('REMOTE_ADDR', $_SERVER, ''),
        'context_key' => $contextKey,
        'encrypted' => $formEncrypt,
        'encryption_type' => $encryptionType,
        'hash' => $formHashKey,
    );
}
// Convert to object
$newForm->fromArray($newFormArray);
// Attempt to save
if (!$newForm->save()) {
    $modx->log(\modX::LOG_LEVEL_ERROR, '[FormItSaveForm] An error occurred while trying to save the submitted form: ' . print_r($newForm->toArray(), true));
    return false;
}
$storeAttachments = $modx->getOption('storeAttachments', $this->config, false);
if ($storeAttachments) {
    $newForm->storeAttachments($formit->config);
}
// Pass the hash and form data back to the user
$hook->setValue('savedForm', $newForm->toArray());
$hook->setValue($formHashKeyField, $newForm->get('hash'));

return true;
Тодор
06 августа 2021, 16:53
0
логику на подобие той что в файле __CORE_PATH__/components/formit/src/FormIt/Hook/Saveform.php
Тодор
06 августа 2021, 15:42
0
если хочешь добавить поле в отдельное поле то надо внести изменения в хук сохранения формы __CORE_PATH__/components/formit/src/FormIt/Hook/Saveform.php — 183 ряд, в этом случае при обновлении FormiIt изменения перезапишуться. ИЛИ создать свой hook который будет записывать данные с формы в БД в таблицу modx_formit_forms
Тодор
06 августа 2021, 15:30
0
Все значения из формы записываються в modx_formit_forms в поле values в json формате. Етот код:
$hook->setValue('user_id', $user_id);
Добавляєт елемент в масив values
Тодор
23 июля 2021, 11:34
0
тоесть не пустой, а такой
Array(
    [success] => 
    [message] => Такое изображение уже есть в галерее товара.
    [total] => 0
    [errors] => Array(        )
    [object] => Array(        )
)
Тодор
23 июля 2021, 11:09
0
да ето код пример )
у 2-4 такой масив,
Array
    [success] => 
    [message] => Такое изображение уже есть в галерее товара.
    [total] => 0
    [errors] => Array(        )
    [object] => Array(        )
)
а у остальних
Array(
    [success] => 1
    [message] => 
    [total] => 0
    [errors] => Array(        )
    [object] => Array(
        [id] => 15637
        [product_id] => 2017
        [source] => 2
        [parent] => 0
        [name] => 8926e70d-c6af-11eb-9377-18c04d68439c
        [description] => 
        [path] => 2017/
        [file] => 8926e70d-c6af-11eb-9377-18c04d68439c.jpeg
        [type] => image
        [createdon] => 2021-07-23 11:04:14
        [createdby] => 1
        [rank] => 0
        [url] => /assets/images/products/2017/8926e70d-c6af-11eb-9377-18c04d68439c.jpeg
        [properties] => Array(
            [size] => 115653
            [width] => 2000
            [height] => 1600
            [bits] => 8
            [mime] => image/jpeg
        )
        [hash] => 9ee73b013db3030f41d162a0525314fc3b97e806
        [active] => 1
    )
)
ето при первой загрузке фоток, а дальше у всех пустой масив
Тодор
22 июля 2021, 16:50
0
{
"dd.mm.YY.HH": 209.99,
"dd.mm.YY.HH": 199.99,
"dd.mm.YY.HH": 179.99,
}
Тодор
22 июля 2021, 16:11
0
Можно ети цены сохранять в талице с 2 полями 'product_id' i 'prices'
где prices — сохраняєтся в виде JSON
[209.99, 199.99, 179.99]
или
[
{'price': 209.99, 'date': "dd.mm.YY HH:ii:ss"}, 
{'price': 199.99, 'date': "dd.mm.YY HH:ii:ss"}, 
{'price': 179.99, 'date': "dd.mm.YY HH:ii:ss"}
]
Не знаю на сколько ето правильно
Тодор
22 июля 2021, 15:57
0
$resource->setTVValue('имя TV поля', 'значение поля');
$resource->save();//Если нужно переписать ето поле
Тодор
12 апреля 2021, 15:51
0
В документации по &sortby это описано
Тодор
12 апреля 2021, 15:37
0
Если форма работает через Ajax то переменые [[+fi.success]] и [[+fi.error]] всегда будут пустые
Тодор
12 апреля 2021, 15:31
0
$dir = $dir ?: 'assets/media/90/schema/';
$tpl = $tpl ?: 'mailFileInputTpl';

$filename = "schema.png"; // название файла
$file = MODX_BASE_PATH . $dir . "$filename";
if (file_exists($file)) {
  return $modx->getChunk($tpl, $filename);
} else {
  return 'НЕТ СХЕМЫ! ---/ ' . $file;
}
Тодор
23 марта 2021, 18:17
0
По поводу параметра «return» можно както вернуть масив со значениями, или только return=>json, а потом json_decode?
Тодор
17 декабря 2020, 19:46
+1
Разобрался сам, в правах доступа установил такую галочку
Тодор
17 декабря 2020, 14:19
0
Пробуйте в вашем чанке корзини вставить
{$_modx->lexicon->load('minishop2:default')}
Тодор
16 декабря 2020, 13:17
0
Как можна пользователю с правами «Контент Менеджер» дать доступ к добавлению записей в Словарь. Политика доступа «LocalizatorManagerPolicy» есть для етой групи пользователей. Сист. настройка «localizator_check_permissions» отключена (в положении Нет).
Тодор
15 декабря 2020, 14:37
0
В файле core/components/translit/model/modx/translit/tables/russian.php дописываете в масив
,'.'=>'-'
Тодор
14 декабря 2020, 16:11
+1
В документации все есть, и еще не:
&fields=`top`
а:
&includeTVs=`top`
Тодор
14 декабря 2020, 16:01
0
Ишчеш плагин «frontendmanager», там на 2 строке проверка на на права