Всего 125 676 комментариев

Роман
07 августа 2021, 13:40
0
Вроде все правильно сделал, но не заводится:

<div class="about-info">
    {set $rows = $_modx->resource.infoBox | fromJSON}
    {foreach $rows as $row}
        <div class="col-md-12">
            <div class="item">
                {set $childRows = $row.imageBox | fromJSON} - указываю вторую TV верно?
                {foreach $childRows as $chRow}
                    <div class="image-box">
                        <img src="{$chRow.images}" alt="">
                    </div>
                {/foreach}
                <div class="text-box">
                    <div class="text">
                        <span>{$row.title}</span>
                        {$row.text}
                        <a href="{$row.link}">{$row.linktext} <i>🠒</i></a>
                    </div>
                </div>
            </div>
        </div>
    {/foreach}
</div>
Роман
07 августа 2021, 13:29
0
Спасибо, посмотрел пример, но не пойму, что за ерунда, не заводится.
Павел Гвоздь
07 августа 2021, 05:39
0
Задача №1… с помощью js.
Не надёжно…

Задача №2
Вряд ли чем-то помогу, вопрос не касается моего компонента.
Павел Гвоздь
07 августа 2021, 05:38
0
Ничего. Из коробки всё работает, просто ставите сниппет по инструкции.
Тодор
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, 16:08
0
ИЛИ создать свой hook который будет записывать данные с формы в БД в таблицу modx_formit_forms
А что прописать в этом hook?
varanika
06 августа 2021, 15:54
0
Здравствуйте, а есть возможность сделать комбинацию из cityFields и msProductRemains, чтобы привязать остатки к разным складам в разных городах?)
Что-то я пока на этапе планирования не могу склеить в голове как красивее реализовать, да потом еще с 1С -7 связать :)
Тодор
06 августа 2021, 15:42
0
если хочешь добавить поле в отдельное поле то надо внести изменения в хук сохранения формы __CORE_PATH__/components/formit/src/FormIt/Hook/Saveform.php — 183 ряд, в этом случае при обновлении FormiIt изменения перезапишуться. ИЛИ создать свой hook который будет записывать данные с формы в БД в таблицу modx_formit_forms
Василий Наумкин
06 августа 2021, 15:32
+2
В описании сказано, используются jQuery.Form и jQuery.jGrowl.
То есть, ему нужен jQuery.
Можно ли обойтись без него?
Я даже не буду ничего отвечать, и процитирую самого автора:
Самый клоунский комментарий, который вызывает улыбку :)))
Тодор
06 августа 2021, 15:30
0
Все значения из формы записываються в modx_formit_forms в поле values в json формате. Етот код:
$hook->setValue('user_id', $user_id);
Добавляєт елемент в масив values
Игорь
06 августа 2021, 12:10
0
Здравствуйте.
На сайте используется msBonus2, а также некая самописная система промокодов.
Задача №1: Нужно что бы при оформлении заказа использовалось что-то одно — с этим я разобрался: просто при выборе оплаты бонусами, очищаю поле промокода (и наоборот) с помощью js.
Задача №2: Нужно что бы при использовании промокода, бонусы за заказ не начислялись — тут я не знаю что делать. Прошу помочь советом.
Татьяна
06 августа 2021, 01:12
0
в общем да, вы правы, почта нужна.
ибо был магаз и я там не настраивала обратное письмо покупателю, владельцу было важным поле майла оставить необязательным. в итоге что? в итоге народу не нравиться, что по их заказу не приходит подтверждение :)
Татьяна
06 августа 2021, 00:54
0
в INLINE чанках не работают модификаторы(фильтры вывода)
да я уже это поняла)

и спасибо вам, Евгений, Огромное! Вы мне очень, очень помогли)

сделала через else — и все заработало как мне надо. прям душа порадовалась)
Евгений Webinmd
06 августа 2021, 00:39
0
в INLINE чанках не работают модификаторы(фильтры вывода) модх, попробуйте заменить на fenom

{if $_pls['tv.presence'] == 1} Да {/if}
Татьяна
06 августа 2021, 00:36
0
ага, именно там где вы думаете.

к сожалению я поняла уже что есть проблемы с вызовом именно тут. но так и не смогла прокрасться к верному решению.

&tpl=`@INLINE: [[+pagetitle]] купить в Минске
[[+pagetitle]]
[[+tv.dopifaProduct]]

{{+tv.presence}}
{if $tv.presence | match: '1'} да {/if}
{if $tv.presence == «1»} Да {/if}



`

в общем, сия конструкция отрабатывает только первая, показывает единицу. остальные — глухо. хоть и смотрела документацию, все равно не понимаю что я делаю не так.
уже дошло до того что тупо начала перебирать варианты написания, я думала может кавычки какие неправильно написала, или еще что, бывает же что поставишь что-нибудь не то.

вынос в отдельный чанк — не вариант, у меня таких пару страниц и на каждой отдельная фильтрация, поэтому надо так реализовать.
можно попробовать как то написать свою функцию, но не знаю точно, будет ли она работать с тв, и не будет ли вызов моей функции замедлять страницу вывода.

в общем, проблема расцвела буйным цветом) прям обидно, никогда не подумала бы что тут окажется засада.
Евгений Webinmd
05 августа 2021, 21:31
0
очень надеюсь что это в отдельном чанке, а не в INLINE
Andrey
05 августа 2021, 17:55
+2
Госпаде! Спасибо Вам святой Вы человек! Пусть мана небесная сыплется бесконечно! Это реально ускоряет работу сайта, прям глаза открыли :DDD

П.С.
А еще закинул чуть чуть рублс для стимуляции подвигов, а это без сомнений подвиг!