Advertisement
Guest User

Magento URL Categories

a guest
Sep 29th, 2017
554
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.28 KB | None | 0 0
  1. <?php
  2.  
  3. use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
  4. use Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrite;
  5. use Magento\UrlRewrite\Model\OptionProvider;
  6.  
  7. class CategoryRedirect implements \Magento\Framework\Event\ObserverInterface
  8. {
  9. const EN_STORE = 1;
  10. const GR_STORE = 6;
  11.  
  12. /**
  13. * @var \Magento\Framework\UrlInterface
  14. */
  15. protected $_url;
  16.  
  17. /** var \Magento\Framework\App\ActionFactory */
  18. protected $actionFactory;
  19.  
  20. /** @var \Magento\Framework\UrlInterface */
  21. protected $url;
  22.  
  23. /** @var \Magento\Store\Model\StoreManagerInterface */
  24. protected $storeManager;
  25.  
  26. /** @var \Magento\Framework\App\ResponseInterface */
  27. protected $response;
  28.  
  29. /**
  30. * @var \Magento\UrlRewrite\Model\UrlFinderInterface
  31. */
  32. protected $urlFinder;
  33.  
  34. /**
  35. * @var \Greecs\Museums\Helper\Data
  36. */
  37. protected $museumsHelper;
  38.  
  39. /**
  40. * CategoryRedirect constructor.
  41. *
  42. * @param \Magento\Framework\UrlInterface $url
  43. * @param \Magento\Framework\App\ActionFactory $actionFactory
  44. * @param \Magento\Store\Model\StoreManagerInterface $storeManager
  45. * @param \Magento\Framework\App\ResponseInterface $response
  46. * @param UrlFinderInterface $urlFinder
  47. */
  48. public function __construct(
  49. \Magento\Framework\UrlInterface $url,
  50. \Magento\Framework\App\ActionFactory $actionFactory,
  51. \Magento\Store\Model\StoreManagerInterface $storeManager,
  52. \Magento\Framework\App\ResponseInterface $response,
  53. \Magento\UrlRewrite\Model\UrlFinderInterface $urlFinder,
  54. )
  55. {
  56. $this->actionFactory = $actionFactory;
  57. $this->url = $url;
  58. $this->storeManager = $storeManager;
  59. $this->response = $response;
  60. $this->urlFinder = $urlFinder;
  61. }
  62.  
  63. public function execute(\Magento\Framework\Event\Observer $observer)
  64. {
  65. $request = $observer->getEvent()->getRequest();
  66. $requestPath = $request->getRequestString();
  67.  
  68. $currentStoreId = $this->storeManager->getStore()->getId();
  69. $rewrite = $this->getRewrite($requestPath, $currentStoreId);
  70. if ($rewrite === null){
  71. if($currentStoreId == self::GR_STORE){
  72. $newRewrite = $this->getRewrite($requestPath, self::EN_STORE);
  73. $lookupStore = self::GR_STORE;
  74. }else{
  75. $newRewrite = $this->getRewrite($requestPath, self::GR_STORE);
  76. $lookupStore = self::EN_STORE;
  77. }
  78.  
  79. if($newRewrite != null){
  80. $newRewrite = $this->getRewriteByTargetPath($newRewrite->getTargetPath(), $lookupStore);
  81. return $this->redirect($request, $this->url->getUrl($newRewrite->getRequestPath()), OptionProvider::TEMPORARY);
  82. }
  83. }
  84. }
  85.  
  86. /**
  87. * @param \Magento\Framework\App\RequestInterface $request
  88. * @param UrlRewrite $rewrite
  89. *
  90. * @return \Magento\Framework\App\ActionInterface|null
  91. */
  92. protected function processRedirect($request, $rewrite)
  93. {
  94. $target = $rewrite->getTargetPath();
  95. if ($rewrite->getEntityType() !== Rewrite::ENTITY_TYPE_CUSTOM
  96. || ($prefix = substr($target, 0, 6)) !== 'http:/' && $prefix !== 'https:'
  97. )
  98. {
  99. $target = $this->url->getUrl('', ['_direct' => $target]);
  100. }
  101.  
  102. return $this->redirect($request, $target, $rewrite->getRedirectType());
  103. }
  104.  
  105. /**
  106. * @param \Magento\Framework\App\RequestInterface $request
  107. * @param string $url
  108. * @param int $code
  109. *
  110. * @return \Magento\Framework\App\ActionInterface
  111. */
  112. protected function redirect($request, $url, $code)
  113. {
  114. $this->response->setRedirect($url, $code);
  115. $request->setDispatched(true);
  116.  
  117. return $this->actionFactory->create('Magento\Framework\App\Action\Redirect');
  118. }
  119.  
  120. /**
  121. * @param string $requestPath
  122. * @param int $storeId
  123. *
  124. * @return UrlRewrite|null
  125. */
  126. protected function getRewrite($requestPath, $storeId)
  127. {
  128. return $this->urlFinder->findOneByData([
  129. UrlRewrite::REQUEST_PATH => trim($requestPath, '/'),
  130. UrlRewrite::STORE_ID => $storeId,
  131. ]);
  132. }
  133.  
  134. /**
  135. * @param $targetPath
  136. * @param int $storeId
  137. *
  138. * @return UrlRewrite|null
  139. * @internal param string $requestPath
  140. */
  141. protected function getRewriteByTargetPath($targetPath, $storeId)
  142. {
  143. return $this->urlFinder->findOneByData([
  144. UrlRewrite::TARGET_PATH => trim($targetPath, '/'),
  145. UrlRewrite::STORE_ID => $storeId,
  146. ]);
  147. }
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement