Magento: obtenir région de la liste pour les pays dans l'admin du module d'expédition
Actuellement dans mon /etc/system.xml fichier que je peux l'utiliser pour tirer à travers une liste complète des régions qui sont stockés dans Magento et de les afficher en tant que multiple. Cela fonctionne bien, mais je préfère que tirer à travers les régions d'un pays, comme le royaume-UNI des comtés ou des états-unis:
<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>
La raison pour cela est que j'ai ajouté beaucoup de régions/états/comtés sur le système et il est maintenant pas très convivial multi-boîte de sélection.
Mise à JOUR:
Après pas immédiatement agissant sur les solutions proposées ci-dessous j'ai repensé à ce problème plus tard pour monter ma propre solution inspirée par les réponses fournies.
J'ai copié app/code/core/Mage/Adminhtml/Model/System/Config/Source/Allregion.php pour app/code/core/Mage/Adminhtml/Model/System/Config/Source/Ukregion.php
Puis j'ai changé la définition de classe pour Mage_Adminhtml_Model_System_Config_source_ukregion.
Puis j'ai changé:
$regionsCollection = Mage::getResourceModel('directory/region_collection')->load();
pour inclure un pays de filtre:
$regionsCollection = Mage::getResourceModel('directory/region_collection')->addCountryFilter('GB')->load();
Je reçois maintenant les comtés du royaume-UNI (que j'ai eu à modifier moi-même, mais c'est une autre histoire-style-magento-problème).
Finalement j'ai changé d'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>
L'utilisation de 'royaume-UNI' au lieu de 'GO' est totalement délibérée - GO ne comprend pas la NI comtés, il est juste utilisé pour "des raisons d'héritage'. Au royaume-UNI " ne comprennent Irlande du Nord, comme le fait mon comté de liste.
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à la page Système > Configuration > Expédition Paramètres, vous pouvez recréer la façon dont il régions sont ajustées pour correspondre au pays sélectionné.
Maintenant, regardez le fichier
app/code/core/Mage/Shipping/etc/system.xml
. Le pays et la région des champs de ressembler à ceci:Les pièces importantes sont:
countries
et un ID decountry_id
.region_id
.Le javascript est déjà en place pour la config pages. Il trouve des éléments avec une classe de
countries
et utilise l'ID de trouver un nom similaire élément (la région). Lorsque le premier élément change la seconde est mise à jour en AJAX.Lors de l'utilisation du présent dans le passé, j'ai parfois eu du mal quand il y a plus d'un pays ou d'une région de la paire sur une page, il est donc préférable d'éviter cette situation.
La source_model attribut définit la classe "où" sont les options de cette multiselect champ. Vous pouvez créer une nouvelle classe avec seulement les options que vous souhaitez afficher dans ce champ et le point de l'source_model à cette nouvelle classe.
Vous devez utiliser le toOptionArray() méthode pour définir les options. Un moyen rapide de le faire est comme l'exemple ci-dessous:
Bien sûr, les options à partir d'une table de base de données serait une meilleure pratique.