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

Богдан
07 августа 2021, 21:43
0
Хм… Я вас понял.
Артур Шевченко
07 августа 2021, 21:15
+1
А у вас каждый товар выводиться вручную по одному? Или есть какой-то шаблон, в который подставляются данные товара? Если есть шаблон, то что мешает в него микроразметку добавить?
Богдан
07 августа 2021, 21:12
0
А если говорить об интернет-магазине. Тогда ручное заполнение каждого товара потенциально проблематично.
Как он должен выглядеть? Принимать заголовки товаров и прочую нужную уже имеющуюся на сайте информацию, после чего записывать её в микроразметку.
Артур Шевченко
07 августа 2021, 20:20
0
Я думаю надо создать новый источник файлов и дать к нему доступ только нужной вам группе пользователей.
Артур Шевченко
07 августа 2021, 20:10
1
+1
Мне кажется, что нет. Вообще плохо представляю как он должен выглядеть и кому нужен, если можно нагуглить пример и подставить свои значения. Если говорить про Schema.org, то там вообще можно делать так
<script type="application/ld+json">
        {
            "@context": "http://schema.org",
            "@type": "Organization",
            "name": "{$_modx->config.site_name}",
            "logo": "{$_modx->config.site_url}{$_modx->config.logo}",
            "address": {
                "@type": "PostalAddress",
                "addressLocality": "Краснодар, Россия",
                "postalCode": "350000",
                "streetAddress": "Коммунаров, 269"
            },
            "email": "{$_modx->config.email}",
            "telephone": "{$phoneFormatted}",
            "url": "{$_modx->config.site_url}"
        }
    </script>
Andrey Grachov
07 августа 2021, 18:37
0
Можно сохранять настройки вызова AjaxForm в таблицу такой структуры
CREATE TABLE `modx_ajax_form_properties` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `hash` varchar(32) NOT NULL,
  `properties` json NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `hash` (`hash`)
)
В коде AjaxForm меняем логику генерации хеша:
ksort($scriptProperties);
$hash = md5(http_build_query($scriptProperties));
и потом добавляем новую запись в базу если такого хеша еще нет. При обработке запроса AjaxForm берем данные по хешу из базы а не из сессии.
Valdis
07 августа 2021, 15:05
0
да уж, оказалось всё проще -запутался не в меню, а в уровнях ресурсов ))
Баха Волков
07 августа 2021, 14:34
0
спасибо тебе дружище, не первый раз выручаешь.
Пожалуйста

Нужно задонатить тебе ;)
Это всегда можно)
Роман
07 августа 2021, 14:01
0
Фааак! Разобрался!

тут нужно было указывать не TV, а переменную из массива.
{set $childRows = $row.imageBox | fromJSON}
Нужно пойти пол часика погулять ((( а то уже смотрю в книгу, вижу фигу.

@Баха Волков спасибо тебе дружище, не первый раз выручаешь. Нужно задонатить тебе ;)
Баха Волков
07 августа 2021, 13:49
+1
<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.image}" 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: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