Aleksandr Huz

Aleksandr Huz

Был в сети 04 ноября 2025, 21:25
Заказы принимаю
я вижу только одно отличие, что можно еще добавлять свои произвольные значения на ходу.

но, если
Можно ограничить пользователя только значениями из нашего списка, не давая добавить ничего нового
то тогда нет отличий.
{'!pdoPage' | snippet : [
    'parents' => $_modx->resource.id,
    'limit' => '4',
    'includeTVs' => 'image',
    'tpl' => '@INLINE <li class="news__item">
            <div class="news__img">
                <a href="{$uri}">
                    <img src="{$_pls["tv.image"]}" alt="{$pagetitle}">
                </a>
            </div>
            <div class="news__content">
                <p class="news__date">{$publishedon | dateAgo}</p>
                <a href="{$uri}" class="news__title">
                    {$pagetitle}
                </a>
                <p class="news__desc">
                    {$introtext}
                </p>
                <a href="{$uri}" class="news__about">Читать далее</a>
            </div>
        </li>'
] ?: 'Список пуст'}
Мое решение:
1. В форму вставляем скрытое поле с файлом
<input type="hidden" name="attach_file" value="IMG_1035.JPG" />

2. Удаляем хук email

3. Добавляем свой хук (email_file)
<?php
$pdo = $modx->getService('pdoTools');
$siteName = $modx->getOption('site_name');
$emailsender = $modx->getOption('emailsender');
$emailTo = $modx->getOption('emailTo', $scriptProperties, $emailsender, true);
$fields = $hook->getValues(); 
$message = $pdo->getChunk('email', $fields);
$subject = $modx->getOption('emailSubject', $scriptProperties, $siteName, true);

$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY, $message);
$modx->mail->set(modMail::MAIL_FROM, $emailsender);
$modx->mail->set(modMail::MAIL_FROM_NAME, $siteName);
$modx->mail->set(modMail::MAIL_SUBJECT, $subject);
$modx->mail->address('to', $emailTo);
$modx->mail->address('reply-to', $emailsender);
if(!empty($fields['attach_file'])) {
    $modx->mail->attach($modx->getOption('base_path').$fields['attach_file']);
}
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
  $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
}
$modx->mail->reset();
return true;
Да, вы правы.
Нужно вот так
<?php
/** @var modX $modx */
if($modx->event->name == 'OnDocFormRender') {
        
    // Прячем TV для всех контекстов, кроме web(ru)
    if(!$resource) return; // Выходим, если это новый ресурс
    if($resource->get('context_key') !== 'web') {
        $hideTV = 'MODx.hideTV("tv20");'; // 20 - id tv

        $modx->regClientStartupHTMLBlock("<script>
            Ext.onReady(function(){ 
                $hideTV 
            });
        </script>");
    }
}