我尝试使用以下文章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距离
知道该怎么做吗?
答案 0 :(得分:1)
如果lat
和lng
是您产品的属性,则可以使用addExpressionAttributeToSelect():
$this->_productCollection
->addExpressionAttributeToSelect('distance', '(select ... {{lat}} ... {{lng}} ... )', array('lat'=>'lat', 'lng'=>'lng'));
在自定义选择查询中,lat
和lng
需要用双括号括起来(如图所示)。确保您的select语句在括号内。