JAMES WEB

Aprenda como se faz.


Sumário

CRUD Categorias (Editar)

Agora vamos editar uma categoria. Para isto vamos fazê-lo com os mesmos procedimentos que usamos com os usuários. Primeiro verifique o link no template categories.html no botão “Editar” se está conforme o modelo a seguir:

<a href=”/ecommerce/admin/categories_get/{$value.idcategory}” class=”btn btn-primary btn-xs”><i class=”fa fa-edit”></i> Editar</a>

Esse código é uma forma eficiente de gerar links dinâmicos para editar categorias em um painel administrativo de e-commerce. Ele usa o PHP para inserir o ID da categoria na URL, garantindo que o usuário seja direcionado para a página de edição correta.

categoria-editar

Veja o que este código faz com o botão “Editar”:

  • <a href=”/ecommerce/admin/categories_get/{$value.idcategory}” class=”btn btn-primary btn-xs”>:
    Essa é a base do nosso link. A tag <a> define um hiperlink, o “href” especifica o destino do link, e o “class” define estilos visuais usando o Bootstrap.
  • /ecommerce/admin/categories_get/{$value.idcategory}:
    Aqui está o coração da questão. Essa é a URL que o link aponta.
    • /ecommerce/admin/categories_get/:
      Essa é a parte fixa da URL, indicando que estamos acessando uma função para obter dados de uma categoria no painel administrativo do ecommerce.
    • {$value.idcategory}:
      Essa é a parte dinâmica. O PHP está inserindo o ID da categoria específica aqui. O “$value” representa um objeto ou array que contém os dados da categoria, e “idcategory” é a propriedade que armazena o ID.
  • <i class=”fa fa-edit”></i> Editar:
    Essa é a parte visual do link.
    • <i class=”fa fa-edit”></i>:
      Isso insere um ícone de edição usando a biblioteca Font Awesome.
    • Editar:
      Esse é o texto que acompanha o ícone, informando ao usuário que o link serve para editar a categoria.

Rota Página Editar Categoria

Quando um usuário clica no botão “Editar” em uma categoria, o navegador faz uma requisição para a URL gerada, que contém o ID da categoria. O código PHP captura esse ID, busca os dados da categoria no banco de dados e os envia para o template “categories-update.html“. O template, por sua vez, exibe um formulário com os dados da categoria, permitindo que o usuário os edite.

Acesse o arquivo admin-categories.php e adiciona a “Rota Página Editar Categoria” logo abaixo da “Rota Listar Categorias” conforme o exemplo a seguir:

PHP: admin-categories.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// ... Inicio do código
 
// Rota Página Editar Categoria (categories_get) Botão Editar Template categories-update.html
$app->get('/admin/categories_get/:idcategory'function($idcategory) { 
    User::verifyLogin();                   
    $category = Category::listByIdCategory((int)$idcategory);
    $page new PageAdmin();        
    $page->setTpl("categories-update"array(
            "category"=>$category
    ));
});
 
// ... Resto do código
?>

Veja como o código funciona linha por linha:

  • L5 – $app->get(‘/admin/categories_get/:idcategory’, function($idcategory) { … });:
    Aqui, estamos definindo uma rota no nosso aplicativo. Pense nisso como um endereço na internet. Quando alguém acessa /admin/categories_get/ seguido de um número (o idcategory), essa função é executada.
    • $app->get:
      Indica que estamos lidando com uma requisição do tipo GET, ou seja, o navegador está pedindo informações.
    • /:idcategory:
      É um parâmetro dinâmico. O PHP vai capturar o valor que for colocado ali e armazená-lo na variável $idcategory.
  • L6 – User::verifyLogin();:
    Essa linha é crucial para a segurança. Ela verifica se o usuário está logado no painel administrativo. Sem essa verificação, qualquer um poderia acessar a página de edição de categorias.
  • L7 – $category = Category::listByIdCategory((int)$idcategory);:
    Aqui, estamos buscando os dados da categoria no banco de dados.
    • Category::listByIdCategory():
      É uma função que busca uma categoria pelo ID.
    • (int)$idcategory:
      Garante que o ID seja tratado como um número inteiro, evitando problemas de segurança.
  • L8 – $page = new PageAdmin();:
    Estamos criando um objeto $page da classe PageAdmin. Essa classe é responsável por renderizar as páginas do painel administrativo.
  • L9 – $page->setTpl(“categories-update”, array(“category”=>$category));:
    Essa linha é onde a mágica acontece.
    • setTpl()
      Define qual template HTML será usado para exibir a página de edição (no caso, “categories-update.html“).
    • array(“category”=>$category)
      Array que passa os dados da categoria para o template. Assim, o template pode exibir os dados da categoria no formulário de edição.

