Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

Suporte geral sobre problemas técnicos para OpenCart v2.x.
#70630
Bom, eu talvez esteja querendo fazer demais.
Mas vou tentar explicar.

Eu criei 2 campos personalizados no cadastro do usuário, numero e complemento no endereço, pois eu acho necessário.

Até o momento tudo ótimo, consegui fazer esses campos ser exibidos na visualização do pedido, na impressão da fatura, impressão da lista de entrega, ou seja em toda a parte administrativa, está sendo exibido ao administrador os campos de numero e complemento.

O problema é quando o usuário acessa a conta dele ou esta realizando um pedido, o usuário não vê e não tem certeza que preencheu o numero e complemento.

Então eu adicionei no catalog/controller/account/order.tpl
Que faz puxar os campos personalizados ou fields
Código: Selecionar todos
if ($order_info['shipping_address_format']) {
				$format = $order_info['shipping_address_format'];
			} else {
				$format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}, {numero}' . " - " .  '{complemento}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}';
			}

			$find = array(
				'{firstname}',
				'{lastname}',
				'{company}',
				'{address_1}',
				'{numero}',
				'{complemento}',
				'{address_2}',
				'{city}',
				'{postcode}',
				'{zone}',
				'{zone_code}',
				'{country}'
			);
// Buscar os Custom Fields :D
				$this->load->model('account/custom_field'); //aqui puxa o model do catalog/account/custom_field
				
				$custom_fields = $this->model_customer_custom_field->getCustomFields();

				foreach ($custom_fields as $custom_field) {
					if ($custom_field['location'] == 'address') {
						if ($custom_field['type'] == 'text') {
							if($custom_field['name'] == 'Complemento'){							
									$complemento = $order_info['shipping_custom_field'][$custom_field['custom_field_id']];
							}
							elseif($custom_field['name'] == 'Numero'){							
									$numero = $order_info['shipping_custom_field'][$custom_field['custom_field_id']];
							}
						}
					}
				}
			$replace = array(
				'firstname' => $order_info['shipping_firstname'],
				'lastname'  => $order_info['shipping_lastname'],
				'company'   => $order_info['shipping_company'],
				'address_1' => $order_info['shipping_address_1'],
				'numero' 	=> $numero,
				'complemento' => $complemento,
				'address_2' => $order_info['shipping_address_2'],
				'city'      => $order_info['shipping_city'],
				'postcode'  => $order_info['shipping_postcode'],
				'zone'      => $order_info['shipping_zone'],
				'zone_code' => $order_info['shipping_zone_code'],
				'country'   => $order_info['shipping_country']
			);

O Problema é que esse código é usado no model o admin, e no catalog tem que puxar outra maneira os fields criados.
E não estou sabendo como fazer

O erro que está dando.

Notice: Undefined index: custom_field in /home/amobijuterias/www/catalog/controller/account/order.php on line 242Notice: Undefined index: custom_field in /home/amobijuterias/www/catalog/controller/account/order.php on line 239
Fatal error: Call to a member function getCustomFields() on a non-object in /home/amobijuterias/www/catalog/controller/account/order.php on line 289


To perdido se alguém tiver uma dica!!!!
Editado pela última vez por turcorossi em 18 Nov 2016, 14:06, em um total de 1 vez.
#70658
Valdeir, perfeito esse era o ponto 1 do meu problema... testei e funcionou.
Agora é o email que vai ao vendedor e cliente da loja, o email com o pedido ele também vai sem esses campos personalizados.
Sabe me dizer o caminho?
#71046
RaildoRLD

Você deve ter 2 campos personalizados la nos clientes, Personalizar cadastro.

Um campo com nome ( Numero) - "sem acento"
e outro campo com nome ( Complemento )

Após buscar o arquivo admin/controller/sale/order.php

a partir da linha 890 ou procure pelo comentário // payment address

o que estiver aqui substitua por
Código: Selecionar todos
	// Payment Address PAGINA INFORMAÇÕES
			if ($order_info['payment_address_format']) {
				$format = $order_info['payment_address_format'];
			} else {
				$format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}, {numero}' . " - " .  '{complemento}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}';
			}

			$find = array(
				'{firstname}',
				'{lastname}',
				'{company}',
				'{address_1}',
				'{numero}',
				'{complemento}',
				'{address_2}',
				'{city}',
				'{postcode}',
				'{zone}',
				'{zone_code}',
				'{country}'
			);
