JAMES WEB

Aprenda como se faz.


Sumário

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”.

lista-categorias

Arquivos para download

Para implementar as funcionalidades da administração de categorias, disponibilizamos os seguintes arquivos para download:

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.
  • 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.

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.

formulario-lista-categorias

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.
  • L8 – <td>{$value.descategory}</td>
    • <td>:
      Abre outra célula de dados.
    • {$value.descategory}:
      Exibe o valor do campo descategory da categoria atual.
  • 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.