Тодор

Тодор

Был в сети 29 июня 2026, 13:05
Заказы не принимаю
Создаеш TV, с типом ввода — Список (множественный выбор)
В поле вожможные значения пишеш чтото такое
@EVAL return $modx->runSnippet('msProducts', array(
    'parents'=>$parentID,
    'where'=>'{"Data.price:>=":"150"}',
    'limit'=>0,
    'sortby'=>'{"pagetitle":"ASC"}',
    'tplOuter'=>'@INLINE [[+output]]',
    'tpl'=>'@INLINE [[+pagetitle]]==[[+id]]',
    'outputSeparator'=>'||'
));
А при выводе на сайте береш значение твоей TV и передаеш в pdoResources
{'!pdoResources' | snippet:[
    'parents' => 0,
    'limit' => 0,
    'resources' => $_modx->resource.your_tv_field,
    'tpl' => '@INLINE <a href="{$uri}">{$pagetitle}</a>'
]}
я только не помню точно ставит ли «Список (множественный выбор)» — какой-то свой разделитель между значениями, если ето не "," то надо будет заменить розделитель
<?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;
если хочешь добавить поле в отдельное поле то надо внести изменения в хук сохранения формы __CORE_PATH__/components/formit/src/FormIt/Hook/Saveform.php — 183 ряд, в этом случае при обновлении FormiIt изменения перезапишуться. ИЛИ создать свой hook который будет записывать данные с формы в БД в таблицу modx_formit_forms
да ето код пример )
у 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
    )
)
ето при первой загрузке фоток, а дальше у всех пустой масив