Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/06/2013, 07:02
Avatar de Delek
Delek
 
Fecha de Ingreso: marzo-2005
Ubicación: Madrid
Mensajes: 75
Antigüedad: 19 años, 1 mes
Puntos: 0
Filtrar datos con objeto criteria

Estoy algo perdido con un modelo que tiene que filtrar los datos según dos menús, uno de categorías y otro de modelos. A ver si me podeis echar una manita

actions.class
Código:
  public function executeShow(sfWebRequest $request)
  {
        //Ordena menú categorías
  	$this->rogasanz_cat_accesorios_list = RogasanzCatAccesoriosPeer::ordenarMenu(); 
  	//Lista menú coches
  	$this->rogasanz_modelos_list = RogasanzModelosPeer::doSelect(new Criteria());
  	//Listado de artículos
   	$this->rogasanz_accesorios_list = RogasanzAccesoriosPeer::doSelect(new Criteria());  	
  	
   	//Recoge categoria y modelo seleccionado
  	$this->categoria = RogasanzCatAccesoriosPeer::retrieveByPk($request->getParameter('id'));
  	$this->modelo = RogasanzModelosPeer::retrieveByPk($request->getParameter('modelo_id'));
  	
    //$this->forward404Unless($this->categoria);
  }
La última línea del forward la he tenido que comentar por que me daba error de ob_start no se porqué.

showsucces.php
Código:
//Recojo las variables
<?php $cat = $categoria->getId() ?>
<?php $mod = $modelo->getId() ?>


//Muestra el menú de categorías
<div id="cabecera">
  <h1><?php echo $categoria->getNombre() ?></h1>
</div>

<div id="marco">
  <div id="menu">
    <?php foreach ($rogasanz_cat_accesorios_list as $i => $menu): ?>
    <ul>
      <li><a href="<?php echo url_for('accesorios/show?id='.$menu->getId()) ?>"><?php echo $menu->getNombre() ?></a></li>
     </ul>
     <?php endforeach; ?>
  </div>
</div>


//Muestra el menú de artículos
<div id="marco">
  <div id="cuerpo_articulos">
  <?php foreach ($rogasanz_accesorios_list as $accesorios): ?>

//Aqui viene la chapuza, solo cojo los articulos que sean igual a la variable del request
  <?php if($accesorios->getCategoriaId() == $cat AND $accesorios->getModeloId() == $mod ) : ?>

    <div id="articulos">   

      <div id="descripcion">
        <p class="nombre"><?php echo $accesorios->getNombre() ?></p> 
        <?php foreach ($rogasanz_modelos_list as $modelo): ?>
  	    <?php if($accesorios->getModeloId() == $modelo->getId()): echo "<p class='nombre'>".$modelo->getNombre()."</p>" ?><?php endif ?>
  	    <?php endforeach; ?>
        <p class="tipo"><?php echo $accesorios->getTipo() ?></p>
        <?php if($accesorios->getPrecio() <> null):?>
          <p class="precio"><?php echo quitaDecimal::quita_decimal($accesorios->getPrecio()) ?> €</p>
        <?php endif ?>
        <?php if($accesorios->getRef() <> null): echo "<p class='ref'>Ref:".$accesorios->getRef()."</p>" ?><?php endif ?>
      </div>
      
      <div id="foto">
        <?php if($accesorios->getFoto() <> null):?>
          <img src="/uploads/accesorios/<?php echo $accesorios->getFoto() ?>" alt="Accesorio">
        <?php endif;?>
      </div>

    </div>
  <?php endif; ?>
  <?php endforeach; ?>
  </div>
</div>


//Muestra el menú de modelos de coche
<div id="marco">
  <div id="filtro_modelos">
    <?php foreach ($rogasanz_modelos_list as $modelo): ?>
    <ul>
      <li>
      <a href="<?php echo url_for('accesorios/show?id='.$cat.'&modelo_id='.$modelo->getId()) ?>">
        <img src="/uploads/modelos/<?php echo $modelo->getFoto() ?>"></a><p><?php echo $modelo->getNombre() ?></p></li>
     </ul>
     <?php endforeach; ?>
  </div>
</div>

Con la chapuza esta de meter un IF en los articulos sale al paso, pero no me filtra bien los modelos de coche, por eso creo que tiene que haber alguna forma de establecer el objeto criteria de propel para poder recoger los datos según la categoria y el modelo escogido.

Esta hecho con symfony 1.4

Última edición por Delek; 13/06/2013 a las 10:11