Exibir no perfil do usuário suas respectivas postagens
Planejamento Arquitetural do Sistema
-
View (profile.php):
-
Exibe as postagens do usuário em uma seção específica do perfil.
-
Renderiza cada post com a imagem, data de upload e descrição (se houver).
-
-
Controller (profile-user.php):
-
Recupera as postagens do usuário utilizando o DAO.
-
Passa os dados das postagens para a view.
-
-
DAO (posts-dao.php):
- Executa a query SQL para buscar as postagens do usuário, juntamente com as informações do usuário que fez o post.
Na Prática
Arquivo: view/profile.php
<!-- Seção de Feed de Posts -->
<section class="info-section">
<?php if ($userPosts): ?>
<!-- Itera sobre cada post do usuário -->
<?php foreach ($userPosts as $post): ?>
<div class="feed-photo-container">
<?php if (!empty($post['photo_url'])): ?>
<!-- Exibe a imagem do post -->
<img
src="<?= BASE_URL . 'uploads/feed/' . htmlspecialchars($post['photo_url']) ?>"
alt="Imagem do post"
class="feed-image"
/>
<?php endif; ?>
<!-- Exibe a descrição do post (se houver) -->
<?php if (!empty($post['description'])): ?>
<p class="post-description">
<?= htmlspecialchars($post['description']) ?>
</p>
<?php endif; ?>
<!-- Exibe a data de upload do post -->
<p class="post-date">
Postado em:
<?= date('d/m/Y H:i', strtotime($post['upload_date'])) ?>
</p>
</div>
<?php endforeach; ?>
<?php else: ?>
<!-- Mensagem caso o usuário não tenha postagens -->
<p>Nenhuma postagem encontrada.</p>
<?php endif; ?>
</section>
-
Responsabilidade:
-
Exibe as postagens do usuário em uma seção específica do perfil.
-
Itera sobre a lista de postagens ($userPosts) e renderiza cada post com:
-
Imagem do post.
-
Descrição do post (se houver).
-
Data de upload do post.
-
-
-
Se não houver postagens, exibe uma mensagem informando que não há postagens.
Arquivo: src/controllers/users/profile-user.php
<?php
// ... (código anterior para buscar informações do perfil)
$postsDao = new PostsDao();
$userPosts = $postsDao->getPostsById($user_id);
$userProfileData = [
// ... (outros dados do perfil)
'photos' => $userPosts, // Passa as postagens para a view
];
?>
-
Responsabilidade:
-
Após buscar as informações do perfil, o controller utiliza o PostsDao para buscar as postagens do usuário.
-
Passa os dados das postagens para a view.
-
Arquivo: src/dao/posts-dao.php
public function getPostsById($userId) {
$sql = "SELECT p.id, p.photo_url, p.upload_date, p.description, u.username, u.profile_pic_url
FROM posts p
JOIN users u ON p.user_id = u.id
WHERE p.user_id = :userId
ORDER BY p.upload_date DESC";
$stmt = $this->db->prepare($sql);
$stmt->execute([':userId' => $userId]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
-
Responsabilidade:
-
Executa uma query SQL para buscar as postagens do usuário, juntamente com as informações do usuário que fez o post.
-
Ordena os posts pela data de upload (do mais recente para o mais antigo).
-
Retorna um array associativo com os dados dos posts.
-
Fluxo Completo
-
O usuário acessa a página de perfil (
profile.php
). -
O controller (
profile-user.php
) é chamado para recuperar os dados do perfil e as postagens do usuário.
3.O controller utiliza o PostsDao
para buscar as postagens do usuário.
-
Os dados das postagens são passados para a view (
profile.php
). -
A view renderiza as postagens do usuário em uma seção específica do perfil.