/** * @param SearchBundle\ProductNumberSearchResult $searchResult * @param $orderNumber * @param $categoryId * @param StoreFrontBundle\Struct\ProductContextInterface $context * @return array */ private function buildNavigation(SearchBundle\ProductNumberSearchResult $searchResult, $orderNumber, $categoryId, StoreFrontBundle\Struct\ProductContextInterface $context) { $products = $searchResult->getProducts(); $products = array_values($products); if (empty($products)) { return array(); } /** @var $currentProduct BaseProduct */ foreach ($products as $index => $currentProduct) { if ($currentProduct->getNumber() != $orderNumber) { continue; } $previousProduct = isset($products[$index - 1]) ? $products[$index - 1] : null; $nextProduct = isset($products[$index + 1]) ? $products[$index + 1] : null; $navigation = array(); if ($previousProduct) { $previousProduct = $this->listProductService->get($previousProduct->getNumber(), $context); $navigation["previousProduct"]["orderNumber"] = $previousProduct->getNumber(); $navigation["previousProduct"]["link"] = $this->config->get('sBASEFILE') . "?sViewport=detail&sDetails=" . $previousProduct->getId() . "&sCategory=" . $categoryId; $navigation["previousProduct"]["name"] = $previousProduct->getName(); $previousCover = $previousProduct->getCover(); if ($previousCover) { $navigation["previousProduct"]["image"] = $this->legacyStructConverter->convertMediaStruct($previousCover); } } if ($nextProduct) { $nextProduct = $this->listProductService->get($nextProduct->getNumber(), $context); $navigation["nextProduct"]["orderNumber"] = $nextProduct->getNumber(); $navigation["nextProduct"]["link"] = $this->config->get('sBASEFILE') . "?sViewport=detail&sDetails=" . $nextProduct->getId() . "&sCategory=" . $categoryId; $navigation["nextProduct"]["name"] = $nextProduct->getName(); $nextCover = $nextProduct->getCover(); if ($nextCover) { $navigation["nextProduct"]["image"] = $this->legacyStructConverter->convertMediaStruct($nextCover); } } $navigation["currentListing"]["position"] = $index + 1; $navigation["currentListing"]["totalCount"] = $searchResult->getTotalCount(); return $navigation; } return array(); }
protected function assertSearchResultSorting(ProductNumberSearchResult $result, $expectedNumbers) { $productResult = array_values($result->getProducts()); /**@var $product SearchProduct*/ foreach ($productResult as $index => $product) { $expectedProduct = $expectedNumbers[$index]; $this->assertEquals($expectedProduct, $product->getNumber(), sprintf('Expected %s at search result position %s, but got product %s', $expectedProduct, $index, $product->getNumber())); } }