TRABALHANDO COM PUBLICAÇÕES NA EXIBIÇÃO DE LIVROS
O diferencial dos livros é a exibição dos mesmos. Você fará uma página para exibir todos os livros, que deverá lista-los juntamente com sua foto e as seguintes informações: titulo, autor, editora e seu preço.
O layout da página poderá ser da seguinte forma:
Dominando o JBuilder X
Autor: Edna Gonçalves Editora: Ciência Moderna
Valor: R$ 76,00
CorelDraw X3
Autor: Zig Ziglar Editora: Campus
Valor: R$ 170,00
Observe que a informações que são mostradas de cada livro não estão na tabela de Livros, como indicada abaixo:
Veja que os nomes da Autor, Editora e Preço não estão presentes na tabela
Livro, logo, como poderá ser feito para que se exiba da forma como está
indicado acima?
Verifique que há uma tabela estratégica Publicação a qual possui todos os relacionamentos entre os dados de uma publicação e as demais tabelas que possuem essas informações:
A tabela possui as chaves para Autor (autor_id), Editora (editora_id) e já consta o preço da
publicação. Além delas consta a chave de Livro (isbn). Ou seja, é através dela que faremos todo o
controle de publicações para serem exibidas e compradas, e não nas tabelas adjacentes, como
Livro ou qualquer outra publicação futura (como Jornal, Artigo, Revista, etc)
A primeira etapa a ser feita, antes de irmos para a exibição, é controlar a tabela de Publicação em caso de ter usado a tabela de Livros para seu CRUD, da seguinte forma:
1. Se cadastrou um livro novo (com o novo isbn), faça a inclusão do mesmo na tabela de publicação. Veja que tem que colocar as chaves do Autor desse livro e sua editora;
2. Se excluir um livro, exclua-o da tabela de Publicação (pelo seu isbn);
3. Se atualizou o valor do livro, precisa atualizar na tabela de
Publicação.
EXIBIR PUBLICAÇÕES
Precisamos criar uma classe modelo que descreva um objeto para Publicação. É comum criarmos a classe com os atributos, de acordo com os dados da tabela de banco de dados. Logo, deveríamos criar um objeto contendo publicação_id, isbn, autor_id e assim por diante.
Porém, não iremos criar dessa forma, pois precisamos da publicação já
com os dados que não tem na tabela e precisamos mostra-los, que é o
nome da editora e do autor, titulo do livro e etc. Portanto, iremos criar
o objeto preparado com essas informações:
Para complementar a classe, crie os métodos get/set.
Classe DAO para Publicação
Essa classe será importantíssima e terá todos os métodos para se capturar as informações nas tabelas via chaves estrangeira presentes na tabela Publicação.
Por exemplo: se desejo pegar o nome da editora pelo id da mesma, farei o seguinte método:
E assim faça para os demais (titulo do livro, nome do autor)
Quando buscarmos todas as Publicações para serem exibidas na página, faremos
analogamente como foi feito com Autores, ou seja, criaremos um vetor dinâmico
cheio de objetos Publicação e enviaremos para a sessão, que será recuperado
pela página de exibição. Para isso, implementaremos o método getPublicacoes
no DAO que fará essa montagem do vetor:
Repare que nesse método criamos um objeto Publicação da classe modelo que criamos. Ao setarmos as informações atributo-a-atributo, veja que pegamos o id da informação que foi consultada na tabela de Publicação e passamos ao método que retorna a sua descrição.
Exemplo, no caso de Editora, para conseguirmos o seu nome, passamos o editora_id (que veio da consulta da tabela de Publicação) para o método getEditora(), que faz a consulta por esse id na tabela Editora e retorna o seu nome. É este nome que é passado ao objeto Publicação.
Em todos os atributos, o objeto Publicação estará completo para ser colocado no vetor e ser exibido na página!
Atribuindo ao objeto
Método que retorna o nome da editora a partir do id
Pega o id da editora da tabela Publicação
Para capturar uma Publicação específica, o processo é o mesmo e
iremos colocar mais esse método no DAO.
No controlador de Publicação
Crie um controlador específico para a Publicação (siga a ideia do
controlador de Autores, na passagem da opção). Vamos colocar a opção =
2 para exibir as publicações.
Página exibirPublicacoes.php
Para exibir as Publicações, habilite a sessão e capture a lista deixada pelo controlador. Depois, iremos varrer a lista (o vetor) para pegar cada Publicação que será exibida.
DETALHE: cada livro será exibido por uma tabela, ou seja, teremos várias tabelas, uma para livro diferente (o que é diferente do que foi feito para Autores).
Layout desejado
Tabela para colocar cada Publicação
rowspan
Para que seja construída uma tabela para cada Publicação, esta deverá estar toda dentro do FOR de percurso da lista de publicações. Logo:
Captura da imagem via
ISBN do Livro
CÓDIGO COMPLETO
<?php
require_once('classes/modeloLivraria.inc');
?>
<HTML>
<HEAD>
<TITLE>Publicações</TITLE>
</HEAD>
<BODY>
<center>
<h1>Publicações cadastrados</h1>
<p>
<div align="right">
<a href="controlers/controlerCarrinho.php?opcao=3">
<img src="../imagens/meu-carrinho.png" border="0">
</a>
</div>
<?php
session_start();
$publicacoes = $_SESSION['publicacoes'];
foreach($publicacoes as $pub) {
?>
<table border="0" width="50%" cellspacing="5">
<tr>
<td rowspan="5" align="center">
<img src="../imagens/book_<?php echo $pub->getIsbn(); ?>.jpg" width="200"
height="200" border="0"></td>
</tr>
<tr align="left">
<td><b><font face="Verdana" size="3">
<?php echo $pub->getTitulo(); ?></font></b></td>
</tr>
<tr>
<td><font face="Verdana" size="3">
<?php echo $pub->getAutor(); ?></font></td>
</tr>
<tr>
<td><font face="Verdana" size="2">
<?php echo $pub->getEditora(); ?></font></td>
</tr>
<tr>
<td><b><font face="Verdana" size="5" color="red">
R$ <?php echo $pub->getPreco(); ?></font></b></td>
<td>
<?php echo "<a href='../controlers/controlerCarrinho.php?opcao=1&id=".$pub-
>getId()."'>
<img src='../imagens/botao_comprar2.png' border='0'></a>" ?></td>
</tr>
</table>
<p>
<hr width="50%">
<p>
<?php } ?>
</center>
</BODY>
</HTML>