Como limitar tópicos em um sitema de blog

Galera, estou tentando criar um Blog em PHP, até o momento o que consegui foi criar um MVC para cadastro de usuarios e de postagens. Já consegui tambem exibir os posts na pagina HOME.
Mas tenho uma duvida que está m tirando o sono. Olhando para essa página de notícias vejo que ela exibe 10 notícias na página principal, e a medida que uma nova notícia é inserida, a ultima deixa de ser exibida na pagina principal.
Como se faz para por que isso aconteça ? Outra coisa que notei foi que cada postagem tem uma categoria, e a medida que elas sao inseridas no BD aparecem na pagina conforme sua categoria como por exemplo: ESPORTES, VIOLENCIA, SAUDE etc. Gostaria de saber como se faz isso ?

Alguem pode me ajudar ?

Qual banco de dados você tá usando?
Se for MySQL, essa query seleciona as 10 ultimas linhas da tabela que armazena os posts, em ordem decrescente:

SELECT * FROM TabelaPosts ORDER BY PostID DESC LIMIT 10

No SQL-Server, aparentemente é assim:

SELECT TOP 10 * FROM PostID

Para as categorias você deve usar uma Foreign key. Esse vídeo aqui tem um bom exemplo.

1 curtida

Blza, entendi em partes. Veja bem, os blogs geralmente apresentan suas notícias em quadros o de tem a imagem, o título e a categoria. Acredito que divide-se a tela em colunas com bootstrp e dentro de cada frame um post de uma categoria. Então onde tô me enrolando ? Só tenho uma view chamada verPosts, e no model e no controlador apenas um método leePostPorID. Nesse método eu tenho uma instrução sql, certo? Então me parece que para cada frame eu teria que ter uma instrução sql, sei lá. Isso que não tô entendendo. São vários tópicos numa mesma página, tratando de assuntos diferentes e cada um sendo exibido em um lugar e esse lugar, que seria o quadro, sempre apresenta uma notícia correspondente a uma categoria. A impressão que tenho é que eu teria que fazer um select para cada quadro. Me perdi aqui

Fiquei muito confuso. Por que eu poderia sim fazer SELECT * FROM posts Where :id = id and :categorias = IdCategiria.
Mas isso so me retornaria os posts que tivessem aquela categoria específica. Seria apenas um resultado. Mas e os demais quadros, ? Como eu colocaria os demais posts correspondentes ?

Você tá tentando fazer uma view tipo assim?:

|          Esportes             |            Saúde           | 
| Uma noticia sobre esporte     |  Uma noticia sobre saúde   |
| Outra noticia sobre esporte   |  Outra noticia sobre saúde |

Nesse caso, o quê eu faria é selecionar tudo da tabela dos posts e filtrar as categorias pelo PHP, e então fazer a implementação pra exibir dessa forma ai.

Isso. Tudo na mesma pagina. Aí a pessoa clica numa e vai visualizar aquela que escolheu completa.
Agora vem a pergunta: como fazer ? Como estou iniciando não tenho a mínima noção

Olha, da pra fazer assim:

<?php
    $query = Conexão->prepare('SELECT * FROM posts ORDER BY id DESC LIMIT 10');
    $query->execute();
    $posts = $query->fetchAll();
?>
<section>
    <div id="menu-esportes">
        <?php 
            foreach($posts as $post): 
                if ($post['categoria'] === 'Esporte'):?>
            <a <?php echo "href=\"post?id={$post['id']}\""?>> <!-- O href é a pagina onde o usuário vai ler o post, usamos o param id pra pegar esse post do banco de dados e fazer a view com ele -->
           <?php 
                  echo "<h3>{$post['titulo']}</h3>";
                  echo "<span class=\"preview\">{$post['conteudo']}</span>";
           ?>
            </a>
        <?php
            endif;
            endforeach; 
        ?>
    </div>
    <div id="menu-saude"><!-- A mesma coisa aqui --></div>
</section>

Fiz bem simples só pra vc entender como funciona, dai você faz a organização com table e etc.

Maravilha, vou testar, obrigado. Qualquer coisa incomodo de novo
kkkk

Caro amigo, veja se meu raciocinio está correto, por favor. Crio as divs identificadas com as categorias esporte, notícias, educação etc. Blza ? No meu Model eu crio, por exemplo, a função lerPostsPorCategoria. Blza? Na minha View ver, em cada div assim identificada eu faço esse Foreach que voce mostrou ai. No caso de uma divi dividida em 4 colunas e duas linhas, para mostrar 4 posts da mesma categoria eu coloco o SELECT limitando o numero de 4.
O que voce acha ? É por ai ???

Sim, isso mesmo.

Amigo, estou tentando fazer algo aqui mas não tá dando certo.
Veja, no meu Usuario Controller eu tenho a seguinte instrução:

$admin = $this ->UsuarioModel -> lerAdmin()

$dados = [
‘Admin’ -> $admin
]

No Model Usuarios eu tenho o metodo LerAdmin :

$this->db->query(“SELECT * FROM usuarios WHERE level = 3”);

    return $this->db->resultado(); 

Tambem tenho o metodo LerUsuarioPorId($id) :

$this->db->query(“SELECT * FROM usuarios WHERE id = :id”);

$this->db->bind('id', $id);
return $this->db->resultado();

No meu Helpers / Sessao tenho um método chamado estarLogado():

public static function estaLogado(){

    if (isset($_SESSION['usuario_id'])) :
         return true;
               else:
                   return false;
         endif;

}

No caso dos posts (para editar ou para escrever um novo Post), eu fiz uma verificação de se o Usuario logado era o mesmo criador do Post:

        if ($usuario->id != $_SESSION['usuario_id']) :, blza ?

Agora eu queria verificar se esse Usuario, alem de ser o mesmo que está logado é tambem um usuario Admin.

Como falei, no meu controlador de usuarios a minha variavel $dados recebe = Admin.

o que eu fiz foi o seguinte:

<?php if (SESSAO:: estarLogado() and $_SESSION['usuario_id']) == ($dados['admin'])) : Faça alguma coisa : (Se estiver logado e o id do usuario for de um administrador, aparecerão os botoes de editar e cadastrar novo post, se nao, o meu Cabeçalho sera mostrado sem esses botoes. ?>

Porem, nada está acontecendo.