Magento: получить список регионов для страны в модуле доставки администратора - PullRequest
3 голосов
/ 15 июня 2011

В настоящее время в моем файле /etc/system.xml я могу использовать это, чтобы просмотреть полный список регионов, которые хранятся в Magento, и отобразить их как множественный выбор. Это хорошо работает, однако я бы предпочел только тянуть через регионы для одной страны, например округа Великобритании или штаты США:

                    <counties translate="label">
                        <label>Counties</label>
                        <frontend_type>multiselect</frontend_type>
                        <sort_order>10</sort_order>
                        <source_model>adminhtml/system_config_source_allregion</source_model>
                        <show_in_default>1</show_in_default>
                        <show_in_website>1</show_in_website>
                        <show_in_store>1</show_in_store>
                    </counties>

Причина этого в том, что я добавил в систему множество регионов / штатов / округов, и теперь это не очень удобное поле для выбора нескольких пользователей.

UPDATE:

После того, как я сразу же не принял решения, представленные ниже, я вернулся к этой проблеме через некоторое время, чтобы составить собственное решение, основанное на предоставленных ответах.

Я скопировал приложение / код / ​​core / Mage / Adminhtml / Model / System / Config / Source / Allregion.php в приложение / code / core / Mage / Adminhtml / Model / System / Config / Source / Ukregion.php

Затем я изменил определение класса на Mage_Adminhtml_Model_System_Config_Source_Ukregion.

Тогда я изменился:

        $regionsCollection = Mage::getResourceModel('directory/region_collection')->load();

для включения фильтра страны:

        $regionsCollection = Mage::getResourceModel('directory/region_collection')->addCountryFilter('GB')->load();

Теперь я получаю округа для Великобритании (которые мне пришлось редактировать самостоятельно, но это другая проблема в стиле истории-magento).

Наконец я изменил свой system.xml:

                    <counties translate="label">
                        <label>Counties</label>
                        <frontend_type>multiselect</frontend_type>
                        <sort_order>10</sort_order>
                        <source_model>adminhtml/system_config_source_ukregion</source_model>
                        <show_in_default>1</show_in_default>
                        <show_in_website>1</show_in_website>
                        <show_in_store>1</show_in_store>
                    </counties>

Использование «Великобритании» вместо «ГБ» является полностью преднамеренным - ГБ не включает округа NI, которые он просто использует по «унаследованным причинам». «Великобритания» включает Северную Ирландию, как и мой список округов.

Ответы [ 2 ]

4 голосов
/ 16 июня 2011

Взгляните на страницу Система> Конфигурация> Настройки доставки , вы можете воссоздать, как ее регионы настраиваются в соответствии с выбранной страной.

Теперь посмотрите на файл app/code/core/Mage/Shipping/etc/system.xml,Поля страны и региона выглядят следующим образом:

<country_id translate="label">
    <label>Country</label>
    <frontend_type>select</frontend_type>
    <frontend_class>countries</frontend_class>
    <source_model>adminhtml/system_config_source_country</source_model>
    <sort_order>10</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
</country_id>
<region_id translate="label">
    <label>Region/State</label>
    <frontend_type>text</frontend_type>
    <sort_order>20</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
</region_id>

Важные части:

  • Страна имеет класс countries и идентификатор country_id.
  • Регион имеет идентификатор region_id.
  • Регион не является выбором и не имеет исходной модели.

JavaScript уже находится вместо для страниц конфигурации.Он находит элементы с классом countries и использует его идентификатор, чтобы найти элемент с таким же именем (регион).Когда первый элемент изменяется, второй обновляется с помощью AJAX.

При использовании этого в прошлом у меня иногда возникали проблемы, когда на странице имеется более одной пары стран / регионов, поэтому лучше избегать такой ситуации.

1 голос
/ 16 июня 2011

Атрибут source_model определяет класс «где» - параметры этого поля множественного выбора.Вы можете создать новый класс только с параметрами, которые вы хотите отобразить в этом поле, и указать source_model на этот новый класс.

Для определения параметров следует использовать метод toOptionArray () ,Быстрый способ сделать это, как в следующем примере:

public function toOptionArray()
    {
        return array(
            array( 'value' => VALUE,
                'label' => LABEL ) ),

            array( 'value' => VALUE2,
                'label' => LABEL2 )
        );
    }

Конечно, было бы лучше получить параметры из таблицы базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...