<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>addAttributeToSort Archives - Pereira, Thiago Santos.</title>
	<atom:link href="https://thiagosantos.com/blog/tag/addattributetosort/feed/" rel="self" type="application/rss+xml" />
	<link>https://thiagosantos.com/blog/tag/addattributetosort/</link>
	<description>the fun of code.</description>
	<lastBuildDate>Mon, 10 Oct 2011 13:09:12 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5</generator>
	<item>
		<title>Magento &#8211; coleção de produtos / catalog/product_collection</title>
		<link>https://thiagosantos.com/blog/238/php/magento-colecao-de-produtos-catalogproduct_collection/</link>
					<comments>https://thiagosantos.com/blog/238/php/magento-colecao-de-produtos-catalogproduct_collection/#comments</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Fri, 07 Oct 2011 14:30:15 +0000</pubDate>
				<category><![CDATA[Ecommerce]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[addAtributeToFilter]]></category>
		<category><![CDATA[addAttributeToSelect]]></category>
		<category><![CDATA[addAttributeToSort]]></category>
		<category><![CDATA[catalog/product_collection]]></category>
		<category><![CDATA[magento product collection]]></category>
		<category><![CDATA[retornar produtos]]></category>
		<guid isPermaLink="false">http://thiagosantos.com/blog/?p=238</guid>

					<description><![CDATA[<p>Em casos bem comuns trabalhando com ecommerce temos a necessidade em alguns momentos de ter em mãos uma lista de certos produtos. Sejam esses produtos de uma certa categoria, ou tageados com certas palavras chaves ou dentro de uma faixa de valor.</p>
<p>O Magento trata essa lista de produtos como uma coleção de produtos, que possui um modelo próprio para tratar isso, criando uma interface simpática ao desenvolvedor para criar complexas consultas SQL. Há duas formas de acessar essa interface do "Product Collection" usando o modelo do catalog/product ou acessando diretamente o recurso do modelo , resource model, o catalog/product_collection. Se você der uma olhada na classe Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection, encontrado pelo caminho core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Collection.php, é possível ver todos os métodos disponíveis e como eles são implementados.</p>
<p>The post <a href="https://thiagosantos.com/blog/238/php/magento-colecao-de-produtos-catalogproduct_collection/">Magento &#8211; coleção de produtos / catalog/product_collection</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Em casos bem comuns trabalhando com ecommerce temos a necessidade em alguns momentos de ter em mãos uma lista de certos produtos. Sejam esses produtos de uma certa categoria, ou tageados com certas palavras chaves ou dentro de uma faixa de valor.</p>
<p style="text-align: justify;">O Magento trata essa lista de produtos como uma coleção de produtos, que possui um modelo próprio para tratar isso, criando uma interface simpática ao desenvolvedor para criar complexas consultas SQL. Há duas formas de acessar essa interface do &#8220;Product Collection&#8221; usando o modelo do <em>catalog/produc</em>t ou acessando diretamente o recurso do modelo , resource model, o <em>catalog/product_collection</em>. Se você der uma olhada na classe Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection, encontrado pelo caminho core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Collection.php, é possível ver todos os métodos disponíveis e como eles são implementados.<br />
<span id="more-238"></span><br />
<strong><br />
Primeira Forma</strong></p>
<pre lang="php">$produtos = Mage::getModel('catalog/product');
$colecaoProdutos = $produtos-&gt;getCollection()
                    -&gt;addAttributeToSelect('*')
                    -&gt;addAttributeToFilter(
                                     'type_id',
                                     array('eq' =&gt; 'customproduct')
                                     );     
		    -&gt;addAttributeToSort('price','asc')
                    -&gt;load();</pre>
<p><strong>Segunda Forma</strong></p>
<pre lang="php">$colecaoProdutos = Mage::getResourceModel('catalog/product_collection')
                    -&gt;addAttributeToSelect('*')
		    -&gt;addAttributeToSort('price','asc');</pre>
<p style="text-align: justify;">Como no dia a dia eu utilizo a segunda forma nos meus exemplos vou fazer o mesmo.</p>
<h1 style="text-align: justify;">Métodos</h1>
<p style="text-align: justify;">Há três metódos que uso com grande frequência são o <a href="#addAttributeToSelect">addAttributeToSelect</a>, <a href="#addAttributeToFilter">addAttributeToFilter</a> e <a href="#addAttributeToSort">addAttributeToSort</a>. Abaixo uma breve referencia sobre esses métodos com alguns exemplos:</p>
<ul>
<li><strong><a name="addAttributeToSelect"></a>addAttributeToSelect()</strong></li>
</ul>
<p style="text-align: justify;">Com o addAttributeToSelect você define os nomes dos atributos/campos que serão retornados do banco, como uma query SQL. Para retornar todos os atributos/campos do produto use &#8220;*&#8221;, caso queira apenas algumas informações passe campo a campo como nos exemplos listados abaixo.</p>
<div>
<pre lang="php">//Todos os campos
$colecaoProdutos = Mage::getResourceModel('catalog/product_collection')
                   -&gt;addAttributeToSelect('*');</pre>
<pre lang="php">//Apenas alguns campos
$colecaoProdutos = Mage::getResourceModel('catalog/product_collection')
                   -&gt;addAttributeToSelect('name')
                   -&gt;addAttributeToSelect('price')
                   -&gt;addAttributeToSelect('description')
                   -&gt;addAttributeToSelect('small_image');</pre>
<pre lang="php">//Alguns campos com uma só chamada
$colecaoProdutos = Mage::getResourceModel('catalog/product_collection')
                   -&gt;addAttributeToSelect(
                         array("name", "price","small_image", "description")
                         );</pre>
</div>
<div style="text-align: justify;">Para mais informações sobre esse método de uma olhada na <a title="Magento Doc" href="http://docs.magentocommerce.com/Mage_Eav/Mage_Eav_Model_Entity_Collection_Abstract.html#addAttributeToSelect" target="_blank">Documentação do Magento</a> .</div>
<ul>
<li><strong><a name="addAttributeToFilter"></a>addAttributeToFilter()</strong></li>
</ul>
<p style="text-align: justify;">O addAttributeToFilter é equivalente ao WHERE de uma query de consulta SQL. Da mesma forma como você pode adicionar operadores de condição em uma query assim se faz com esse método, passando como paramêtro um array com o nome do campo e a condição como segue os exemplos abaixo.</p>
<pre lang="php">//Great than - para valores maiores que 99.99

$colecaoProdutos-&gt;addAttributeToFilter('price', array('gt' =&gt; 99.99));</pre>
<pre lang="php">//Less than or Equals to - para valores maiores ou igual a 99.99

$colecaoProdutos-&gt;addAttributeToFilter('price', array('lteq' =&gt; 99.99));</pre>
<p style="text-align: justify;">Há dois campos do produto, <em>news_from_date</em> e <em>news_to_date</em>, que definem de e até quando ele deve ser considerado novo. Uso também com muita frequência esses dois campos pra selecionar esses novos produtos e colocar um diferencial nele pra chamar a atenção, seja uma borda ou ima imagem com &#8220;Novo&#8221; sobre a imagem do produto. Segue o código</p>
<pre lang="php">//Coleção de produtos novos
$colecaoProdutos-&gt;addAttributeToFilter('news_from_date', array('date' =&gt; true, 'to' =&gt; $todayDate))
                -&gt;addAttributeToFilter('news_to_date', array('or'=&gt;
                                        array(0 =&gt; array('date' =&gt; true, 'from' =&gt; $todayDate),
                                              1 =&gt; array('is' =&gt; new Zend_Db_Expr('null')))
                                             ), 'left');

//Assim como visto em /app/code/core/Mage/Catalog/Block/Product/New.php</pre>
<p style="text-align: justify;">Se quiser saber mais sobre filtros e outros operadores de condição deem uma olhada no post do Adam Moss que aborda com exemplos rápidos e sem baboseira no link <a href="http://www.e-commercewebdesign.co.uk/blog/magento-tips/magento-sql-queries-with-addattributetofilter.php">http://www.e-commercewebdesign.co.uk/blog/magento-tips/magento-sql-queries-with-addattributetofilter.php</a> .</p>
<ul>
<li><strong><a name="addAttributeToSort"></a>addAttributeToSort()</strong></li>
</ul>
<div style="text-align: justify;">Se você estiver familiarizado com SQL sabe que é possível ordenar uma consulta com o ORDER BY nome_campo de forma ASCENDENTE(menor pro maior) ou DESCENTENDE (maior pro menor). Sendo assim o mesmo se aplica com o método <em>addAtributeToSort()</em>. No último caso do <em>addAttributeToFilter()</em> faço uma consulta por produtos marcados como novos de uma data até a outra, só que essa condição vai me trazer todos os produtos não necessariamente ordenados do mais novo para o mais velhos, e também se quissemos que a coleção de produtos fique ordenados dos mais velhos para os mais novos, ou ordenados por preço?</div>
<pre lang="php">//Mais velhos para mais novos
$colecaoProdutos-&gt;addAttributeToFilter('news_from_date', array('date' =&gt; true, 'to' =&gt; $todayDate))
                -&gt;addAttributeToFilter('news_to_date', array('or'=&gt;
                                        array(0 =&gt; array('date' =&gt; true, 'from' =&gt; $todayDate),
                                              1 =&gt; array('is' =&gt; new Zend_Db_Expr('null')))
                                             ), 'left')
                 -&gt;addAttributeToSort('news_from_date','desc');</pre>
<pre lang="php">//Mais baratos para os mais caros
$colecaoProdutos-&gt;addAttributeToFilter('news_from_date', array('date' =&gt; true, 'to' =&gt; $todayDate))
                -&gt;addAttributeToFilter('news_to_date', array('or'=&gt;
                                        array(0 =&gt; array('date' =&gt; true, 'from' =&gt; $todayDate),
                                              1 =&gt; array('is' =&gt; new Zend_Db_Expr('null')))
                                             ), 'left')
                 -&gt;addAttributeToSort('price','asc');</pre>
<p>&nbsp;</p>
<p>Só espero ter sido bem claro e objetivo nesse post. Com esses exemplos já pode fazer uma página de categoria, ou mesmo uma página de promoção para só listar produtos mais novos ou mais antigos com promoção.</p>
<p>Material de referência:<br />
<a href="http://www.e-commercewebdesign.co.uk/blog/magento-tips/magento-sql-queries-with-addattributetofilter.php"> http://www.e-commercewebdesign.co.uk/blog/magento-tips/magento-sql-queries-with-addattributetofilter.php</a><br />
<a href="http://docs.magentocommerce.com/Mage_Eav/Mage_Eav_Model_Entity_Collection_Abstract.html"> http://docs.magentocommerce.com/Mage_Eav/Mage_Eav_Model_Entity_Collection_Abstract.html</a><br />
<a href="http://www.exploremagento.com/magento/some-custom-blocks-to-help-you-show-products.php"> http://www.exploremagento.com/magento/some-custom-blocks-to-help-you-show-products.php</a></p>
<p>The post <a href="https://thiagosantos.com/blog/238/php/magento-colecao-de-produtos-catalogproduct_collection/">Magento &#8211; coleção de produtos / catalog/product_collection</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/238/php/magento-colecao-de-produtos-catalogproduct_collection/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