Função listByIdCategory(intval($_GET[‘id’]));

A linha category = Category::listByIdCategory((int)$idcategory); da “Rota Página Editar Categoria” Chama a função listByidCategory. Este trecho de código, define uma função estática dentro da classe Category que é responsável por buscar uma categoria específica no banco de dados com base em seu identificador.

Dentro do código “Category.php” insira a função listByidCategory().

PHP: Category.php

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// ... Inicio do código
 
public static function listByIdCategory($idcategory)
    {
        $sql new Sql();
        return $sql->select("SELECT * FROM tb_categories WHERE idcategory = :idcategory", [
            ':idcategory'=>$idcategory
        ]);
    }
 
// ... Resto do código
?>

Vamos lá, pessoal, hora de dissecar esse código PHP e entender como ele busca informações de categorias no banco de dados. Imagine que você precisa buscar os dados de uma categoria específica no banco de dados. Essa função listByIdCategory recebe o ID da categoria como entrada, monta uma consulta SQL para buscar os dados dessa categoria e retorna o resultado da consulta.

  • L4 – public static function listByIdCategory($idcategory):
    Aqui, estamos definindo uma função pública e estática chamada listByIdCategory.
    • Public” significa que essa função pode ser chamada de qualquer lugar do nosso código.
    • static” significa que podemos chamar essa função diretamente da classe Category, sem precisar criar um objeto dela.
    • $idcategory é o parâmetro da função, ou seja, o ID da categoria que queremos buscar.
  • L6 – $sql = new Sql();
    Estamos criando um objeto $sql da classe Sql. Essa classe encapsula a lógica de interação com o banco de dados.
  • L7 – “SELECT * FROM tb_categories WHERE idcategory = :idcategory”
    È a consulta SQL que estamos executando. Ela busca todas as colunas (*) da tabela tb_categories onde o idcategory é igual ao valor passado como parâmetro.
    • [‘:idcategory’=>$idcategory]
      É um array que associa o valor do parâmetro $idcategory ao marcador :idcategory na consulta SQL. Isso é importante para evitar ataques de injeção de SQL.

categories-update.html

Esse código é a estrutura básica de uma página pra editar categorias de produtos em um e-commerce. Ele usa HTML pra organizar os elementos da página, e um sistema de templates (representado por {$value.idcategory} e {loop=”$category”}) pra exibir e processar os dados das categorias. É como se a gente estivesse montando um formulário dinâmico, que se adapta ao número de categorias que a gente tem.

Crie o código “categories-update.html” dentro da pasta “xammp/htdocs/ecommerce/view/admin“.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
  <h1>
    Lista de Categorias
  </h1>
</section>
 
<!-- Main content -->
<section class="content">
 
  <div class="row">
      <div class="col-md-12">
          <div class="box box-primary">
        <div class="box-header with-border">
          <h3 class="box-title">Editar Categoria</h3>
        </div>
        <!-- /.box-header -->
        <!-- form start -->
 
 
 
        {loop="$category"}
        <form role="form" action="/ecommerce/admin/categories_post/{$value.idcategory}" method="post">
          <div class="box-body">
 
             
            <div class="form-group" style="display: none">
              <label for="idcategory">idcategory</label>
              <input type="text" class="form-control" id="idcategory" name="idcategory" placeholder="idcategory" value="{$value.idcategory}">
            </div>
 
 
            <div class="form-group" >
              <label for="idcategory">Categoria</label>
              <input type="text" class="form-control" id="descategory" name="descategory" placeholder="Digite a categoria" value= "{$value.descategory}" >
            </div>
 
          <!-- /.box-body -->
          <div class="box-footer">
            <button type="submit" class="btn btn-primary">Salvar</button>
          </div>
        </form
        {/loop}     
         
      </div>
      </div>
  </div>
 
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
  • L2 – <div class=”content-wrapper”>
    É como o palco onde a mágica acontece. É aqui que a gente organiza todo o conteúdo da página de edição de categorias. Pensem nisso como o espaço principal do nosso painel administrativo.
  • L4 a L7 – <section class=”content-header”> e <h1>Lista de Categorias</h1>
    São tipo o letreiro do nosso palco, dizendo “Ei, aqui a gente mexe nas categorias!”. É importante ter esse título pra gente se orientar, saber onde estamos e o que estamos fazendo.
  • L11 – <section class=”content”>
    É onde a gente entra no coração da edição. É aqui que a gente encontra o formulário pra mudar as categorias.
  • L15 – <div class=”box box-primary”>
    É como uma caixa de ferramentas. Dentro dela, a gente tem o formulário pra editar a categoria.
  • L17 – <h3 class=”box-title”>Editar Categoria</h3>
    É o título dessa caixa de ferramentas, deixando claro que vamos mudar alguma coisa.
  • L24 – {loop=”$category”}
    É uma instrução de um sistema de templates, não HTML puro, e desempenha um papel fundamental na exibição e edição de múltiplas categorias. Ela pega uma variável chamada $category, que contém uma lista de categorias, e itera (ou percorre) por cada item dessa lista. Dentro do loop, a variável $value é criada. Ela representa a categoria atual na iteração. $value contém um array associativo com os detalhes da categoria, como idcategory e descategory.
    • O código HTML dentro do bloco do loop é executado, e as variáveis como {$value.idcategory} e {$value.descategory} são substituídas pelos valores correspondentes da categoria atual. Isso gera um formulário de edição único para cada categoria.

