Construa um nome de método para o objeto do cliente dinamicamente
-
13-12-2019 - |
Pergunta
Tenho um site Magento com quatro lojas.Para cada cliente serão atribuídos horários de corte diferentes para cada loja.
O usuário está restrito a adicionar produtos de apenas uma loja por vez.Quando o usuário acessa a página de checkout, tenho que obter o horário limite da loja onde ele adicionou o produto.
Consegui o código da loja.
Os atributos do cliente para o horário limite da loja são os seguintes
`delivery_cutoff_time_abc` // here abc is the store code
`delivery_cutoff_time_def` // here def is the store code
`delivery_cutoff_time_ghi` // here ghi is the store code
`delivery_cutoff_time_jkl` // here jkl is the store code
Com base nos produtos adicionados ao carrinho, recebi o código da loja, seja eleabc
ou def
ou então.
Agora tenho que obter o valor do objeto do cliente conforme abaixo
$customer = Mage::getSingleton('customer/session')->getCustomer();
$customer->getDeliveryCutoffTimeAbc();
Para fazer isso, tenho o código da loja abaixo
$storeCode = "abc";
Eu tenho que usar dinâmico como abaixo
$customer->getDeliveryCutoffTime.$storeCode();
Não recebe o valor.Como posso torná-lo dinâmico?
Solução
Tentar
$storeCode = ucfirst("abc");
$function = "getDeliveryCutoffTime".$storeCode;
$customer->$function();
Outras dicas
Em PHP, isso também pode ser feito assim:
$storeCode = "abc";
$customer->{"getDeliveryCutoffTime" . ucfirst($storeCode)}();
Esses métodos getter "mágicos" do Magento chamam o método getData()
eventualmente.Então getDeliveryCutoffTimeAbc()
resultará em uma chamada para getData("delivery_cutoff_time_abc")
.
Então você também pode ligar para isso imediatamente:
$storeCode = "abc";
$customer->getData("delivery_cutoff_time_" . $storeCode);