/** * 2016-07-28 * @override * @see ObserverInterface::execute() * @used-by \Magento\Framework\Event\Invoker\InvokerDefault::_callObserverMethod() * @param O $o * @return void */ public function execute(O $o) { /** @var Provider $provider */ $provider = $o[Plugin::PROVIDER]; /** @var ISearchResult|ApiSearchResult|UiSearchResult|OrderGC|InvoiceGC|CreditmemoGC $result */ $result = $o[Plugin::RESULT]; if (in_array($provider->getName(), ['sales_order_grid_data_source'])) { /** * 2016-07-28 * https://github.com/magento/magento2/blob/2.1.0/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php#L37-L40 * @see \Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult::$document * * Структура документа описана здесь: https://mage2.pro/t/1908 */ /** @var string $cacheKey */ $cacheKey = __METHOD__; /** @var string $prop */ $prop = 'payment_method'; df_map(function (Document $item) use($cacheKey, $prop) { /** @var string|null $methodCode */ $methodCode = $item[$prop]; if ($methodCode && df_starts_with($methodCode, 'dfe_')) { /** @var int $id */ $id = $item['entity_id']; /** * 2016-07-29 * Эта операция очень ресурсоёмка: * для каждой строки таблицы заказов она делает кучу запросов к базе данных. * Поэтому кэшируем результаты в постоянном кэше. */ $item[$prop] = df_cache_get_simple([$cacheKey, $id], function () use($id) { /** @var Method $method */ $method = df_order($id)->getPayment()->getMethodInstance(); return $method->titleDetailed(); }); } }, $result); } }
/** * 2016-07-18 * @param string $urlBase * @param array(string => string) $params [optional] * @param int|null $timeout [optional] * @return array(string => mixed) */ function df_http_json_c($urlBase, array $params = [], $timeout = null) { return df_cache_get_simple([$urlBase, $params, $timeout], 'df_http_json', $urlBase, $params, $timeout); }