Динамическое создание имени метода для объекта клиента.

magento.stackexchange https://magento.stackexchange.com//questions/87999

Вопрос

У меня есть сайт Magento с четырьмя магазинами.Для каждого клиента в каждом магазине будет назначено разное время отключения.

Пользователь может добавлять товары только из одного магазина одновременно.Когда пользователь заходит на страницу оформления заказа, мне нужно получить время окончания для магазина, из которого он добавил товар.

Мне удалось получить код магазина.

Атрибуты клиента для времени закрытия магазина указаны ниже.

`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

На основе продуктов, добавленных в корзину, я получил код магазина, является ли онabc или def или так.

Теперь мне нужно получить значение от объекта клиента, как показано ниже.

$customer = Mage::getSingleton('customer/session')->getCustomer();
$customer->getDeliveryCutoffTimeAbc();

Для этого у меня есть код магазина, как показано ниже.

$storeCode = "abc";

Мне нужно использовать динамику, как показано ниже

$customer->getDeliveryCutoffTime.$storeCode();

Он не получает значения.Как я могу сделать его динамичным?

Это было полезно?

Решение

попробуйте

$storeCode = ucfirst("abc");

$function = "getDeliveryCutoffTime".$storeCode;

$customer->$function();
.

Другие советы

В PHP это также можно сделать так:

$storeCode = "abc";
$customer->{"getDeliveryCutoffTime" . ucfirst($storeCode)}();

Эти «волшебные» методы получения Magento вызывают метод getData() в конце концов.Так getDeliveryCutoffTimeAbc() приведет к вызову getData("delivery_cutoff_time_abc").

Таким образом, вы также можете вызвать это прямо сейчас:

$storeCode = "abc";
$customer->getData("delivery_cutoff_time_" . $storeCode);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top