Как сделать загрузку изображения с фронтенда в tv поле

Всем привет, сделал форму добавления записи с фронтенда, поля название, содержание и tv поле изображение
<form action="[[~[[*id]]]]" method="post" enctype="multipart/form-data">
    <label for="title">Название записи:</label>
    <input type="text" name="title" id="title" required>

    <label for="content">Содержание записи:</label>
    <textarea name="content" id="content" rows="4" required></textarea>

    <label for="img">Загрузите изображение (JPEG, PNG, GIF):</label>
    <input type="file" name="img" id="img" accept="image/jpeg, image/png, image/gif" required>

    <input type="submit" value="Добавить запись">
</form>

[[!AddPost]]
Содержание сниппета
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Получаем данные
    $title = trim($_POST['title']);
    $content = trim($_POST['content']);
    $img = $_POST['img-post'];
    
    // Проверяем и загружаем изображение
    $uploadDir = $modx->getOption('base_path') . 'assets/image/post-img/'; // Папка для загрузки изображений
    if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0755, true);
    }

    $fileTmpImg = $_FILES['img']['tmp_name'];
    $fileMimeTypeImg = mime_content_type($fileTmpImg);
    $allowedImageMimeTypes = ['image/jpeg', 'image/png', 'image/gif'];

    if (in_array($fileMimeTypeImg, $allowedImageMimeTypes)) {
        $fileNameImg = uniqid() . '.' . pathinfo($_FILES['img']['name'], PATHINFO_EXTENSION);
        $fileFullPathImg = $uploadDir . $fileNameImg;

        if (move_uploaded_file($fileTmpImg, $fileFullPathImg)) {
            // Создание нового ресурса в MODX
            $newResource = $modx->newObject('modResource');
            $newResource->fromArray([
                'pagetitle' => $title,
                'content' => $content,
                'template' => 3, // Укажите ID шаблона,
                'published' => 1,
                'createdby' => $modx->user->get('id'),
                // Добавьте необходимые поля
            ], '', true, true);
            
            $newResource->setTVValue('img-post', $fileFullPathImg);

            // Сохранение ресурса
            if ($newResource->save() === false) {
                echo "Ошибка при сохранении записи.";
            } else {
                // Успешно сохранено, выводим изображение
                echo "<h2>Запись добавлена!</h2>";
                echo "<h3>{$title}</h3>";
                echo "<p>{$content}</p>";
                echo "<img src='/assets/image/post-img/{$fileNameImg}' alt='Uploaded Image' />";
            }
        } else {
            echo "Ошибка при загрузке изображения.";
        }
    } else {
        echo "Недопустимый формат изображения. Пожалуйста, загрузите JPEG, PNG или GIF.";
    }
}
Страница создается все поля подтягиваются, кроме tv поля изображение. Как подтянуть изображение, чтобы оно отображалось в админке в tv поле? Можете кидаться камнями по поводу кода, так как недавно познакомился с modx.
Илья
07 марта 2025, 19:21
modx.pro
582
0

Комментарии: 3

Артур Шевченко
07 марта 2025, 19:27
0
Сначала сохрани ресурс потом устанавливай значение ТВ.
    Илья
    09 марта 2025, 14:38
    0
    Большое спасибо, заработало. Но возник вопрос с alias, при создании записи генерируется alias, но он не появляется в поле псевдоним в админке. И еще вывожу страницы pdoPage
    [[!pdoPage?
                                &element=`pdoResources`
                                &showHidden=`1`
                                &parents=`6`
                                &tpl=`myTplChunk`
                                &includeTVs=`img`
                                &limit=`12`
                                &tplPageFirstEmpty=``
                                &tplPageLastEmpty=``
                                &tplPagePrevEmpty=``
                                &tplPageNextEmpty=``
                                &tplPageFirst=``
                                &tplPageLast=``
                                &tplPagePrev=``
                                &tplPageNext=``
                            ]]
    и запись появляется, название, дата все показывается, но ссылка стоит на главный домен, затем если очистить кэш сайта, то появляется правильная ссылка. Может вы в курсе как поправить.
    Код чанка вывода списка страниц
    div class="article-item">
                  <img src="[[+tv.img]]" alt="[[+pagetitle]]">
                  <div class="article-descr">
                    <h3>[[+pagetitle]]</h3>
                    <div class="meta">
                      <p class="author">admin</p>
                      <p class="count-comments"><a href="[[~[[+id]]]]#comments">
                      <span class="icon-fa"><i class="fa fa-comment-o"></i></span>
                      <span class="count-comment">[[!ticketCommentCount:default=`0`? &id=`[[+id]]`]]</span>
                      </a>
                      </p>
                    </div>
                    <a href="[[~[[+id]]]]" class="btn btn-art">Подробнее</a>
                    <div class="date">
                      <span>[[+publishedon:date=`%d`]] [[+publishedon:date=`%b`]]</span>
                    </div>
                 </div>
    </div>
      Илья
      11 марта 2025, 15:00
      0
      Сам разобрался, добавил скрытое поле input для псевдонима и оттуда подтягивал значение в админку, По поводу кэша тоже разобрался, после сохранения и изменения записей сделал кэширование.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3