Llevo unas semanas estudiando PHP, y estoy empezando con las clases (objetos), pero estoy teniendo problemas al combinar clases JSON y arrays, pero antes de nada voy a aclararlo:
La página que estoy haciendo simula ser una página de venta de ropa, calzado y complementos de prueba.
El esquema sería algo así:
- Página principal donde se incluyen los enlaces a jquery.js(con librerías jquery), js1.js (que contiene los scripts) y clases.php(donde está la clase para manejar los productos).
En la página hay un "combo" que permite seleccionar la categoría de los productos (calzado, ropa, accesorios), y debajo el listado de productos. - clases.php Donde está la clase, la cual contiene un array con los productos y sus características, así como una función que muestra los productos filtrando por categoría, o en caso de no haber filtro, muestra todos.
- ajax.php Aquí se cogerá la categoría que pasemos por POST desde la página principal, y devolverá el listado de productos en función de la categoría seleccionada en el combo
- js.js scripts, entre los que está en que mediante ajax (Json) mandará a ajax.php la categoría sacada del combo, cuando éste cambie ( .change() )
Ahora pongo como tengo la clase y el array que hay en el:
Código PHP:
class listado_productos{
public function __construct() {
$this -> productos[] = array(1,"Zapato",1);
$this -> productos[] = array(2,"Zapatilla",1);
$this -> productos[] = array(3,"Bota",1);
$this -> productos[] = array(4,"Falda",2);
$this -> productos[] = array(5,"Pantalón",2);
$this -> productos[] = array(6,"Camisa",2);
$this -> productos[] = array(7,"Bolso",3);
$this -> productos[] = array(8,"Pulsera",3);
}
function mostrar($categoria = 0){
$lista = "";
if ($categoria==0){
for($i = 0 ; $i < count($this -> productos[0]) ; $i++){
$lista .= "<li>".$this -> productos[$i][1]."</li>";
}
echo "<ul>".$lista."</ul>";
}
else{
for($i = 0 ; $i < count($this -> productos[0]) ; $i++){
if ($catgegoria == $this -> productos[$i][2]){
$lista .= "<li>".$this -> productos[$i][1]."</li>";
}
}
echo "<ul>".$lista."</ul>";
}
}
}
el problema viene cuando intento hacer el filtro al cambiar de categoría en el combo.
el js.js sería así:
Código PHP:
$(document).ready(function(){
$("#filtro").change(function(){
$.post("ajax.php?lista=filtro",{ categoria:$("#filtro").val()},function(datos){
$("#productos").html(datos));
},"json");
});
});
Código PHP:
include "clases.php";
$vr = $_GET["lista"];
$categoria = $_POST["categoria"];
switch ($vr){
case "filtro":
$filtro = new listado();
$filtrado = $filtro -> mostrar($categoria);
echo json_encode($filtrado);
break;
}
Inlcuso he probado a poner literalmente:
Código PHP:
include "clases.php";
$vr = $_GET["lista"];
$categoria = $_POST["categoria"];
switch ($vr){
case "filtro":
echo json_encode("prueba");
break;
}
En cambio quitando el include si:
Código PHP:
$vr = $_GET["lista"];
$categoria = $_POST["categoria"];
switch ($vr){
case "filtro":
echo json_encode("prueba");
break;
}