JAMES WEB
Aprenda como se faz.
CRUD Categorias (Listar)
Assim como gerenciamos os dados dos nossos usuários, precisaremos criar, consultar, modificar e remover as categorias do sistema.
O que são categorias e como funcionam?
As categorias servem para organizar e classificar o conteúdo do nosso sistema. Por exemplo, em um Ecommerce, podemos ter categorias como “Eletronicos”, “Livros” e “Smartphones”.

Arquivos para download
Para implementar as funcionalidades da administração de categorias, disponibilizamos os seguintes arquivos para download:
- HTML:
Os arquivos HTML deverão ser baixados e incluídos na pasta views > admin.
Criando arquivo admin.categories.php
Para acessar a tela de categorias, iremos criar um novo arquivo chamado admin-categories.php na raiz de nosso projeto na pasta “htdocs > ecommerce”. Neste arquivo criaremos nossa primeira rota “Listar Cat egorias.
PHP: admin-categories.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php use \Hcode\Page; use \Hcode\PageAdmin; use \Hcode\Model\User; use \Hcode\Model\Category; //Rota Listar Categorias (/admin/categories) $app ->get( '/admin/categories' , function () { User::verifyLogin(); $categories = Category::listAll(); $page = new PageAdmin(); $page ->setTpl( "categories" , [ 'categories' => $categories ]); }); ?> |
Veja como funciona:
- L3 – use \Hcode\Page;:
Esta linha importa a classe Page do namespace Hcode. Isso permite que você use a classe Page sem precisar prefixar seu nome com o namespace. - L4 – use \Hcode\PageAdmin;:
Esta linha importa a classe PageAdmin do namespace Hcode. - L5 – use \Hcode\Model\User;:
Esta linha importa a classe User do namespace Hcode\Model. - L6 – use \Hcode\Model\Category;:
Esta linha importa a classe Category do namespace Hcode\Model. - L9 – $app->get(‘/admin/categories’, function() {
- $app:
Representa uma instância do aplicativo ou framework utilizado. - ->get():
Este método é usado para definir uma rota que responde a requisições HTTP do tipo GET. - ‘/admin/categories’, function() {
É o caminho (URI) que dispara a execução desta função. Ou seja, quando um usuário acessa a URL /admin/categories no seu navegador, o código dentro da função será executado.
- $app:
- L10 – User::verifyLogin();:
User: é a classe que representa um usuário do sistema, e verifyLogin(): é o método estático desta classe que verifica se o usuário está autenticado. Se o usuário não estiver logado, será redirecionado para uma página de login ou exibida uma mensagem de erro. - L11 – $categories = Category::listAll();:
Category: é uma classe que representando uma categoria e listAll(): é um método estático desta classe que retorna uma lista de todas as categorias existentes no sistema. O resultado desta consulta é armazenado na variável $categories. - L12 – $page = new PageAdmin();:
Cria uma nova instância da classe pageAdmin, que será utilizada para renderizar a página administrativa. - L13 a 15 – $page->setTpl(“categories”, …):
setTpl(): é um método da classe PageAdmin que define o template (modelo) que será utilizado para renderizar a página. Onde “categories”: É o nome do template, indicando que será utilizado um template específico para a lista de categorias. E [‘categories’ => $categories]: é um array associativo que contém os dados que serão passados para o template. Nesse caso, estamos passando a lista de categorias para que o template possa exibí-la.
Não se esqueça que temos de incorporar este arquivo no index.php, com a linha como o exemplo a seguir:
require_once(“admin-categories.php”);
Classe Category
Na linha 6 citamos o uso da Classe Category, assim como fazemos uso do método “listAll” chamado na linha 11. Portanto para que o código funcione temos de criar esta classe dentro de Hcode/Model.
Para isto, crie dentro da pasta vendor > hcodebr > php-classes > src > model o arquivo Category.php que irá conter o método listAll ligado à esta classe.
PHP: Category.php > inserindo a função listAll
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php namespace Hcode\Model; use \Hcode\DB\Sql; use \Hcode\Model; use Hcode\Model\Database; class Category extends Model { public static function listAll() { $sql = new Sql(); return = $sql ->select("SELECT * FROM tb_categories ORDER BY descategory"); } } ?> |
Explicando linha por linha:
- L3 – namespace Hcode\Model;
Define o namespace da classe Category. O namespace é utilizado para organizar o código e evitar conflitos de nomes entre classes. - L3, L4 e L5 – Estas linhas importa as classes Sql, Model e Database do namespace Hcode. A classe Sql é utilizada para interagir com o banco de dados, a classe Model é uma classe base para outras classes de modelo e a classe Database fornece métodos para conectar ao banco de dados.
- L8 – class Category extends Model {
Esta linha define a classe Category que estende a classe Model. Isso significa que a classe Category herda os métodos e propriedades da classe Model. - L9 a 14 – public static function lstAll() { …
Este método estático lstAll() é definido dentro da classe Category. Ele é responsável por retornar uma lista de todas as categorias do banco de dados.- $sql = new Sql();:
Cria um novo objeto da classe Sql para interagir com o banco de dados. - return = $sql->select(“SELECT * FROM tb_categories ORDER BY descategory”);:
Executa uma consulta SQL para selecionar todos os registros da tabela tb_categories e ordená-los pelo campo descategory. O resultado da consulta é retornado.
- $sql = new Sql();:
Formulário Lista Categorias
Para exibir o formulário “Lista de Categortias” temos de editar o link “categoria” na página administrativa . Para isto acesse o arquivo header.html em views/admin e edite a linha:
<a href=”#”><i class=”fa fa-link”></i> <span> Another Link </span> </a>
Altere para:
<a href=”/admin/categories”><i class=”fa fa-link”></i> <span>Categorias </span> </a>
Ao clicar no link “Categorias” na página administrativa, iremos acessar a “Lista de Categorias”. Provavelmente estará vazia pois não criamos nenhum registro.

Editando arquivo categories.html
Você já deve ter baixado os templates das categorias e salvado na pasta views > admin. No entanto precissamos editar algumas linhas para acessar a listagem de categorias e assim poder além disto, cadastrar, editar e deletar estes dados. Então, acesse o arquivo categories.html e edite as linhas entre as tags tbody conforme o exemplo abiaxo:
HTML: categories.html > configurando campos e links
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <div class = "content-wrapper" > <!-- ... Inicio código html --> <tbody> {loop= "$categories" } <tr> <td>{ $value .idcategory}</td> <td>{ $value .descategory}</td> <td> <a href= "/ecommerce/admin/categories_get/{$value.idcategory}" class = "btn btn-primary btn-xs" ><i class = "fa fa-edit" ></i> Editar</a> <a href= "/ecommerce/admin/categories_delete/{$value.idcategory}" " onclick=" return confirm( 'Deseja realmente excluir este registro?' ) " class=" btn btn-danger btn-xs "><i class=" fa fa-trash"></i> Excluir</a> </td> </tr> {/loop} </tbody> <!-- /.... Restante do código --> </div> <!-- /.content-wrapper --> |
Explicando linha por linha o trecho do código categories.html
- L4 – <tbody>:
Abre o corpo da tabela. É dentro do corpo que são inseridas as linhas de dados. - L5 – {loop=”$categories”}:
Esta linha inicia um loop de repetição, percorrendo cada item do array $categories. A variável $value será utilizada para acessar os dados de cada categoria dentro do loop. - L6 – <tr>:
Abre uma nova linha da tabela para cada categoria. - L7 – <td>{$value.idcategory}</td>
- <td>:
Abre uma célula de dados dentro da linha. - {$value.idcategory}:
Exibe o valor do campo idcategory da categoria atual. A sintaxe {$value.idcategory} é utilizada para acessar propriedades do objeto $value dentro do template.
- <td>:
- L8 – <td>{$value.descategory}</td>
- <td>:
Abre outra célula de dados. - {$value.descategory}:
Exibe o valor do campo descategory da categoria atual.
- <td>:
- L10 – <a href=”/ecommerce/admin/categories_get/{$value.idcategory}”>…:
Cria um link (âncora) para editar a categoria. O atributo href contém a URL que será carregada quando o botão ” Editar” for clicado, incluindo o idcategory da categoria atual. - L12 – <a href=”/ecommerce/admin/categories_delete/{$value.idcategory}”>…:
Cria um link para excluir a categoria. O atributo onclick contém uma função JavaScript que exibe uma caixa de confirmação antes de realizar a exclusão. - L16 – </tr>:
Fecha a linha da tabela. - L17 – {/loop}:
Fecha o loop de repetição.
**<i class=”fa fa-edit”></i> e <i class=”fa fa-trash”></i> são ícones utilizados para representar as ações de “Editar” e “Excluir”, respectivamente.