Hola,
Estoy creando un modulo que filtra productos según tres valores
El primer select sería rango de precios 0 - 500€, 501€ - 200€ el segundo sería la cantidad de regalos y el tercero la categoría.
Cuando clicas en regalos para ti te mostraría una pagina con los resultados, ahora mismo el controllador coge el request de los valores, pero no entiendo o comprendo como montarle la query a Magento y me devuelve una vista con los productos filtrados.
Una orientación no me ayudaría
Un saludo!
Hola @mnuhell,
¿De qué versión de Magento hablamos?.
¿Hay algo de código que puedas compartir sobre lo ya hecho?
Hola @Damian Culotta
La versión de Magento es 2.1.7
El código que tengo es el siguiente:
Tengo un layout con el formulario que tiene una petición Post:
<?php
/**
* Baz view template
*
* @var $block Mnuhell\FormSearchAttributes\Block\SearchAttributes
*/
$categories = $this->getCategoryCollection()
?>
<div class="container-search" style="display: none; opacity: 1">
<h3><?php /* @escapeNotVerified */ echo __("Do you want a ideas?, Tell us what you are looking for.") ?></h3>
<form action="<?php echo $this->getFormAction() ?>" method="post">
<div class="container-search__select">
<div class="select">
<select name="qty">
<option="">¿Cuánto quieres gastar?</option>
<option value="0-500€">0 - 500€</option>
<option value="501-1.500€">501 - 1.500€</option>
<option value="1.501-3.000€">1.501 - 3.000€</option>
<option value="3.001 - 4.000€">3.001 - 4.000€</option>
</select>
</div>
<div class="select">
<select name="gif">
<option value="">¿Cuantos regalos necesitas?</option>
<option value="500">500</option>
<option value="1000">1000</option>
<option value="3000">3000</option>
<option value="5000">5000</option>
</select>
</div>
<div class="select">
<select name="category">
<option value="">¿Elige una categoría?</option>
?>
<?php foreach ($categories as $category) { ?>
<?php if($category->getIsActive()) ?>
<option value="<?php echo $category->getName(); ?>" data-validate="{required:true}"><?php echo $category->getName() ?></option>
<?php } ?>
</select>
</div>
<div class="field actions">
<button type="submit" class="action search submit primary"><?php /* @escapeNotVerified */ echo __("Gift for you") ?></button>
</div>
</div>
</form>
</div>
y un controllador que recoge esos datos.
namespace Mnuhell\FormSearchAttributes\Controller\Index;
use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
class Result extends Action
{
/**
* @var $resultPageFactory
*/
protected $resultPageFactory;
/**
* @param Context $context
* @param PageFactory $resultPageFactory
*/
public function __construct( Context $context, PageFactory $resultPageFactory)
{
$this->resultPageFactory = $resultPageFactory;
parent::__construct($context);
}
public function execute()
{
$params = $this->getRequest()->getParams();
if($params){
foreach ($params as $param){
echo "<p>" . $param . "</p>";
}
}else{
$this->_redirect('/');
}
}
Esto me devuelve los resutados en la ruta /mqsearch/index/result/
Lo que necesito ahora es poder filtrar esos datos y devolver una vista con los resutados del filtro. ahora mismo los datos son de ejemplo, pero la idea sería que los rangos de precios los obtenga con el layered-navigation.
Gracias!!
Básicamente estas queriendo crear un duplicado del resultado de búsqueda avanzada, ¿verdad?.
No he llegado, aún, a esa customización, así que sólo puedo suponer. Tengo alguna ligera idea de cómo hacer búsqueda en el repositorio de productos a través del SearchCriteria: https://www.damianculotta.com.ar/magento/searchcriteria-busquedas-y-filtros-en-magento2/ (perdón por el self-pormotion, pero allí hay ejemplos).
Con respecto a la parte del layered navigation, no puedo contestar aún, debería hacer experimentos primero.
Gracias @Damian Culotta Voy a investigar con lo que me has pasado y cuando tenga algo te lo comento.
Un saludo!