Евгений Webinmd

Евгений Webinmd

Был в сети 31 июля 2026, 13:07
Заказы не принимаю
Вопрос конечно сформулирован мастерски.
Что касается prepareSnippet — то он должен возвращать результат работы в следующем виде
return serialize($row);

Пример сниппета
<?php

if(!$row['publishedon']){
    return serialize($row);
}  


// тут лучше сразу написать обработку даты, но для простоты кода показываю со сторонним сниппетом
$row['dt'] = $modx->runSnippet('dateRu', array(
    'input' => $row['publishedon']
)); 

return serialize($row);

И в итоге в чанке товара уже используется плейсхолдер [[+dt]] {$dt}
Пример добавления значения в поле migx через api modx

<?php
$input = $resource->getTVValue('myMigx');
$res = $modx->fromJSON($input);
$count = count($res);
 
$new = array(
    'MIGX_id'       => $count + 1,
    'name'          => $scriptProperties['fields']['name'],
    'message'       => $scriptProperties['fields']['message'],
    'email'         => $scriptProperties['fields']['email'],
    'date'          => $scriptProperties['fields']['date'],
);
$res[] = $new;
 
if (!$resource->setTVValue('myMigx', $modx->toJson($res))) {
  $modx->log(modX::LOG_LEVEL_ERROR,'There was a problem saving your data!');
  return false;
}
  
return true;
Создаете хук для formit
подключаете в хуке библиотеку
PhpSpreadsheet и дальше уже по примерам из библиотеки.
В этом же хуке указываете ссылку на созданный файл и добавляете её как поле в письмо. Есть примеры в документации для хуков по добавлению своих данных в письма. Где-то видел и как прикрепить файл в письме из хука
ну вот, в sortby вставляйте по какому полю нужна сортировка, потому что у производителей нет поля сортировки, как вариант одно из полей использовать для сортировки.
Например если не используете поле факс, то можно попробовать сортировать по нему
Код ниже не тестировал, но чисто в теории должно работать
Запускать в компоненте console или modalConsole

<?php

$Sendex = $modx->getService('sendex','Sendex',$modx->getOption('sendex_core_path',null,$modx->getOption('core_path').'components/sendex/').'model/sendex/');

if (!($Sendex instanceof Sendex)) return '';

// Указать ID рассылки
$idNewsletter = 1;

$emails = [
	'email@mail.ru',
	'email1@mail.ru',
	'email2@mail.ru',
	'email3@mail.ru',
	..... 
];

foreach ($emails as  $email) {	

	$duble = $modx->getObject('sxSubscriber', array('email' => $email));
 
	if ($duble) { continue; }

	$obj = $modx->newObject('sxSubscriber');    
       $data = array(
        'user_id' => 0,
        'email' => $email,
        'newsletter_id' => $idNewsletter,
    );

    $obj->fromArray($data);
    $obj->save(); 

}