4

次の記事の助けを借りて、magento の製品リストをジオロケーション データで並べ替えようとしました: https://developers.google.com/maps/articles/phpsqlsearch_v3?hl=hu-HU

モジュールの 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( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS距離

それを行う方法はありますか?

4

1 に答える 1

1

latおよびが製品の属性である場合lngは、addExpressionAttributeToSelect()を使用できます。

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

カスタム選択クエリでは、latlng図のように)二重角かっこで囲む必要があります。selectステートメントが括弧内にあることを確認してください。

于 2012-12-14T22:40:19.340 に答える