En Magento, para obtener una colección de productos de la tienda filtrados de una determinada forma, se utiliza habitualmente una consulta como la siguiente:
// Todos los productos de una marca $collection = Mage::getModel('catalog/product')->getCollection() ->addAttributeToSelect('name') ->addAttributeToSelect('manufacturer') ->addAttributeToFilter(array( array('attribute'=>'manufacturer', 'eq'=>$marca) ));
El problema surge siempre con el valor que debe tomar la variable marca, ya que si el atributo en Magento es de tipo Dropdown o Multiselect, no podemos indicar el valor en formato texto, sino que debemos indicar el identificador de la opción.
Podemos obtener dicho valor de la siguiente forma:
$marca = Mage::getResourceModel('catalog/product') ->getAttribute('manufacturer') ->getSource() ->getOptionId('Ray ban');
Y finalmente, recorremos los productos seleccionados de la forma habitual:
foreach ($collection as $product) { echo $product->getName() . '<br />'; }
Hola,
gracias por la ayuda, queria preguntarte si se puede cambiar la url por el nombre de la marca a listar. porfavor me puedes ayudar. Gracias
Realmente en el ejemplo se utiliza el nombre de la marca (en este caso Ray-ban) para obtener la lista de productos. ¿o te refieres a otra cosa?
mira yo he estoy enviando a un block. creado manualmente con esta url.
me direcciona al template.
getManufacturer().’.html’; ?>”>
y yo lee la url en el block.
$query_string = $_SERVER[‘QUERY_STRING’];
//ejm: ACER-28.html
//$primero = strstr($query_string,’-‘);
$replace1 = str_replace(‘-’,’/’,$query_string);
$replace2 = str_replace(‘.html’,”,$replace1);
$explode = explode(“/”,$replace2);
$desmarca= $explode[0];
$codmarca= $explode[1];
//Y AQUI LISTO TODO LOS PRODUCTOS CON EL CODIGO DE LA MARCA.
pero lo que pasa es que no lo quiero q en la url no se vea asi:
http://www.paginaweb.com/marca/?rayban-23.html
sino q quiero q me muestre solo
http://www.paginaweb.com/rayban.html ó http://www.paginaweb.com/rayban
se podra hacer esto posible, me podrias ayudar. gracias de ante mano.
mira yo he estoy enviando a un block. creado manualmente con esta url.
me direcciona al template.
<a href="getAttributeText(‘manufacturer’).’-‘.$_product->getManufacturer().’.html’; ?>»>
y yo lee la url en el block.
$query_string = $_SERVER[‘QUERY_STRING’];
//ejm: ACER-28.html
//$primero = strstr($query_string,’-‘);
$replace1 = str_replace(‘-‘,’/’,$query_string);
$replace2 = str_replace(‘.html’,»,$replace1);
$explode = explode(«/»,$replace2);
$desmarca= $explode[0];
$codmarca= $explode[1];
//Y AQUI LISTO TODO LOS PRODUCTOS CON EL CODIGO DE LA MARCA.
pero lo que pasa es que no lo quiero q en la url no se vea asi:
http://www.paginaweb.com/marca/?rayban-23.html
sino q quiero q me muestre solo
http://www.paginaweb.com/rayban.html ó http://www.paginaweb.com/rayban
se podra hacer esto posible, me podrias ayudar. gracias de ante mano.
Hola Daniel, me podrias ayudar porfavor.
Saludos
Seguramente haya mejores formas de hacerlo, sobre todo si tienes muchas marcas, pero tendrías que crear una extensión con su propia url, de forma que luego puedas pasar parámetros y demás
Una solución fácil es utilizar «rewrites» (Catalogo => URL Rewrites)
Allí puedes configurar que cuando alguien acceda a http://www.paginaweb.com/rayban Magento cargue internamente la URL http://www.paginaweb.com/marca/?rayban-23.html (el usuario no ve la segunda dirección, sólo la primera).
Ya digo que creo que la solución idean sería crear un módulo para gestionar eso, pero es más complejo.
Gracias (y)
no tienes algun video donde se muestre estos pasos y como se implementa, me seria de mucha ayuda :(