0

ここから directory_country_region テーブルに 4000 以上の国/州コードをインポートしました - http://www.magentocommerce.com/boards/viewthread/272591/。うまく機能します... 1つのことを除いて。都道府県は、default_name 列ではなく、region_id で並べ替えられます。

app/core/code/core/Mage/Directory/Model/Resource/Region/Collection.php ですでに低レベルで行われているようです

protected function _construct()
{
    $this->_init('directory/region');

    $this->_countryTable    = $this->getTable('directory/country');
    $this->_regionNameTable = $this->getTable('directory/country_region_name');

    $this->addOrder('name', Varien_Data_Collection::SORT_ORDER_ASC);
    $this->addOrder('default_name', Varien_Data_Collection::SORT_ORDER_ASC);
}

この質問が尋ねられた場所をいくつか見つけましたが、何も機能しませんでした:

Magento:州/州のドロップダウンの項目をアルファベット順にソートする方法

私は本当にこれができると思っていましたが、影響はありません: http://open-source.noads.biz/guide-magento-ecommerce/ordinare-la-tendina-delle-regioni-stati-province.html

グーグルは私を失望させ、私はアイデアを使い果たしました。

4

2 に答える 2

0

コレクションの問題ではないようです。返された json をフロントエンドで確認すると、要素がソートされていることがわかります。

問題は、整数などの要素を解析する RegionUpdater (varien/js.js) クラスにあるため、順序が守られません。

醜い解決策は、Mage_Directory_Helper_Data で id を文字列として変換することです

foreach ($collection as $region)
{
      if (!$region->getRegionId()) 
      {
              continue;
      }
      $regions[$region->getCountryId()]["'".$region->getRegionId()."'"] = array('code' => $region->getCode(),'name' => $this->__($region->getName()));
}
$json = Mage::helper('core')->jsonEncode($regions);

このように、ID は文字列であるため、パーサーは配列の順序に従いますが、RegionUpdater クラスの update:function の varien/js.js のフロントエンドで引用符を削除する必要があります。

option.value = regionId.replace(/'/g, '');

私はそれが醜いことを知っていますが、それは高速です。それ以外の場合は、「選択領域」レンダリング全体を再コード化する必要があります

于 2014-01-24T17:17:32.740 に答える