Karpunin Alexey

Karpunin Alexey

Был в сети 29 мая 2026, 18:23
Заказы не принимаю
Баха Волков
Баха Волков
А разве прописав кастомный параметр при вызове FormIt (или AjaxForm) он не попадает прямиком в чанк формы?
Паша, попадёт конечно, отличная реализация, только в заметке речь о чанках писем или я что-то не понял?)
Павел Гвоздь
Павел Гвоздь
немного схитрить используя свойство fieldNames сниппета FormIt
А разве прописав кастомный параметр при вызове FormIt (или AjaxForm) он не попадает прямиком в чанк формы?
Я делаю примерно так:
{'!AjaxForm' | snippet : [
    ...
    'formFields' => [
        'name' => [
            'type' => 'text',
            'label' => '',
            'placeholder' => 'Ваше имя',
            'required' => true,
        ],
        'email' => [
            'type' => 'email',
            'label' => '',
            'placeholder' => 'Ваш email',
        ],
        'phone' => [
            'type' => 'text',
            'label' => '',
            'placeholder' => 'Контактный телефон',
            'required' => true,
        ],
    ],
    ...
]}

И в чанке формы:
{foreach $formFields as $fk => $fv}
    {if $fv['label']?}
        <div class="form__label-w">
            <label class="form__label">
                {$fv['label']}
            </label>
        </div>
    {/if}

    {switch $fv['type']}
        {case 'text'}
            <div class="form__input-w">
                <input class="form__input" type="text" name="{$fk}" placeholder="{$fv['placeholder']}">
            </div>

        {case 'email'}
            <div class="form__input-w">
                <input class="form__input" type="email" name="{$fk}" placeholder="{$fv['placeholder']}">
            </div>

        {case 'textarea'}
            <div class="form__input-w">
                <textarea class="form__input" name="{$fk}" placeholder="{$fv['placeholder']}"></textarea>
            </div>
    {/switch}

    <div class="form__error error_{$fk}"></div>
{/foreach}
Володя
Володя
если у вас актуальная версия компонента msOptionsPrice то вот это лишнее
/* опции модификации, тут вручную собираем нужные характеристики товара(опции) */
    $options = array(
        'color' =>  $color,
        'size' => $size
    );
    $msoptionsprice = $modx->getService('msoptionsprice');
    $msoptionsprice->initialize('web');
    /* создаем опции продукта */
    $options = $msoptionsprice->setProductOptions($rid, $options);
опции будут созданы автоматически при создании модификации
Leo
Leo
рабочий вариант, проверено

<?php
define('MODX_API_MODE', true);
require 'index.php';		// Если файл лежит не в корне - здесь нужно указать верный путь
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');

if (!isset($parents)) {$parents = 0;}		// Можно указать список категорий для поиска товаров
if (!isset($resources)) {$resources = '';}	// Можно указать конкретный список товаров

$pdo = $modx->getService('pdoFetch');
$condition = array('parents' => $parents);
$files = $pdo->getCollection('msProduct',
	array(
		'msProduct.class_key' => 'msProduct',
	),
	array(
		'class' => 'msProduct',
		'parents' => $parents,
		'resources' => $resources,
		'innerJoin' => array(
			'msProductFile' => array(
				'alias' => 'msProductFile',
				'on' => array(
					'msProduct.id = msProductFile.product_id',
					'msProductFile.parent' => 0,
					'msProductFile.type' => 'image',
				)
			)
		),
		'select' => array(
			'msProductFile' => 'all'
		),
		'sortby' => 'msProduct.id'
	)
);

echo '<pre>';
echo $pdo->getTime();
foreach ($files as $row) {
	$file = $modx->newObject('msProductFile');	
	$file->fromArray($row, '', true, true);
	
	$children = $file->getMany('Children');
	foreach ($children as $child) {
		$child->remove();
	}
	$file->generateThumbnails();
	
	// Обновляем thumb и image товара
	if ($product = $file->getOne('Product')) {
		$product->updateProductImage();
	}
}

echo microtime(true) - $modx->startTime;