Salvando dados editados da categoria.

Depois de acessados e editados os dados da ctegoria é necessário salvar estes dados no banco de dados. Para isto devemos chamar a rota “$app->post(“/admin/categories/:idcategory”… que deve ser criada dentro do código “admin-categories.php“. Imagine que estamos no painel administrativo do nosso e-commerce, editando uma categoria de produtos. Clicamos no botão “Salvar” no formulário, e é aí que esse código PHP entra em ação. Veja como será a seguir:

Veja o código abaixo:

Rota >$app->post(“/admin/categories/:idcategory”…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// ... Inicio do código
 
// Rota Salvar Edição Categoria (categories_post) Botão Salvar Template categoria-update.html 
$app->post('/admin/categories_post/:idcategory'function($idcategory) { 
    User::verifyLogin();
    $category new Category;                   
    $category->get((int)$idcategory);
    $category->setData($_POST);
    $category->save();
    header("Location: /ecommerce/admin/categories");    
    exit;
});
 
// ... Resto do código
?>
  • L5 – $app->post(‘/admin/categories_post/:idcategory’, function($idcategory) {
    • $app->post():
      Essa linha define uma rota que será acionada quando um formulário for enviado usando o método HTTP POST.
    • /admin/categories_post/:idcategory:
      Essa é a URL da rota. O :idcategory é um parâmetro dinâmico, ou seja, ele pode mudar dependendo da categoria que estamos editando. É como se fosse um identificador único para cada categoria.
    • function($idcategory) { … }:
      Essa é uma função que será executada quando a rota for acionada. O $idcategory é o valor do parâmetro dinâmico que recebemos da URL.
  • L6 – User::verifyLogin();:
    Essa linha verifica se o usuário está logado e tem permissão para editar categorias. É como se fosse um porteiro que só deixa entrar quem tem a senha correta.
  • L7 – $category = new Category;:
    Essa linha cria um novo objeto da classe Category. É como se estivéssemos instanciando um objeto que representa a categoria que vamos editar.
  • L8 – $category->get((int)$idcategory);:
    Essa linha busca os dados da categoria no banco de dados, usando o $idcategory que recebemos da URL. O (int) garante que o $idcategory seja um número inteiro.
  • L9 – $category->setData($_POST);:
    Essa linha pega os dados que o usuário enviou no formulário (usando $_POST) e os atribui ao objeto $category. É como se estivéssemos atualizando os dados da categoria com as informações que o usuário digitou.
  • L10 – $category->save();:
    Essa linha salva as alterações no banco de dados. É como se estivéssemos confirmando as mudanças que o usuário fez.
  • L11 – header(“Location: /ecommerce/admin/categories”);:
    Essa linha redireciona o usuário para a página de listagem de categorias. É como se estivéssemos levando o usuário de volta para a página principal após salvar as alterações.
  • L12 – exit;:
    Essa linha garante que o script PHP pare de ser executado após o redirecionamento.

Ao retornar a página principal do seu Ecommerce na parte de categorias, voc~e perceberá que os dados editados foram atualizados.

Para saber mais…

  • categories_get
  • Tabela – tb_categories
  • verifyLogin()