{"id":127,"date":"2013-07-11T21:39:36","date_gmt":"2013-07-12T00:39:36","guid":{"rendered":"https:\/\/www.brasilnaweb.com.br\/blog\/?p=127"},"modified":"2017-06-09T14:59:04","modified_gmt":"2017-06-09T17:59:04","slug":"manual-opencart-para-desenvolvedores-guia-inicial","status":"publish","type":"post","link":"https:\/\/brasilnaweb.com.br\/blog\/manual-opencart-para-desenvolvedores-guia-inicial\/","title":{"rendered":"Manual OpenCart para Desenvolvedores &#8211; Guia Inicial"},"content":{"rendered":"<p>Ol\u00e1 Pessoal. Este \u00e9 um post bem t\u00e9cnico direcionado para desenvolvedores, logo se voc\u00ea \u00e9 um Lojista que utiliza <strong>OpenCart<\/strong>, n\u00e3o precisa se preocupar com tudo isso. Mas para o mundo dos c\u00f3digos a documenta\u00e7\u00e3o \u00e9 algo muito importante ent\u00e3o estamos compartilhando essa informa\u00e7\u00e3o que pode ajudar muito na hora de resolver problemas ou criar novos m\u00f3dulos para <strong>OpenCart<\/strong>!<\/p>\n<p>&nbsp;<\/p>\n<h3><strong>OpenCart 1.5.x desenvolvedor guia r\u00e1pido para iniciantes na plataforma.<\/strong><\/h3>\n<p>Este guia foi escrito para desenvolvedores j\u00e1 familiarizados com PHP, OOP (orienta\u00e7\u00e3o a objeto) e da arquitetura MVC (Model &#8211; View &#8211; Control).<\/p>\n<p>Esse conte\u00fado \u00e9 voltado para o ambiente da pasta CATALOG. O lado administrativo \u00e9 id\u00eantico em fun\u00e7\u00e3o, com exce\u00e7\u00e3o dos VIEWS que ser\u00e3o informados nas sess\u00f5es relevantes.<\/p>\n<h3><strong>Entendendo as bibliotecas<\/strong><\/h3>\n<p>Todas as funcionalidades da biblioteca s\u00e3o acess\u00edveis atrav\u00e9s do Controller, Model e Views usando<span style=\"color: #333333; background-color: #e5e5e5;\"> $this-&gt;library_name<\/span><strong>.<\/strong> Tudo isso pode ser encontrado no diret\u00f3rio <span style=\"background-color: #e5e5e5;\">\/System\/Library\/<\/span> pasta. Por exemplo, para ter acessar os produtos no carrinho de compras, voc\u00ea vai precisar usar o carrinho de classe, que est\u00e1 em <span style=\"background-color: #e5e5e5;\">\/System\/Library\/cart.php<\/span> e pode ser acessado usando<strong>\u00a0<\/strong><span style=\"background-color: #e5e5e5;\">$this-&gt;cart-&gt;getProducts()<\/span><\/p>\n<h3><strong><br \/>\nItens comumente usados:<\/strong><\/h3>\n<p><strong>customer.php<\/strong> &#8211; Fun\u00e7\u00f5es relacionadas ao cliente<br \/>\n<strong>user.php<\/strong> &#8211; fun\u00e7\u00f5es relacionadas usu\u00e1rio admin<br \/>\n<strong>cart.php<\/strong> &#8211; fun\u00e7\u00f5es relacionadas Carrinho<br \/>\n<strong>config.php<\/strong> &#8211; Todas as configura\u00e7\u00f5es s\u00e3o carregadas a partir deste<br \/>\n<strong>url.php<\/strong> &#8211; fun\u00e7\u00f5es de gera\u00e7\u00e3o de URL<\/p>\n<h3><strong>Entendendo o par\u00e2metro de rota<\/strong><\/h3>\n<p>O FrameWork do OpenCart depende da rota = <span style=\"background-color: #e5e5e5;\">aaa\/bbb\/ccc<\/span>\u00a0no par\u00e2metro de string de consulta para saber o que carregar, e \u00e9 o recurso que encontrar os arquivos que voc\u00ea precisa editar para cada p\u00e1gina. A maioria das rota usa somente o formato <span style=\"color: #000000; background-color: #e5e5e5;\">aaa\/bbb<\/span> que deve ser visto como duas partes, no entanto alguns cont\u00eam tr\u00eas partes <span style=\"background-color: #e5e5e5;\">aaa\/bbb\/ccc<\/span><strong>\u00a0<\/strong> A primeira parte aaa geralmente relacionada com a pasta dentro de uma pasta gen\u00e9rica, como o controlador ou pastas de modelos. A segunda parte geralmente relaciona-se com o nome do arquivo, sem a extens\u00e3o . Php ou extens\u00e3o TPL.. A terceira parte \u00e9 explicado como funciona os Controllers abaixo.<\/p>\n<h3><strong>Entendendo o Languages (idiomas)<\/strong><\/h3>\n<p>Idiomas s\u00e3o armazenados em <span style=\"background-color: #e5e5e5;\">\/catalog\/language\/pasta<\/span> na subpasta do idiomas. Dentro disso, os valores de texto gerais utilizados em v\u00e1rias p\u00e1ginas s\u00e3o armazenadas no arquivo seu-idioma.php dentro da pasta, ent\u00e3o, para a linguagem Ingl\u00eas no lado do cat\u00e1logo, voc\u00ea encontrar\u00e1 os valores em <span style=\"background-color: #e5e5e5;\">catalog\/language\/ English\/english.php<\/span> . Para o texto p\u00e1gina espec\u00edfica, voc\u00ea vai precisar da rota para a p\u00e1gina (Este \u00e9 geralmente o caso, mas n\u00e3o sempre, como voc\u00ea pode especificar qualquer arquivo de Language que voc\u00ea gosta). Por exemplo, a p\u00e1gina de pesquisa tem o produto <span style=\"background-color: #e5e5e5;\">Route\/Search<\/span> e, portanto, o texto linguagem espec\u00edfica para essa p\u00e1gina pode ser encontrada no <span style=\"background-color: #e5e5e5;\">catalog\/language\/English\/product\/search.php<\/span> (Observe o nome do arquivo e subpasta deve coincidir com a rota seguida por. php.<\/p>\n<p>Para carregar o idioma em um controlador, voc\u00ea pode usar<\/p>\n<p><span style=\"background-color: #e5e5e5;\">$this-&gt;language-&gt;load(&#8216;produto\/search&#8217;);<\/span><br \/>\nEnt\u00e3o voc\u00ea pode usar a fun\u00e7\u00e3o de biblioteca de linguagem que come\u00e7a a recuperar textos de linguagem espec\u00edficas, tais como<\/p>\n<p><span style=\"background-color: #e5e5e5;\">$titulo = $this-&gt;language-&gt;get (&#8216;heading_title&#8217;);<\/span><br \/>\nAs vari\u00e1veis \u200b\u200blingu\u00edsticas s\u00e3o atribu\u00eddos no arquivo de idioma usando uma vari\u00e1vel especial <span style=\"background-color: #e5e5e5;\">$_<\/span> que \u00e9 um conjunto de chaves e valores de texto. Em seu <span style=\"background-color: #e5e5e5;\">\/catalog\/language\/english\/product\/search.php<\/span> voc\u00ea deve encontrar algo semelhante ao<\/p>\n<p><span style=\"background-color: #e5e5e5;\">$_ [&#8216;heading_title&#8217;] = &#8216;Pesquisar&#8217;;<\/span><br \/>\nOs valores no arquivo de l\u00edngua global <span style=\"background-color: #e5e5e5;\">english\/english.php<\/span> s\u00e3o automaticamente carregados e dispon\u00edveis para uso sem o <span style=\"background-color: #e5e5e5;\">$this-&gt;language-&gt;load<\/span> metodo.<\/p>\n<h3><strong>Entendendo os Controllers<\/strong><\/h3>\n<p>Os controladores s\u00e3o carregados com base na rota e s\u00e3o bastante simples de entender. Controladores est\u00e3o localizados no diret\u00f3rio <span style=\"background-color: #e5e5e5;\">\/catalog\/controller\/<\/span> pasta. Continuando a partir do \u00faltimo exemplo, o controlador para a p\u00e1gina de pesquisa est\u00e1 em <span style=\"background-color: #e5e5e5;\">\/product\/ search.php<\/span> dentro desta pasta. Observe mais uma vez que a rota seguida por <span style=\"background-color: #e5e5e5;\">.Php<\/span> \u00e9 usado.<\/p>\n<p>Abrindo o arquivo do controlador, voc\u00ea ver\u00e1 um caso classname camelo estendendo a classe <span style=\"background-color: #e5e5e5;\">Controller<\/span>, chamado <span style=\"background-color: #e5e5e5;\">ControllerProductSearch<\/span>. Este novo \u00e9 espec\u00edfico para a rota, com <span style=\"background-color: #e5e5e5;\">Controller<\/span> seguido pelo nome da subpasta e o nome do arquivo sem a extens\u00e3o capitalizados. A capitaliza\u00e7\u00e3o n\u00e3o \u00e9 realmente necess\u00e1rio, mas \u00e9 recomendado para facilitar a legibilidade. \u00c9 interessante notar que classnames n\u00e3o tomar quaisquer valores do nome da subpasta e arquivo diferente de letras e n\u00fameros. Sublinhados s\u00e3o removidos.<\/p>\n<p>Dentro da classe s\u00e3o os m\u00e9todos. M\u00e9todos na classe declarada p\u00fablica s\u00e3o acess\u00edveis a ser executado pela via &#8211; privado n\u00e3o s\u00e3o. Por padr\u00e3o, com um padr\u00e3o de dois rota parte (aaa \/ bbb acima), um m\u00e9todo de \u00edndice de inadimpl\u00eancia () \u00e9 chamado. Se a terceira parte de uma rota (ccc acima) \u00e9 usado, este m\u00e9todo ser\u00e1 executado em seu lugar. Por exemplo, a conta de retorno \/ \/ insert ir\u00e1 carregar o \/ catalog \/ controller \/ account \/ file return.php e classe, e tentar chamar o m\u00e9todo de inser\u00e7\u00e3o<\/p>\n<p><strong>Compreens\u00e3o de modelos<\/strong><\/p>\n<p>Modelo em OpenCart s\u00e3o encontrados no diret\u00f3rio \/ catalog \/ modelo \/ folder e s\u00e3o agrupados de acordo com a fun\u00e7\u00e3o e n\u00e3o a rota e, portanto, voc\u00ea ter\u00e1 que carreg\u00e1-los em seu controlador via<\/p>\n<p>$ This-&gt; load-&gt; model (&#8216;xxx \/ yyy&#8217;);<br \/>\nIsto ir\u00e1 carregar o arquivo no xxx subpasta chamada yyy.php. \u00c9 ent\u00e3o dispon\u00edveis para uso atrav\u00e9s do objeto<\/p>\n<p>$ This-&gt; model_xxx_yyy<br \/>\ne como com os controladores s\u00f3 pode chamar seus m\u00e9todos p\u00fablicos. Por exemplo, para redimensionar uma imagem, voc\u00ea deve usar a ferramenta \/ modelo de imagem e cham\u00e1-lo de m\u00e9todo de redimensionamento da seguinte forma<\/p>\n<p>$ This-&gt; load-&gt; model (&#8216;ferramenta \/ imagem&#8217;);<br \/>\n$ This-&gt; model_tool_image-&gt; resize (&#8216;image.png&#8217;, 300, 200);<br \/>\nCompreender atribui\u00e7\u00e3o de vari\u00e1vel em vistas do controlador<\/p>\n<p>A fim de passar valores para a vista do controlador, basta atribuir os seus dados para o $ this-&gt; dados vari\u00e1veis, que \u00e9 essencialmente um conjunto de pares chave =&gt; valor. Como um exemplo<\/p>\n<p>$ This-&gt; data [&#8216;example_var&#8217;] = 123;<br \/>\nAcessando isso em um ponto de vista \u00e9 um pouco deve ser f\u00e1cil de entender se voc\u00ea est\u00e1 familiarizado com o m\u00e9todo extract () que converte cada tecla em uma vari\u00e1vel. Portanto, a chave torna-se example_var $ example_var e pode ser acessado, como tal, na vis\u00e3o<\/p>\n<p><strong>Temas compreens\u00e3o<\/strong><\/p>\n<p>Temas est\u00e3o dispon\u00edveis apenas para o lado do cat\u00e1logo, e s\u00e3o basicamente uma pasta de modelos, folhas de estilo e imagens do tema. Pastas tem\u00e1ticas s\u00e3o colocados no diret\u00f3rio \/ catalog \/ view \/ theme \/ pasta seguido do nome do tema. O nome da pasta n\u00e3o \u00e9 de import\u00e2ncia com exce\u00e7\u00e3o para a pasta padr\u00e3o<\/p>\n<p>O lado administrador usa \/ admin \/ view \/ template \/ (ignorando o \/ tema \/ theme-name \/ do caminho, uma vez que n\u00e3o permite que diferentes temas)<\/p>\n<p>Os arquivos de modelo residir em uma pasta de modelo dentro da pasta do tema. Se algum modelo n\u00e3o estar dispon\u00edveis para o tema selecionado, modelo da pasta de padr\u00e3o \u00e9 usado em vez como um fallback. Isso significa que os temas podem ser criados com muito poucos arquivos e ainda funcionar plenamente. Ele tamb\u00e9m reduz a duplica\u00e7\u00e3o de c\u00f3digo e quest\u00f5es como as atualiza\u00e7\u00f5es s\u00e3o feitas<\/p>\n<p><strong>Vistas Entendimento (templates)<\/strong><\/p>\n<p>Tal como acontece com linguagem e modelos, do arquivo de exibi\u00e7\u00e3o geralmente est\u00e3o relacionadas \u00e0 rota, que n\u00e3o tem que ser em tudo. Templates no lado do cat\u00e1logo s\u00e3o normalmente encontrados em \/ catalog \/ view \/ theme \/ seu-tema \/ template \/ a n\u00e3o ser que n\u00e3o existe, no caso em que os modelos do tema padr\u00e3o ser\u00e1 usado. Para o nosso exemplo de busca da p\u00e1gina acima, o arquivo \u00e9 um produto \/ search.tpl. Para rotas com tr\u00eas partes, \u00e9 geralmente em aaa \/ bbb_ccc.tpl que n\u00e3o h\u00e1 nenhuma regra set duro. Na administra\u00e7\u00e3o, a maioria das p\u00e1ginas seguem este, com a ressalva de que p\u00e1ginas de an\u00fancio itens, como a p\u00e1gina de listagem de produtos est\u00e3o em catalog \/ product_list.tpl eo produto formul\u00e1rio de edi\u00e7\u00e3o \u00e9 no cat\u00e1logo \/ product_form.tpl. Novamente, estes n\u00e3o est\u00e3o definidos, mas um padr\u00e3o para o carrinho padr\u00e3o<\/p>\n<p>Vale a pena salientar que o arquivo de modelo \u00e9 na verdade apenas mais um arquivo PHP, mas com uma extens\u00e3o TPL. E \u00e9 realmente executado no arquivo controlador, portanto, todas as coisas que voc\u00ea pode codificar em um controlador pode ser executado em um arquivo de modelo ( Embora n\u00e3o seja recomend\u00e1vel, a menos que seja absolutamente necess\u00e1rio)<\/p>\n<p><strong>Compreender o objeto de banco de dados<\/strong><\/p>\n<p>Consultas s\u00e3o executadas usando<\/p>\n<p>$ Result = $ this-&gt; db-&gt; query (&#8220;SELECT * FROM` &#8220;DB_PREFIX&#8221; tabela `&#8221;..);<br \/>\nDB_PREFIX como o nome sugere \u00e9 uma constante que cont\u00e9m o prefixo do banco de dados, se houver<\/p>\n<p>$ Resultado ir\u00e1 retornar um objeto para consultas SELECT, que cont\u00e9m algumas propriedades<\/p>\n<p>$ Result-&gt; linha cont\u00e9m os dados da primeira linha se um ou mais s\u00e3o retornados como uma matriz associativa<\/p>\n<p>$ Result-&gt; linhas cont\u00e9m um conjunto de resultados de linha, ideal para fazer loop para usar foreach<\/p>\n<p>$ Result-&gt; num_rows cont\u00e9m o n\u00famero de resultados retornados<\/p>\n<p>Existem tamb\u00e9m alguns m\u00e9todos extra de $ this-&gt; db objeto tem<\/p>\n<p>$ This-&gt; db-&gt; escape () usa mysql_real_escape_string () sobre o valor passado<\/p>\n<p>$ This-&gt; db-&gt; countAffected retorna o n\u00famero de linhas afetadas por uma consulta UPDATE e assim por diante<\/p>\n<p>$ This-&gt; db-&gt; getLastId () retorna o \u00faltimo ID de auto incremento usando mysql_insert_id ()<\/p>\n<p><strong>Compreender vari\u00e1veis \u200b\u200breservadas<\/strong><\/p>\n<p>OpenCart tem vari\u00e1veis \u200b\u200bpr\u00e9-definidas para usar no lugar do padr\u00e3o de $ _GET, $ _POST, $ _SESSION, $ _COOKIE, $ _FILES, $ _SERVER e $ _SERVER<\/p>\n<p>$ _SESSION \u00c9 editado usando $ this-&gt; Session-&gt; data em que os dados \u00e9 uma matriz associativa imitando o $ _SESSION<\/p>\n<p>Todos os outros podem ser acessados \u200b\u200busando $ this-&gt; pedido e foram &#8220;limpas&#8221; para cumprir com magic quotes ativado \/ desativado, por isso<\/p>\n<p>$ _GET Se torna $ this-&gt; request-&gt; get<\/p>\n<p>$ _POST Se torna $ this-&gt; request-&gt; mensagem<\/p>\n<p>$ _COOKIE Se torna $ this-&gt; request-&gt; Cookie<\/p>\n<p>$ _FILES Se torna $ this-&gt; request-&gt; arquivos<\/p>\n<p>$ _REQUEST Se torna $ this-&gt; request-&gt; pedido<\/p>\n<p>$ _SERVER Se torna $ this-&gt; request-&gt; servidor<br \/>\nEspero que esse breve <strong>Manual da OpenCart<\/strong> tenha sido \u00fatil!<\/p>\n<p>Aparece l\u00e1 pela <a title=\"OpenCart Forum\" href=\"http:\/\/forum.opencart.com\" target=\"_blank\">f\u00f3rum oficial da opencart<\/a> ou pela <a title=\"OpenCart Brasil F\u00f3rum\" href=\"http:\/\/www.opencartbrasil.com.br\/forum\" target=\"_blank\">f\u00f3rum brasileiro<\/a>! Nos vemos l\u00e1! \ud83d\ude42<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 Pessoal. Este \u00e9 um post bem t\u00e9cnico direcionado para desenvolvedores, logo se voc\u00ea \u00e9 um Lojista que utiliza OpenCart, n\u00e3o precisa se preocupar com tudo isso. Mas para o mundo dos c\u00f3digos a documenta\u00e7\u00e3o \u00e9 algo muito importante ent\u00e3o estamos compartilhando essa informa\u00e7\u00e3o que pode ajudar muito na hora de resolver problemas ou criar [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[161,7],"tags":[250,96,249,248],"class_list":["post-127","post","type-post","status-publish","format-standard","hentry","category-opencart-ecommerce-lojistas","category-dicas-do-programador","tag-desenvolvedores","tag-desenvolvimento","tag-guia-opencart","tag-manual-opencart"],"_links":{"self":[{"href":"https:\/\/brasilnaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/brasilnaweb.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brasilnaweb.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brasilnaweb.com.br\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/brasilnaweb.com.br\/blog\/wp-json\/wp\/v2\/comments?post=127"}],"version-history":[{"count":0,"href":"https:\/\/brasilnaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/127\/revisions"}],"wp:attachment":[{"href":"https:\/\/brasilnaweb.com.br\/blog\/wp-json\/wp\/v2\/media?parent=127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brasilnaweb.com.br\/blog\/wp-json\/wp\/v2\/categories?post=127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brasilnaweb.com.br\/blog\/wp-json\/wp\/v2\/tags?post=127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}