Magento如何仅在管理部分中检测更改的字段?

时间:2015-05-15 12:22:45

标签: php magento

如果特定的自定义字段值(在自定义送货方式中)已更改,我需要根据更改的自定义字段的值向自定义数据库表插入一些值。我需要在我的Observer.php事件中检查这个我正在触发admin_system_config_changed_section_carriers以获取字段中的值并将值插入表

有没有办法做到这一点?

修改

这是我的观察员功能

public function handle_adminSystemConfigChangedSection($observer){

        $post = Mage::app()->getRequest()->getPost();
        $firstBarcodeFlatrate = $post['groups']['flatrate']['fields']['barcode_start']['value'];
        $lastBarcodeFlatrate = $post['groups']['flatrate']['fields']['barcode_end']['value'];

        $flatrateRange = range($firstBarcodeFlatrate,$lastBarcodeFlatrate);
        $shippingMethod = 'flatrate';

        foreach($flatrateRange as $barcodes){
            $insertData = array(
                'barcode' => $barcodes,'shipping_method' => $shippingMethod,'status' => 1,
            );
            $model = Mage::getModel('customshippingmethods/customshippingmethods')->setData($insertData);
            try {
                $model->save();
            } catch (Exception $e){
                echo $e->getMessage();
            }
        }

正如您所看到的,上面的数据库查询将在每次保存配置时更新,但我只需要运行查询iff $firstBarcodeFlatrate值已更改

1 个答案:

答案 0 :(得分:2)

我可能会选择两个选项: 1.缓存$ firstBarcodeFlatrate的最后一个值 $cacheId = 'first_barcode_flatrate_last_value'; $cache = Mage::app()->getCache(); $lastValue = $cache->load($cacheId); if (!$lastValue) { //We don't have cached last value, we need to run the query and cache it: //Cache the value: $cache->save($firstBarcodeFlatrate, $cacheId, array('first_barcode_flatrate_last_value'), null); //Run the query here } else { //We have last value, we need to check if it has been changed: if($lastValue != $firstBarcodeFlatrate) { //Update the cached value: $cache->save($firstBarcodeFlatrate, $cacheId, array('first_barcode_flatrate_last_value'), null); //Run the query here. } } 选项2是创建另一个包含单行和两个字段的表,或添加另一个系统配置字段,该字段将存储上次使用的值。然后在运行查询之前,如果它与$ firstBarcodeFlatrate不同,您将运行查询,那么您将检查此值,否则您不会,但我认为缓存将为您完成工作。