Guia de início rápido do desenvolvedor OpenCart 1.5.X para iniciantes
Este guia foi escrito para desenvolvedores já familiarizados com PHP, OOP e a arquitetura MVC
A seguir, você verá exemplos para o lado do catálogo do carrinho. O lado do administrador é idêntico em função, com exceção das visualizações que são indicadas na seção relevante
Noções básicas sobre bibliotecas
Todas as funcionalidades da biblioteca podem ser acessadas por meio de Controller, Model e Views usando $this->library_name
. Todos eles podem ser encontrados na /system/library/
pasta. Por exemplo, para acessar os produtos do carrinho de compras atual, você precisará usar a Cart
classe, que está em /system/library/cart.php
e pode ser acessada usando$this->cart->getProducts()
Itens comumente usados
customer.php
- Funções relacionadas ao cliente
user.php
- Funções relacionadas ao usuário administrador
cart.php
- Funções relacionadas ao carrinho
config.php
- Todas as configurações são carregadas a partir deste
url.php
- funções de geração de URL
Compreender o parâmetro de rota
A estrutura do OpenCart depende do route=aaa/bbb/ccc
parâmetro da string de consulta para saber o que carregar e é o recurso de base para encontrar os arquivos que você precisa editar para cada página. Na verdade, a maioria das rotas usa apenas o, aaa/bbb
que deve ser visto como duas partes, no entanto, algumas contêm três partes. aaa/bbb/ccc
A primeira parte aaa
geralmente está relacionada à pasta dentro de uma pasta genérica, como as pastas do controlador ou do modelo. A segunda parte geralmente está relacionada ao nome do arquivo, sem a extensão .php
ou relevante .tpl
. A terceira parte é explicada na seção "Compreendendo os controladores" abaixo
Compreender idiomas
Os idiomas são armazenados em uma /catalog/language/
pasta na your-language
subpasta. Dentro dele, os valores de texto gerais usados em várias páginas são armazenados no your-language.php
arquivo dentro da pasta, portanto, para o idioma inglês no catálogo, você encontrará os valores em catalog/language/english/english.php
. Para um texto de página específico, você precisará do route
para a página (geralmente é o caso, mas nem sempre, pois você pode especificar qualquer arquivo de idioma que desejar). Por exemplo, a página de pesquisa tem a rota product/search
e, portanto, o texto específico do idioma para essa página pode ser encontrado em catalog/language/english/product/search.php
(Observe que o nome e a subpasta do arquivo correspondem à rota seguida por .php
.
Para carregar o idioma em um controlador, você usa
$this->language->load('product/search');
Então você pode usar a função de biblioteca de linguagem get
para recuperar textos de linguagem específicos, como
$some_variable = $this->language->get('heading_title');
As variáveis de idioma são atribuídas no arquivo de idioma usando uma variável especial $_
que é uma matriz de chaves e valores de texto. No seu, /catalog/language/english/product/search.php
você deve encontrar algo semelhante a
$_['heading_title'] = 'Search';
Os valores no arquivo de idioma global english/english.php
são carregados automaticamente e disponíveis para uso sem o $this->language->load
método
Compreendendo os controladores
Os controladores são carregados com base no route
e são bastante simples de entender. Os controladores estão localizados na /catalog/controller/
pasta. Continuando com o último exemplo, o controlador para a página de pesquisa está /product/search.php
dentro desta pasta. Observe novamente que a rota seguida por .php
é usada.
Abrindo o arquivo do controlador, você verá um nome de Controller
classe Pascal Case estendendo a classe, chamada ControllerProductSearch
. Novamente, isso é específico da rota, Controller
seguido pelo nome da subpasta e pelo nome do arquivo sem a extensão em maiúsculas. A capitalização não é realmente necessária, mas é recomendada para facilitar a leitura. É importante notar que os nomes das classes não recebem nenhum valor da subpasta e do nome do arquivo, exceto letras e números. Os sublinhados são removidos.
Dentro da classe estão os métodos. Os métodos na classe declarada public
são acessíveis para serem executados através da rota - private
não são. Por padrão, com uma rota padrão de duas partes ( aaa/bbb
acima), um index()
método padrão é chamado. Se a terceira parte de uma rota ( ccc
acima) for usada, este método será executado. Por exemplo, account/return/insert
irá carregar o /catalog/controller/account/return.php
arquivo e a classe e tentar chamar o insert
método
Modelos de compreensão
Os modelos no OpenCart são encontrados na /catalog/model/
pasta e são agrupados com base na função, não na rota e, portanto, você precisará carregá-los em seu controlador via
$this->load->model('xxx/yyy');
Isso carregará o arquivo na subpasta xxx
chamada yyy.php
. Ele fica então disponível para uso por meio do objeto
$this->model_xxx_yyy
e como acontece com os controladores, você só pode chamar seus public
métodos. Por exemplo, para redimensionar uma imagem, você usaria o tool/image
modelo e chamaria seu resize
método da seguinte maneira
$this->load->model('tool/image');
$this->model_tool_image->resize('image.png', 300, 200);
Compreendendo a atribuição de variáveis em visualizações do controlador
Para passar valores do controlador para a visualização, você simplesmente precisa atribuir seus dados à $this->data
variável, que é essencialmente uma matriz de pares chave => valor. Como um exemplo
$this->data['example_var'] = 123;
Acessar isso em uma visão é um pouco fácil de entender se você estiver familiarizado com o método extract () que converte cada chave em uma variável. Portanto, a example_var
chave se torna $example_var
e pode ser acessada como tal na visualização.
Compreender temas
Os temas estão disponíveis apenas para o catálogo e são basicamente uma pasta de modelos, folhas de estilo e imagens de temas. As pastas do tema são colocadas na /catalog/view/theme/
pasta seguida pelo nome do tema. O nome da pasta não é importante com exceção da default
pasta
O lado do administrador usa /admin/view/template/
(pulando o /theme/theme-name/
do caminho, pois não permite temas diferentes)
Os arquivos de modelo residem em uma template
pasta dentro da pasta do tema. Se algum modelo não estiver disponível para o tema selecionado no momento, o modelo da pasta padrão será usado como fallback. Isso significa que os temas podem ser criados com muito poucos arquivos e ainda funcionam totalmente. Também reduz a duplicação de código e problemas à medida que as atualizações são feitas
Compreendendo as visualizações (modelos)
Assim como ocorre com a linguagem e os modelos, os arquivos de visualização geralmente estão relacionados à rota, embora não necessariamente. Os modelos no lado do catálogo geralmente são encontrados em, a /catalog/view/theme/your-theme/template/
menos que não exista; nesse caso, os modelos do tema padrão serão usados. Para nosso exemplo de página de pesquisa acima, o arquivo é product/search.tpl
. Para rotas com três partes, geralmente é in, aaa/bbb_ccc.tpl
embora não haja nenhuma regra definida. No administrador, a maioria das páginas segue isso, com a exceção de que as páginas que listam itens, como a página de lista de produtos, estão em catalog/product_list.tpl
e o formulário de edição de produtos está em catalog/product_form.tpl
. Novamente, eles não são definidos, mas um padrão para o carrinho padrão.
O arquivo de modelo é na verdade apenas outro arquivo php, mas com uma extensão .tpl e é realmente executado no arquivo do controlador, portanto, todas as coisas que você pode codificar em um controlador podem ser executadas em um arquivo de modelo (embora não seja recomendado a menos que seja absolutamente necessário)
Compreendendo o objeto de banco de dados
As consultas são executadas usando
$result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`");
DB_PREFIX
como o nome sugere, é uma constante contendo o prefixo do banco de dados, se houver
$result
retornará um objeto para SELECT
consultas, contendo algumas propriedades
$result->row
contém os dados da primeira linha se um ou mais forem retornados como uma matriz associativa
$result->rows
contém uma matriz de resultados de linha, ideal para repetir usando foreach
$result->num_rows
contém o número de resultados retornados
Existem também alguns métodos extras que o $this->db
objeto possui
$this->db->escape()
usa mysql_real_escape_string () no valor passado
$this->db->countAffected
retorna o número de linhas afetadas por uma UPDATE
consulta e assim por diante
$this->db->getLastId()
retorna o último id de incremento automático usando mysql_insert_id ()
Compreendendo as variáveis reservadas
OpenCart tem predefinidos variáveis para usar no lugar do padrão $_GET
, $_POST
, $_SESSION
, $_COOKIE
, $_FILES
, $_REQUEST
E$_SERVER
$_SESSION
é editado usando $this->session->data
onde os dados são uma matriz associativa que imita o$_SESSION
Todos os outros podem ser acessados usando $this->request
e foram "limpos" para cumprir as aspas mágicas ativadas / desativadas,
$_GET
torna-se $this->request->get
$_POST
torna-se $this->request->post
$_COOKIE
torna-se $this->request->cookie
$_FILES
torna-se $this->request->files
$_REQUEST
torna-se $this->request->request
$_SERVER
torna-se $this->request->server
Resumo
Embora o texto acima não seja um guia à prova de balas para desenvolvedores, espero que sirva como um bom ponto de partida para quem está começando