Antes de criar a funcionalidade de produtos e categorias, vamos pensar sobre as informações que nossos clientes e administradores de sites precisarão. Precisamos fornecer informações suficientes sobre o produto, devemos exibir o nome do produto, descrição detalhada do produto, preço do produto. Também podemos fazer upload de uma foto do produto, bem como imagens adicionais. Pode ser necessário o peso do produto para calcular o custo de envio. A quantidade de produtos em estoque para não vender um produto que não temos. O administrador do site precisará de um ID de produto, bem como uma URL legível para mecanismos de pesquisa.
No final, devemos ter pelo menos estes campos:
| Dados |
Descrição |
| ID |
Número do produto para uso interno do site |
| Name |
Nome do produto |
| ЧПУ |
Necessário principalmente para mecanismos de pesquisa |
| Description |
Informações detalhadas sobre o produto |
| SKU |
Número do artigo do produto para usuários do site |
| Price |
Preço do produto |
| Stock |
Quantidade de produtos no site |
| Primary image |
Imagem principal |
| Additional images |
Imagens adicionais |
Nos artigos seguintes, expandiremos essa lista, mas por enquanto, isso é o suficiente.
As categorias de produtos têm sua própria lista de campos:
| Dados |
Descrição |
| ID |
Número da categoria para uso interno do site |
| Name |
Nome da categoria |
| Description |
Descrição da categoria |
| ЧПУ |
URL legível para mecanismos de pesquisa |
Poderíamos continuar e implementar a estrutura de dados e funcionalidades para exibir produtos e categorias usando nosso framework, porém, se fôssemos fazer isso agora, perderíamos muito da possível flexibilidade. A maioria do conteúdo exibe muitas informações comuns. Se encontrarmos essas informações comuns e criarmos um tipo de conteúdo abstrato, nosso framework será mais flexível. Poderíamos usar diferentes funcionalidades para esses tipos de material sem duplicar código. Essas funcionalidades poderiam ser:
- Controle de versão de conteúdo
- Controle de acesso
- Comentários em conteúdo, páginas, produtos
- Avaliações de páginas, produtos
Páginas
As páginas serão seções estáticas comuns de nosso site: Contatos, informações sobre entrega e pagamento, etc. Os dados dessas páginas são apresentados na seguinte tabela:
| Dados |
Descrição |
| Nome |
Nome da página |
| ЧПУ |
URL da página |
| ID |
Número interno da página |
| Heading |
Conteúdo da tag h1 |
| Title |
Conteúdo da tag <title> |
| Content |
Conteúdo da página |
| Keywords |
Conteúdo da meta tag de palavras-chave |
| Description |
Conteúdo da meta tag de descrição |
Content
As páginas são o tipo principal de conteúdo que expandiremos quando precisarmos armazenar mais campos. As páginas de categorias são essencialmente as mesmas páginas, apenas com mais campos para conexão com produtos.
| Dados |
Descrição |
| ID |
Número para uso interno |
| Name |
Nome do conteúdo |
| ЧПУ |
|
| Content |
Conteúdo da página de conteúdo |
| Type |
Tipo de conteúdo (por exemplo, página, produto, categoria) |
| Order |
Ordenação de conteúdo, por exemplo, para itens em um menu |
| Parent |
Pai do conteúdo, necessário para hierarquia, por exemplo, para subcategorias ou catálogo de páginas |
| Meta keywords |
Palavras-chave |
| Meta description |
Meta descrição |
| Date created |
Data de criação |
| Creator |
Autor do conteúdo |
| Active |
Mostrar conteúdo aos visitantes ou não |
| Secure |
Campo para controle de acesso, por exemplo, visualização apenas para usuários registrados |
Revisões
No Drupal existe um sistema de revisão, nós também teremos nosso próprio sistema semelhante.
| Dados |
Descrição |
| ID |
Número interno do conteúdo |
| Current revision |
Número de revisão atual |
Agora que planejamos nossos tipos de material, vamos começar a criar nosso banco de dados. Para cada tipo, criaremos uma tabela separada. Como resultado, devemos ter as seguintes tabelas:
| Tabela |
Descrição |
| Content |
Para armazenar conexões de versões ativas de conteúdo com informações que não mudam para diferentes versões, por exemplo, autor do conteúdo. |
| Versions |
Para armazenar dados de uma versão separada de conteúdo |
| Content types |
Registramos os tipos de material de nosso framework, relacionamos o conteúdo ao tipo de material. |
| Products |
Expandindo dados sobre produtos |
| Revision history |
Salvamos o histórico de nossas revisões |
Content
Todo o conteúdo do site será armazenado nesta tabela. Se quisermos expandir um tipo de material, o faremos em uma tabela separada. Por exemplo, teremos produtos, eles serão armazenados na tabela Content, mas também estarão conectados à tabela Products por ID.
| Campo |
Tipo |
Descrição |
| ID |
Integer (auto increment) |
Campo para conexão com outras tabelas |
| Current_revision |
Integer |
Campo para conexão com a tabela de versões |
| Active |
Boolean |
Mostra se o conteúdo foi publicado ou não |
| Secure |
Boolean |
Conteúdo disponível apenas para usuários autorizados ou não |
| Parent |
Integer |
Conexão com conteúdo pai |
| Order |
Integer |
Campo para ordenação de conteúdo |
| Author |
Integer |
ID do usuário que criou o conteúdo |
| Type |
Integer |
ID do tipo de conteúdo para expandir dados de conteúdo |
| Path |
Varchar |
Campo para armazenar URL legível |
Agora podemos executar consultas no banco de dados e criar a tabela Content:
CREATE TABLE `content` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`current_revision` int(11) NOT NULL,
`active` tinyint(1) NOT NULL,
`secure` tinyint(1) NOT NULL,
`parent` int(11) NOT NULL,
`order` int(11) NOT NULL,
`author` int(11) NOT NULL,
`type` int(11) NOT NULL,
`path` char(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;