如果特定的自定义字段值(在自定义送货方式中)已更改,我需要根据更改的自定义字段的值向自定义数据库表插入一些值。我需要在我的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
值已更改
答案 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不同,您将运行查询,那么您将检查此值,否则您不会,但我认为缓存将为您完成工作。