Как сделать загрузку изображения с фронтенда в 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. Комментарии: 3
Сначала сохрани ресурс потом устанавливай значение ТВ.
Большое спасибо, заработало. Но возник вопрос с 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>
Сам разобрался, добавил скрытое поле input для псевдонима и оттуда подтягивал значение в админку, По поводу кэша тоже разобрался, после сохранения и изменения записей сделал кэширование.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.