在getProductCollection中添加自定义sql,或插入地理位置公式

时间:2012-12-14 16:56:22

标签: magento geolocation

我尝试使用以下文章https://developers.google.com/maps/articles/phpsqlsearch_v3?hl=hu-HU的帮助,通过地理定位数据对magento中的产品列表进行排序。

我在我的模块中覆盖了Mage_Catalog_Block_Product_List,以便我可以访问这行代码:

$this->_productCollection = $layer->getProductCollection();

一旦我有_productCollection对象,我想将公式添加为“虚拟”属性“距离”,以便我可以使用它对查询进行排序。这就是我的想法:

$this->_productCollection = $layer->getProductCollection()
->addAttributeToSelect('distance','I insert my custom formula here')
->addAttributeToSort('distance','DESC');

我知道API没有用来处理那种语法,但我认为它可以帮助人们理解。

这是我要添加的公式:

  

SELECT(3959 * acos(cos(弧度(37))* cos(弧度(纬度))*   cos(弧度(lng) - 弧度(-122))+ sin(弧度(37))* sin(   弧度(纬度))))AS距离

知道该怎么做吗?

1 个答案:

答案 0 :(得分:1)

如果latlng是您产品的属性,则可以使用addExpressionAttributeToSelect():

$this->_productCollection
->addExpressionAttributeToSelect('distance', '(select ... {{lat}} ... {{lng}} ... )', array('lat'=>'lat', 'lng'=>'lng'));

在自定义选择查询中,latlng需要用双括号括起来(如图所示)。确保您的select语句在括号内。