Página 1 de 1

Undefined index: product_category - Erro ao tentar fazer $_REQUEST no Controller addproduct.php

Enviado: 22 Jun 2019, 11:08
por João Vitor Dias
Bom dia!

Sou novo em programação e com opencart e não estou muito familiarizado com o site.

Estou criando um combobox de categorias e subcategorias na página addproduct, onde ao selecionar uma categoria, um outro combo é gerado com suas subcategorias.

Para isso criei um script puxando o valor selecionado e irei utilizar no Controller para parametrizar o array do segundo combo (subcategorias).

Entretanto, quando tento realizar um $_REQUEST['product_category'] no Controller, diz que este index é indefinido.

Alguém poderia me ajudar com a comunicação entre view e controller e a fazer este request?

Os códigos são os seguintes:

VIEW

HTML:
Código: Selecionar todos
	  <form method="POST" action="addproduct.php">
		<select name="product-category" id="product-category" size="10" class="form-control" onclick="myFunction()">
			
					<option value="">Escolha a Categoria</option>
			
			<?php foreach($product_categories as $product_category){ ?>
		
					<option value="<?php echo $product_category['category_id'] ?>" ><?php echo $product_category['name'] ?></option>
		
			<?php } ?>

		</select>


		<select name="product-subcategory1" id="product-subcategory1" size="10" class="form-control" onclick="myFunction1()">
		
					<option value="">Escolha a Subcategoria</option>
		
		<?php foreach($product_subcategories1 as $product_subcategory1){ ?>

					<option value="<?php echo $product_subcategory1['category_id'] ?>"><?php echo $product_subcategory1['name'] ?></option>
					
					
				<?php } ?>

		</select>
		</form>
SCRIPT:
Código: Selecionar todos
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
		<script type="text/javascript">
		  google.load("jquery", "1.4.2");
		</script>
		
		<script type="text/javascript">
		$(function(){
			$('#product-category').change(function(){
				if( $(this).val() ) {
					$('#product-subcategory1').hide();
					$.getJSON('addproduct.php?search=',{category_id: $(this).val(), ajax: 'true'}, function(j){
						var options = '<option value="">Escolha Subcategoria</option>';	
						for (var i = 58; i < j.length; i++) {
							options += '<option value="' + j[i].category_id + '">' + j[i].name + '</option>';
						}	
						$('#product-subcategory1').html(options).show();
					});
				} else {
					$('#product-subcategory1').html('<option value="">– Escolha Subcategoria –</option>');
				}
			});
		});
		</script>

CONTROLLER

PHP:
Código: Selecionar todos
@include_once('C:/xampp2/htdocs/alloeetestes/catalog/view/theme/journal2/template/account/customerpartner/addproduct.tpl');
		
		$id_categoria = $_REQUEST['product_category'];
Preciso fazer isso o quanto antes, então se alguém puder ajudar, eu agradeço muito mesmo! :D

Re: Undefined index: product_category - Erro ao tentar fazer $_REQUEST no Controller addproduct.php

Enviado: 22 Jun 2019, 12:06
por Manoel Vidal
Olá @João Vitor Dias.

O primeiro ponto é que seu código está fora do padrão MVC que o OpenCart segue, então você tem que fazer utilizando o MVC, pois fazer include de arquivo tpl dentro do controller já é uma prática extremamente errada, sendo que o correto é no final da função dentro do controller, você chamar o return igual abaixo:
return $this->load->view('pasta/nome_do_arquivo_tpl_sem_a_extensao_tpl', $data);

O segundo ponto é que dentro do OpenCart você não deve utilizar $_REQUEST['nome_do_parametro'] para receber um parâmetro, mas sim $this->request->get['nome_do_parametro'], pois é a maneira mais segura de receber parâmetros, sendo que mesmo assim você deve sanitizar o valor recebido.

O terceiro é que no seu script jQuery você está cometendo 2 (dois) erros, sendo que o primeiro é que você não está utilizando o sistema de rotas do OpenCart para chamar a URL do arquivo controller, e o segundo é que você está enviando um parâmetro denominado "search" e está esperando receber no controller o parâmetro "product_category", ou seja, não vai funcionar.

Um exemplo de script jQuery com Ajax para enviar o parâmetro de dentro do arquivo view seria:
Código: Selecionar todos
$.ajax({
    url: 'index.php?route=pasta/no_do_arquivo_controller/nome_da_funcao&parametro=' + valor_do_parametro,
    type: 'get',
    dataType: 'json',
    cache: false,
    beforeSend: function() {
    },
    complete: function() {
    },
    success: function(json) {
    }
});

Em resumo, você deve antes de qualquer coisa, ter noção de como funciona o modelo de camadas MVC, que não é exclusividade do OpenCart e nem do PHP, para depois que você estiver familiarizado com POO e MVC, você comece a realizar alterações no OpenCart, pois o caminho que você está seguindo de programação gambiarra que é de onde todos nós começamos, não vai lhe levar a lugar nenhum com o OpenCart e só vai lhe trazer frustração. ;)

Espero ter ajudado. :D

Re: Undefined index: product_category - Erro ao tentar fazer $_REQUEST no Controller addproduct.php

Enviado: 22 Jun 2019, 17:40
por João Vitor Dias
Obrigado Manoel, me esclareceu bastante.

Porém, não consegui implementar meu projeto.

Tentei utilizar o código que vc me passou como base, mas não consegui.

Poderia me ajudar com ele?

Código:
Código: Selecionar todos
function myFunction(){

	var product_categid = document.getElementById("product-category").value;

	$.ajax({
		url: 'index.php?route=account/customerpartner/addproduct/myFunction',
		data: { 'product_categid' : product_categid },
		type: 'post',
		dataType: 'json',    
		cache: false,
		success: function(data) {
			alert(data);
		}
	});
}

Re: Undefined index: product_category - Erro ao tentar fazer $_REQUEST no Controller addproduct.php

Enviado: 22 Jun 2019, 17:49
por João Vitor Dias
Ah, tentei tambem fazer este código:
Código: Selecionar todos
function myFunction() {
  var categid = document.getElementById("product-category").value;
  $.post('index.php?route=account/customerpartner/addproduct/teste', { categid: categid });
}