まず、両方のイベントのオブザーバーをシングルトンとして定義できます
<global>
<events>
<customer_save_after>
<observers>
<namespace_module>
<type>singleton</type>
<class>namespace_module/observer</class>
<method>doSomething</method>
</namespace_module>
</observers>
</customer_save_after>
<customer_register_success>
<observers>
<namespace_module>
<type>singleton</type>
<class>namespace_module/observer</class>
<method>doSomething</method>
</namespace_module>
</observers>
</customer_register_success>
</events>
</global>
この場合、同じオブザーバーオブジェクトが両方のイベントに使用されます。したがって、オブザーバーでフラグを作成し、いくつかのアクションを実行する前にフラグを確認できます。
class [Namespace]_[Module]_Model_Observer
{
protected $canDoSomething = false;
public function doSomething($observer)
{
if (!$this->canDoSomething) {
//here your code
//now set flag to true to prevent executing your code twice
$this->canDoSomething = true;
}
}
}
これで、コードは1回だけ実行されます。