// teste


				// Buscar os Custom Fields :D
				$this->load->model('customer/custom_field');
				
				$custom_fields = $this->model_customer_custom_field->getCustomFields();

				foreach ($custom_fields as $custom_field) {
					if ($custom_field['location'] == 'address') {
						if ($custom_field['type'] == 'text') {
							if($custom_field['name'] == 'Complemento'){							
									$complemento = $order_info['shipping_custom_field'][$custom_field['custom_field_id']];
							}
							elseif($custom_field['name'] == 'Numero'){							
									$numero = $order_info['shipping_custom_field'][$custom_field['custom_field_id']];
							}
						}
					}
				}
//teste
			$replace = array(
				'firstname' => $order_info['payment_firstname'],
				'lastname'  => $order_info['payment_lastname'],
				'company'   => $order_info['payment_company'],
				'address_1' => $order_info['payment_address_1'],
				'numero'	=> $numero,
				'complemento' => $complemento,
				'address_2' => $order_info['payment_address_2'],
				'city'      => $order_info['payment_city'],
				'postcode'  => $order_info['payment_postcode'],
				'zone'      => $order_info['payment_zone'],
				'zone_code' => $order_info['payment_zone_code'],
				'country'   => $order_info['payment_country']
			);

			$data['payment_address'] = str_replace(array("\r\n", "\r", "\n"), '<br />', preg_replace(array("/\s\s+/", "/\r\r+/", "/\n\n+/"), '<br />', trim(str_replace($find, $replace, $format))));
Depois tem // Shipping Address

O que estiver ali substitua por
Código: Selecionar todos
// Shipping Address PAGINA INFORMAÇÕES
			if ($order_info['shipping_address_format']) {
				$format = $order_info['shipping_address_format'];
			} else {
				$format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}, {numero}' . " - " .  '{complemento}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}';
			}

			$find = array(
				'{firstname}',
				'{lastname}',
				'{company}',
				'{address_1}',
				'{numero}',
				'{complemento}',
				'{address_2}',
				'{city}',
				'{postcode}',
				'{zone}',
				'{zone_code}',
				'{country}'
			);
// teste


				// Buscar os Custom Fields :D
				$this->load->model('customer/custom_field');
				
				$custom_fields = $this->model_customer_custom_field->getCustomFields();

				foreach ($custom_fields as $custom_field) {
					if ($custom_field['location'] == 'address') {
						if ($custom_field['type'] == 'text') {
							if($custom_field['name'] == 'Complemento'){							
									$complemento = $order_info['shipping_custom_field'][$custom_field['custom_field_id']];
							}
							elseif($custom_field['name'] == 'Numero'){							
									$numero = $order_info['shipping_custom_field'][$custom_field['custom_field_id']];
							}
						}
					}
				}
//teste
			$replace = array(
				'firstname' => $order_info['shipping_firstname'],
				'lastname'  => $order_info['shipping_lastname'],
				'company'   => $order_info['shipping_company'],
				'address_1' => $order_info['shipping_address_1'],
				'numero'	=> $numero,
				'complemento' => $complemento,
				'address_2' => $order_info['shipping_address_2'],
				'city'      => $order_info['shipping_city'],
				'postcode'  => $order_info['shipping_postcode'],
				'zone'      => $order_info['shipping_zone'],
				'zone_code' => $order_info['shipping_zone_code'],
				'country'   => $order_info['shipping_country']
			);

			$data['shipping_address'] = str_replace(array("\r\n", "\r", "\n"), '<br />', preg_replace(array("/\s\s+/", "/\r\r+/", "/\n\n+/"), '<br />', trim(str_replace($find, $replace, $format))));
Para mim funcionou
eduardodias gostou disso
#79205
Que legal!

Eu testei os códigos acima no meu OC 2.3.0.2 e funcionou!

Aproveitando, gostaria de saber se alguém sabe me informar como faço para que o número e o complemento apareçam também naquela página imprimível que aparece o número da fatura?

Desde já, obrigado.
#80372
Oi pessoal, muito boa dica, funcionou para mim também!

Aproveitando gostaria de perguntar se vocês sabem como alterar estas mesmas informações para a visualização do cliente, quando ele se loga no site, vai em Minha conta-> Histórico de pedidos -> Informações do pedido e ai fazer aparecer o endereço completo.

Se alguém tiver uma dica será muit bom.

Abs,

Gente preciso de ajuda urgente. Na migraç&a[…]

Caro @reds , muito obrigado pela resposta.

PHP 8+ incompatibilidade

Toda tradução para a versão 3[…]

Ola @alex3257 Se você precisa apenas ver […]