tkzaum10 Posted September 22, 2014 Share Posted September 22, 2014 Galera, Resolvi fazer um tutorial para modificar o cadastro dos clientes conforme a necessidade. Primeiro o ideal é definir o que se precisa. No Brasil temos a necessidade de alguns campos diferenciados da Europa e EUA devido a nota fiscal e pagamentos dos gateways como PagSeguro e Bcash... Então temos que adicionar alguns campos de códigos em alguns arquivos para que eles possam ser habilitados no front-end e adicionar colunas nos bancos de dados para que eles possam ser armazenados e utilizados conforme a necessidade. Como exemplo vamos criar apenas um campo número para o endereço para que ele seja adicionado separado do resto do endereço. 1º - Passo: Vamos alterar o authentication.tpl -> no endereço /themes/_SEU_TEMA/authentication.tpl Por volta da linha 647: {elseif $field_name eq "address1"} <p class="required text"> <label for="address1">{l s='Address'} <sup>*</sup></label> <input type="text" class="text" name="address1" id="address1" value="{if isset($smarty.post.address1)}{$smarty.post.address1}{/if}" /> </p> Esse é o campo de endereço 1. Vamos adicionar o código a seguir {elseif $field_name eq "address_number"} <p class="required text"> <label for="address_number">{l s='Address_number'}<sup>*</sup></label> <input type="text" class="text" name="address_number" id="address_number" value="{if isset($smarty.post.address_number)}{$smarty.post.address_number}{/if}" / </p> Dependendo do template que estiver sendo utilizado esse valor pode se encontrar em outra linha ou pode até mesmo estar diferente, inclusive pode ser necessário adicionar em outros lugares do documento. É necessária a leitura do código do arquivo .tpl e observar o seu comportamento. 2º - O próximo passo é a alteração no arquivo AuthController.php. Por boas práticas não devemos modificar o Core do Prestashop, mas podemos fazer um override para fazer a alteração necessária. Caso não conheça a utilização de override segue o link: http://doc.prestashop.com/display/PS15/Overriding+default+behaviors O jeito mais fácil é dar override em todo o arquivo assim não terá que se preocupar aonde inserir a codificação. Procure pelo código abaixo: // Preparing customer $customer = new Customer(); $lastnameAddress = Tools::getValue('lastname'); $firstnameAddress = Tools::getValue('firstname'); E adicione essa linha logo abaixo: $addressNumber = Tools::getValue('address_number'); Isso fará a variável $addressNumber armazenar o valor obtido através do 'address_number'. Localize esse código abaixo que se encontra no mesmo arquivo $customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']); if (!Validate::isBirthDate($customer->birthday)) $this->errors[] = Tools::displayError('Invalid date of birth.'); E adicione logo abaixo o código: $customer->addressnumber = $addressNumber; Procure pelo código abaixo ainda no mesmo arquivo: $customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']); if (!Validate::isBirthDate($customer->birthday)) $this->errors[] = Tools::displayError('Invalid date of birth'); E insira novamente o código abaixo: $customer->addressnumber = $addressNumber; Já quase no final do arquivo AuthController.php vamos encontrar um código assim: $this->context->customer = $customer; $this->context->smarty->assign('confirmation', 1); $this->context->cookie->id_customer = (int)$customer->id; Adicione a seguinte linha: $this->context->cookie->customer_addressnumber = $customer -> addressnumber; Ok esse arquivo está pronto agora iremos no próximo arquivo. 3º - Classe Address.php Novamente não é bom modificar os arquivos de Core do prestashop. Então iremos dar novamente um override no arquivo. localize esse código: /** @var string Address first line */ public $address1; e adicione: /** @var int Address number */ public $address_number; No array abaixo : public static $definition = array( 'table' => 'address', 'primary' => 'id_address', 'fields' => array( 'id_customer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false), 'id_manufacturer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false), adicione o campo: 'address_number'=> array('type' => self::TYPE_INT, 'validate' => 'isInt', 'required' => true, 'size' => 10), 4º - Adicione a tradução: Vá no painel administrativo da sua loja > Localização > Traduções > Na guia Modificar traduções selecione : Traduções da Loja, _SEU_TEMA e clique na bandeira do brasil Na janela que foi aberta localize: authentication e expanda. Localize:Address_number e substitua por Número. 5º - Adicionando o campo no formulário: Vá novamente ao painel administrativo de sua loja> Localização > Países. Localize o Brasil e clique em editar. No campo do endereço adicione : address_number Salve. 6º - Adicionar coluna ao banco de dados: O próximo passo é adicionar coluna. Vá no phpMyAdmin e Execute o comando SQL no banco de dados. ALTER TABLE ps_address ADD addressnumber INT(10) NOT NULL AFTER address2 Verifique o passo a passo -> cheque se tudo estiver certo. E não faça essas alterações em um site em produção verifique primeiro em um servidor de teste. E boa sorte, Tk 4 Link to comment Share on other sites More sharing options...
exadra37 Posted September 22, 2014 Share Posted September 22, 2014 Bem vindo á nossa comunidade @tkzaum10 Não experimentei o tutorial, mas parece estar suficientemente detalhado, pelo que mereceu o seu primeiro "Like This" No entanto o tema também pode usar override: cria a pasta override dentro do folder do seu tema . ex: themes/nome-do-seu-tema/override agora coloque aqui o seu ficheiro tpl personalizado, usando o prefixo "layout-". Ex: themes/nome-do-seu-tema/override/layout-authentication.tpl também pode efectuar o override utilizando o hook "DisplayOverrideTemplate", mas o método acima é mais simples. Pode também criar um módulo que facilmente instalará os overrides e procederá á alteração da base de dados. 1 Link to comment Share on other sites More sharing options...
tkzaum10 Posted September 23, 2014 Author Share Posted September 23, 2014 (edited) Bem vindo á nossa comunidade @tkzaum10 Não experimentei o tutorial, mas parece estar suficientemente detalhado, pelo que mereceu o seu primeiro "Like This" No entanto o tema também pode usar override: cria a pasta override dentro do folder do seu tema . ex: themes/nome-do-seu-tema/override agora coloque aqui o seu ficheiro tpl personalizado, usando o prefixo "layout-". Ex: themes/nome-do-seu-tema/override/layout-authentication.tpl também pode efectuar o override utilizando o hook "DisplayOverrideTemplate", mas o método acima é mais simples. Pode também criar um módulo que facilmente instalará os overrides e procederá á alteração da base de dados. Opa obrigado pelos toques, eu segui a documentação do namespace 1.5 mas não tive tempo de ler tudo ainda. Vou tentar olhar esses overrides via layout e no modulo também. Por acaso você sabe se já existe algum módulo com essa funcionalidade exadra? Grato, Tk Edited September 23, 2014 by tkzaum10 (see edit history) Link to comment Share on other sites More sharing options...
tkzaum10 Posted September 28, 2014 Author Share Posted September 28, 2014 Bem vindo á nossa comunidade @tkzaum10 Não experimentei o tutorial, mas parece estar suficientemente detalhado, pelo que mereceu o seu primeiro "Like This" No entanto o tema também pode usar override: cria a pasta override dentro do folder do seu tema . ex: themes/nome-do-seu-tema/override agora coloque aqui o seu ficheiro tpl personalizado, usando o prefixo "layout-". Ex: themes/nome-do-seu-tema/override/layout-authentication.tpl também pode efectuar o override utilizando o hook "DisplayOverrideTemplate", mas o método acima é mais simples. Pode também criar um módulo que facilmente instalará os overrides e procederá á alteração da base de dados. Opa exadra blz? Cara você poderia me tirar uma dúvida? Eu estou com um override no authentication.tpl conforme você tinha comentado pois queria testar o seu método. Mas quando fui checar a página ela havia perdido o link com o arquivo authentication.css poderia me ajudar a linkar os 2 novamente? Grato Tk Link to comment Share on other sites More sharing options...
exadra37 Posted September 28, 2014 Share Posted September 28, 2014 (edited) Primeiro precisa de verificar se authentication.css não está realmente a ser carregado dentor da tag <head></head> . Se estiver eme falta, então o problema dever ser noutro lado. O método que verifica qual o ficheiro do template que deve carregar não está relacionado com os ficheiros css. /** * Returns the layout corresponding to the current page by using the override system * Ex: * On the url: http://localhost/index.php?id_product=1&controller=product, this method will * check if the layout exists in the following files (in that order), and return the first found: * - /themes/default/override/layout-product-1.tpl * - /themes/default/override/layout-product.tpl * - /themes/default/layout.tpl * * @since 1.5 * @return bool|string */ public function getLayout() { $entity = $this->php_self; $id_item = (int)Tools::getValue('id_'.$entity); $layout_dir = $this->getThemeDir(); $layout_override_dir = $this->getOverrideThemeDir(); $layout = false; if ($entity) { if ($id_item > 0 && file_exists($layout_override_dir.'layout-'.$entity.'-'.$id_item.'.tpl')) $layout = $layout_override_dir.'layout-'.$entity.'-'.$id_item.'.tpl'; elseif (file_exists($layout_override_dir.'layout-'.$entity.'.tpl')) $layout = $layout_override_dir.'layout-'.$entity.'.tpl'; } if (!$layout && file_exists($layout_dir.'layout.tpl')) $layout = $layout_dir.'layout.tpl'; return $layout; } Pode verificar em https://github.com/PrestaShop/PrestaShop/blob/1.6/classes/controller/FrontController.php Edited September 29, 2014 by exadra37 Escrevi em InglEs em vez de Português (see edit history) 1 Link to comment Share on other sites More sharing options...
tkzaum10 Posted September 28, 2014 Author Share Posted September 28, 2014 (edited) Primeiro precisa de verificar se authentication.css não está realmente a ser carregado dentor da tag <head></head> . Se estiver eme falta, então o problema dever ser noutro lado. O método que verifica qual o ficheiro do template que deve carregar não está relacionado com os ficheiros css /** * Returns the layout corresponding to the current page by using the override system * Ex: * On the url: http://localhost/index.php?id_product=1&controller=product, this method will * check if the layout exists in the following files (in that order), and return the first found: * - /themes/default/override/layout-product-1.tpl * - /themes/default/override/layout-product.tpl * - /themes/default/layout.tpl * * @since 1.5 * @return bool|string */ public function getLayout() { $entity = $this->php_self; $id_item = (int)Tools::getValue('id_'.$entity); $layout_dir = $this->getThemeDir(); $layout_override_dir = $this->getOverrideThemeDir(); $layout = false; if ($entity) { if ($id_item > 0 && file_exists($layout_override_dir.'layout-'.$entity.'-'.$id_item.'.tpl')) $layout = $layout_override_dir.'layout-'.$entity.'-'.$id_item.'.tpl'; elseif (file_exists($layout_override_dir.'layout-'.$entity.'.tpl')) $layout = $layout_override_dir.'layout-'.$entity.'.tpl'; } if (!$layout && file_exists($layout_dir.'layout.tpl')) $layout = $layout_dir.'layout.tpl'; return $layout; } Pode verificar em https://github.com/PrestaShop/PrestaShop/blob/1.6/classes/controller/FrontController.php Actualmente não está a carregar nada dentro do <head></head>. Eu fiz uma cópia do ficheiro authentication.tpl para layout-authentication.tpl e apenas carrega a página que pode ver na imagem: http://puu.sh/bRUZM/732c5a4453.png No painel de inspecção do browser verifico que nada está a ser carregado: http://puu.sh/bRV3n/90e3afe368.png Talvez tenha entendido algo errado, pelo que deixo aqui a directoria do tema: http://puu.sh/bRVat/b29b804301.png Se me puder ajudar, a sua ajuda será muito apreciada. Edited September 29, 2014 by exadra37 O meu último post foi colocado em Inglês por engano, pelo que a resposta também foi dada em Inglês pelo @tkzaum10 (see edit history) Link to comment Share on other sites More sharing options...
exadra37 Posted September 29, 2014 Share Posted September 29, 2014 Para ser sincero nunca tinha utilizado esta facilidade do Prestashop, apenas sabia que existia no código. Na minha instalação também me acontece o mesmo se colocar um ficheiro tpl na pasta override. Infelizmente estou no meio de um projecto de upgrade de uma loja de 1.3 para 1.6 pelo que não tenho tempo para verificar o porque deste comportamento 1 Link to comment Share on other sites More sharing options...
tkzaum10 Posted September 30, 2014 Author Share Posted September 30, 2014 Para ser sincero nunca tinha utilizado esta facilidade do Prestashop, apenas sabia que existia no código. Na minha instalação também me acontece o mesmo se colocar um ficheiro tpl na pasta override. Infelizmente estou no meio de um projecto de upgrade de uma loja de 1.3 para 1.6 pelo que não tenho tempo para verificar o porque deste comportamento Tudo bem sem problemas já solucionei o problema que eu tinha em minha loja de outra maneira, vou continuar pesquisando pois parece uma forma mais simples de dar override nos .tpl vou ver se o vekia sabe. Obrigado, Tk Link to comment Share on other sites More sharing options...
exadra37 Posted September 30, 2014 Share Posted September 30, 2014 (edited) É um bug no método getLayout() no ficheiro FrontController.php Código corrigido: /** * Returns the layout corresponding to the current page by using the override system * Ex: * On the url: http://localhost/index.php?id_product=1&controller=product, this method will * check if the layout exists in the following files (in that order), and return the first found: * - /themes/default/override/layout-product-1.tpl * - /themes/default/override/layout-product.tpl * - /themes/default/layout.tpl * * @since 1.5 * @return bool|string */ public function getLayout() { $entity = $this->php_self; $id_item = (int)Tools::getValue('id_'.$entity); $layout_dir = $this->getThemeDir(); $layout_override_dir = $this->getOverrideThemeDir(); $layout = false; if ($entity) { if ($id_item > 0 && file_exists($layout_override_dir.'layout-'.$entity.'-'.$id_item.'.tpl')) $this->template = = $layout_override_dir.'layout-'.$entity.'-'.$id_item.'.tpl'; elseif (file_exists($layout_override_dir.'layout-'.$entity.'.tpl')) $this->template = $layout_override_dir.'layout-'.$entity.'.tpl'; } if (!$layout && file_exists($layout_dir.'layout.tpl')) $layout = $layout_dir.'layout.tpl'; return $layout; } Edited September 30, 2014 by exadra37 (see edit history) Link to comment Share on other sites More sharing options...
tkzaum10 Posted October 1, 2014 Author Share Posted October 1, 2014 É um bug no método getLayout() no ficheiro FrontController.php Código corrigido: /** * Returns the layout corresponding to the current page by using the override system * Ex: * On the url: http://localhost/index.php?id_product=1&controller=product, this method will * check if the layout exists in the following files (in that order), and return the first found: * - /themes/default/override/layout-product-1.tpl * - /themes/default/override/layout-product.tpl * - /themes/default/layout.tpl * * @since 1.5 * @return bool|string */ public function getLayout() { $entity = $this->php_self; $id_item = (int)Tools::getValue('id_'.$entity); $layout_dir = $this->getThemeDir(); $layout_override_dir = $this->getOverrideThemeDir(); $layout = false; if ($entity) { if ($id_item > 0 && file_exists($layout_override_dir.'layout-'.$entity.'-'.$id_item.'.tpl')) $this->template = = $layout_override_dir.'layout-'.$entity.'-'.$id_item.'.tpl'; elseif (file_exists($layout_override_dir.'layout-'.$entity.'.tpl')) $this->template = $layout_override_dir.'layout-'.$entity.'.tpl'; } if (!$layout && file_exists($layout_dir.'layout.tpl')) $layout = $layout_dir.'layout.tpl'; return $layout; } Obrigado pela atenção exadra, Vou corrigir o código e verificar se ta tudo certo. Tk Link to comment Share on other sites More sharing options...
budswarez Posted October 7, 2014 Share Posted October 7, 2014 Muito Top o tutorial parabéns, vai ajudar muito. 1 Link to comment Share on other sites More sharing options...
tkzaum10 Posted October 7, 2014 Author Share Posted October 7, 2014 Muito Top o tutorial parabéns, vai ajudar muito. Opa valew espero que funcione para você buds, Aproveite e não esquece de verificar se seu banco de dados esta armazenando os dados que você precisa da maneira correta. Abraço, TK Link to comment Share on other sites More sharing options...
budswarez Posted October 7, 2014 Share Posted October 7, 2014 Opa valew espero que funcione para você buds, Aproveite e não esquece de verificar se seu banco de dados esta armazenando os dados que você precisa da maneira correta. Abraço, TK Estou começando agora com prestashop, ainda aprendendo direito como trabalhar com ele, me batendo no modulo do bcash, pois na última tela fica em branco não apresenta a opção de escolha de cartões após selecionar a plataforma bcash, enquanto não resolvo isso vou vendo mais afundo problemas e tutoriais como o seu que podem me ajudar futuramente. Meu outro maior problema é encontrar um tema decente e o modulo dos correios rs. 1 Link to comment Share on other sites More sharing options...
tkzaum10 Posted October 7, 2014 Author Share Posted October 7, 2014 Estou começando agora com prestashop, ainda aprendendo direito como trabalhar com ele, me batendo no modulo do bcash, pois na última tela fica em branco não apresenta a opção de escolha de cartões após selecionar a plataforma bcash, enquanto não resolvo isso vou vendo mais afundo problemas e tutoriais como o seu que podem me ajudar futuramente. Meu outro maior problema é encontrar um tema decente e o modulo dos correios rs. Bom para cada problema da para resolver de formas diferentes, recomendo que procure em todos os forums inclusive nos que estiverem em outros idiomas pq vc pode usar o tradutor do google e resolver isso rapidamente. Nunca testei o módulo do bcash, no momento uso pagseguro que é bem mais rápido de instalar e fazer funcionar mas o cliente pode requisitar bcash então recomendo que você verifique se o módulo é compatível com o seu tema. O template tem varios gratuitos na internet, mas nunca são exatamente o que você gostaria por que não são custom-made. Eu recomendo que estude os .tpl e como eles funcionam e também de uma olhada em overrides pq eles podem te ajudar bastante na criação de novos templates. Se precisar de ajuda só chamar, TK 1 Link to comment Share on other sites More sharing options...
hrq1 Posted November 16, 2014 Share Posted November 16, 2014 Estou tentando fazer essa adição. pode me ajudar? 1 Link to comment Share on other sites More sharing options...
tkzaum10 Posted November 16, 2014 Author Share Posted November 16, 2014 Estou tentando fazer essa adição. pode me ajudar? Hrq1, Se você seguir esse tutorial vai conseguir fazer no namespace 1.5. Tiveram algumas mudanças no 1.6 e tem alguns tutoriais na net que são especificos para essa versão. Conforme o problema que você teve no módulo sugiro que você utilize um servidor de teste. Não instale ou modifique sua loja principal, eu sou iniciante em prestashop e tenho algum conhecimento em php mas não é minha especialidade. Caso possa te ajudar em algo me avisa mas sugiro que seja mais preciso no que vc esta enfrentando problemas para que eu consiga te auxiliar. TK Link to comment Share on other sites More sharing options...
hrq1 Posted November 17, 2014 Share Posted November 17, 2014 Hrq1, Se você seguir esse tutorial vai conseguir fazer no namespace 1.5. Tiveram algumas mudanças no 1.6 e tem alguns tutoriais na net que são especificos para essa versão. Conforme o problema que você teve no módulo sugiro que você utilize um servidor de teste. Não instale ou modifique sua loja principal, eu sou iniciante em prestashop e tenho algum conhecimento em php mas não é minha especialidade. Caso possa te ajudar em algo me avisa mas sugiro que seja mais preciso no que vc esta enfrentando problemas para que eu consiga te auxiliar. TK Olá! Estou tentando adicionar o campo numero, para quando o cliente digite o endereço, tenha um campo para que especifique o numero de sua casa. Link to comment Share on other sites More sharing options...
tkzaum10 Posted November 17, 2014 Author Share Posted November 17, 2014 Olá! Estou tentando adicionar o campo numero, para quando o cliente digite o endereço, tenha um campo para que especifique o numero de sua casa. entendi, mas em qual parte vc está tendo problemas? Link to comment Share on other sites More sharing options...
MarceloFF Posted February 10, 2015 Share Posted February 10, 2015 Ola a todos!Inicialmente gostaria de agradecer pelo tutorial .... Funcionou 100% para o cadastro mas ainda estou com um problema. Como faço para acrescentar os novos campos no fechamento de compra, onde é feita a seleção de endereço de entrega e endereço de cobrança.Ja tentei uma série de modificações mas nada de aparecer o numero e o complemento.Alguém sabe que arquivo alterar para que as informações apareçam no fechamento de compra?Muito obrigado desde ja Marcelo Link to comment Share on other sites More sharing options...
Daniel - PrestaBR Posted February 17, 2015 Share Posted February 17, 2015 Ola a todos! Inicialmente gostaria de agradecer pelo tutorial .... Funcionou 100% para o cadastro mas ainda estou com um problema. Como faço para acrescentar os novos campos no fechamento de compra, onde é feita a seleção de endereço de entrega e endereço de cobrança. Ja tentei uma série de modificações mas nada de aparecer o numero e o complemento. Alguém sabe que arquivo alterar para que as informações apareçam no fechamento de compra? Muito obrigado desde ja Marcelo Marcelo Se vc adicionou os campos com sucesso, basta configurar o layout do endereço no País (Admin > Localização > Países : Escolher/Alterar o Brasil). Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now