Magento obtenir la configuration Système les valeurs de $observateur de l'objet
-
29-09-2020 - |
Question
J'ai Magento CE 1.9.2.4 installé dans mon système.
Maintenant, je veux valider mon module de configuration du système lors de la "Save Config" clique sur le bouton.
Ci-dessous mon Observateur code:
<?php
class Mycompany_StoreLocator_Model_Observer extends Varien_Event_Observer
{
public function validateDefaultCountry($observer) {
echo "<pre/>";print_r($observer->getEvent());die;
}
}
Ci-dessous mon config.xml:
<?xml version="1.0"?>
<!--
/**
* Mycompany_Mymodule extension
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
*
* @category Mycompany
* @package Mycompany_Mymodule
* @copyright Copyright (c) 2008 Mycompany LLC
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/**
* @category Mycompany
* @package Mycompany_Mymodule
* @author Boris (Moshe) Gurevich <moshe@Mycompany.com>
*/
-->
<config>
<modules>
<Mycompany_Mymodule>
<version>0.2.6</version>
</Mycompany_Mymodule>
</modules>
<global>
<models>
<mymodule>
<class>Mycompany_Mymodule_Model</class>
<resourceModel>mymodule_mysql4</resourceModel>
</mymodule>
<mymodule_mysql4>
<class>Mycompany_Mymodule_Model_Mysql4</class>
<entities>
<location>
<table>mymodule_location</table>
</location>
</entities>
</mymodule_mysql4>
</models>
<events>
<admin_system_config_changed_section_mymodule>
<observers>
<mymodule>
<type>singleton</type>
<class>mymodule/observer</class>
<method>validateDefaultCountry</method>
</mymodule>
</observers>
</admin_system_config_changed_section_mymodule>
</events>
<resources>
<mymodule_setup>
<setup>
<module>Mycompany_Mymodule</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</mymodule_setup>
<mymodule_write>
<connection>
<use>core_write</use>
</connection>
</mymodule_write>
<mymodule_read>
<connection>
<use>core_read</use>
</connection>
</mymodule_read>
</resources>
<helpers>
<mymodule><class>Mycompany_Mymodule_Helper</class></mymodule>
</helpers>
<blocks>
<mymodule><class>Mycompany_Mymodule_Block</class></mymodule>
</blocks>
<mymodule>
<private_fields></private_fields>
</mymodule>
</global>
<frontend>
<routers>
<mymodule>
<use>standard</use>
<args>
<module>Mycompany_Mymodule</module>
<frontName>mymodule</frontName>
</args>
</mymodule>
</routers>
<translate>
<modules>
<Mycompany_Mymodule>
<files>
<default>Mycompany_Mymodule.csv</default>
</files>
</Mycompany_Mymodule>
</modules>
</translate>
<layout>
<updates>
<mymodule module="Mycompany_Mymodule">
<file>mymodule.xml</file>
</mymodule>
</updates>
</layout>
</frontend>
<admin>
<routers>
<mymoduleadmin>
<use>admin</use>
<args>
<module>Mycompany_Mymodule</module>
<frontName>mymoduleadmin</frontName>
</args>
</mymoduleadmin>
</routers>
</admin>
<adminhtml>
<menu>
<mycompany>
<title>Mycompany</title>
<sort_order>71</sort_order>
<children>
<mymodule translate="title" module="mymodule">
<title>Advance Store Locator</title>
<sort_order>3</sort_order>
<action>mymoduleadmin/adminhtml_location</action>
</mymodule>
</children>
</mycompany>
</menu>
<acl>
<resources>
<admin>
<children>
<system>
<children>
<config>
<children>
<mymodule translate="title" module="mymodule">
<title>Advance Store Locator</title>
<sort_order>50</sort_order>
</mymodule>
</children>
</config>
</children>
</system>
</children>
</admin>
</resources>
</acl>
<translate>
<modules>
<Mycompany_Mymodule>
<files>
<default>Mycompany_Mymodule.csv</default>
</files>
</Mycompany_Mymodule>
</modules>
</translate>
</adminhtml>
<default>
<mymodule>
<general>
<google_geo_url><![CDATA[https://maps.google.com/maps/geo]]></google_geo_url>
<show_search>1</show_search>
<show_map>0</show_map>
</general>
</mymodule>
</default>
</config>
Comment puis-je obtenir le système de champ de configuration qui est enregistré lorsque l'Observateur est déclenchée ?
Tout comme l'obtention de devis de caisse de l'événement $observer->getEvent()->getQuote()
La solution
vous n'avez pas besoin d'ajouter un observateur pour qui.
Système->configuration des valeurs, vous pouvez utiliser un modèle principal.
Dans system.xml
lorsque vous déclarez votre champ de le faire:
<field_name_here translate="label">
<label>Label here</label>
<frontend_type>text</frontend_type>
<backend_model>[module]/something_here</backend_model><!-- add this one -->
<sort_order>10</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</field_name_here>
Ensuite, vous créez le modèle [Namespace]_[Module]_Model_Something_Here
<?php
class [Namespace]_[Module]_Model_Something_Here extends Mage_Core_Model_Config_Data
{
protected function _beforeSave()
{
//get the value being saved
$value = $this->getValue();
$isValid = your custom validation here
if (!$isValid) {
Mage::throwException(
Mage::helper('[module]')->__('your error message here')
);
}
}
}
Cela permettra d'éviter la valeur de l'épargne dans le cas où il est mal et vous verrez un message d'erreur en haut de la page.
Vous pouvez voir un exemple pour le domaine base_url
à partir de app/code/core/Mage/Core/etc/system.xml
qui utilise le modèle principal adminhtml/system_config_backend_baseurl
ce qui se traduit par la classe Mage_Adminhtml_Model_System_Config_Backend_Baseurl