Magento 2: How to get secure category URL programmatically?












2















I have a custom category indexer which grabs Magento categories and index them to a search service. Within each category I need to index it's URL which I do by code



$url = $category->getUrl();


where $category is instance of MagentoCatalogModelCategory.



The issue is when the store is set to use Secure URLs in front end. Then this code always return the not-secure URL. Do you know how to get the secure one?



With product I solved it with code



$url = $product->getUrlModel()->getUrl($product, ['_secure' => true]);


because simple $url = $product->getProductUrl(); returned a not-secure URL as well.



However from Category I don't have access to any UrlModel or any way how to pass _secure parameter to getUrl() method.



My current configuration:
enter image description here



Thanks for any help!










share|improve this question





























    2















    I have a custom category indexer which grabs Magento categories and index them to a search service. Within each category I need to index it's URL which I do by code



    $url = $category->getUrl();


    where $category is instance of MagentoCatalogModelCategory.



    The issue is when the store is set to use Secure URLs in front end. Then this code always return the not-secure URL. Do you know how to get the secure one?



    With product I solved it with code



    $url = $product->getUrlModel()->getUrl($product, ['_secure' => true]);


    because simple $url = $product->getProductUrl(); returned a not-secure URL as well.



    However from Category I don't have access to any UrlModel or any way how to pass _secure parameter to getUrl() method.



    My current configuration:
    enter image description here



    Thanks for any help!










    share|improve this question



























      2












      2








      2








      I have a custom category indexer which grabs Magento categories and index them to a search service. Within each category I need to index it's URL which I do by code



      $url = $category->getUrl();


      where $category is instance of MagentoCatalogModelCategory.



      The issue is when the store is set to use Secure URLs in front end. Then this code always return the not-secure URL. Do you know how to get the secure one?



      With product I solved it with code



      $url = $product->getUrlModel()->getUrl($product, ['_secure' => true]);


      because simple $url = $product->getProductUrl(); returned a not-secure URL as well.



      However from Category I don't have access to any UrlModel or any way how to pass _secure parameter to getUrl() method.



      My current configuration:
      enter image description here



      Thanks for any help!










      share|improve this question
















      I have a custom category indexer which grabs Magento categories and index them to a search service. Within each category I need to index it's URL which I do by code



      $url = $category->getUrl();


      where $category is instance of MagentoCatalogModelCategory.



      The issue is when the store is set to use Secure URLs in front end. Then this code always return the not-secure URL. Do you know how to get the secure one?



      With product I solved it with code



      $url = $product->getUrlModel()->getUrl($product, ['_secure' => true]);


      because simple $url = $product->getProductUrl(); returned a not-secure URL as well.



      However from Category I don't have access to any UrlModel or any way how to pass _secure parameter to getUrl() method.



      My current configuration:
      enter image description here



      Thanks for any help!







      magento2 magento-2.1 category url






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 7 mins ago









      Himanshu

      802521




      802521










      asked Mar 9 '17 at 15:37









      Jan PetrJan Petr

      16414




      16414






















          1 Answer
          1






          active

          oldest

          votes


















          0














          Finally I "hacked" it by getting UrlInstance from Category object, getting secure and non-secure base URLs and replacing it according front-end setting:



          private function getUrl(Category $category)
          {
          $categoryUrl = $category->getUrl();

          if ($this->config->useSecureUrlsInFrontend($category->getStoreId()) === false) {
          return $categoryUrl;
          }

          $unsecureBaseUrl = $category->getUrlInstance()->getBaseUrl(['_secure' => false]);
          $secureBaseUrl = $category->getUrlInstance()->getBaseUrl(['_secure' => true]);

          if (strpos($categoryUrl, $unsecureBaseUrl) === 0) {
          return substr_replace($categoryUrl, $secureBaseUrl, 0, mb_strlen($unsecureBaseUrl));
          }

          return $categoryUrl;
          }


          So far it works fine.



          If you have more elegant (less hacky) solution, please post it here. I'm happy to change the correct answer.






          share|improve this answer























            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "479"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f163644%2fmagento-2-how-to-get-secure-category-url-programmatically%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            Finally I "hacked" it by getting UrlInstance from Category object, getting secure and non-secure base URLs and replacing it according front-end setting:



            private function getUrl(Category $category)
            {
            $categoryUrl = $category->getUrl();

            if ($this->config->useSecureUrlsInFrontend($category->getStoreId()) === false) {
            return $categoryUrl;
            }

            $unsecureBaseUrl = $category->getUrlInstance()->getBaseUrl(['_secure' => false]);
            $secureBaseUrl = $category->getUrlInstance()->getBaseUrl(['_secure' => true]);

            if (strpos($categoryUrl, $unsecureBaseUrl) === 0) {
            return substr_replace($categoryUrl, $secureBaseUrl, 0, mb_strlen($unsecureBaseUrl));
            }

            return $categoryUrl;
            }


            So far it works fine.



            If you have more elegant (less hacky) solution, please post it here. I'm happy to change the correct answer.






            share|improve this answer




























              0














              Finally I "hacked" it by getting UrlInstance from Category object, getting secure and non-secure base URLs and replacing it according front-end setting:



              private function getUrl(Category $category)
              {
              $categoryUrl = $category->getUrl();

              if ($this->config->useSecureUrlsInFrontend($category->getStoreId()) === false) {
              return $categoryUrl;
              }

              $unsecureBaseUrl = $category->getUrlInstance()->getBaseUrl(['_secure' => false]);
              $secureBaseUrl = $category->getUrlInstance()->getBaseUrl(['_secure' => true]);

              if (strpos($categoryUrl, $unsecureBaseUrl) === 0) {
              return substr_replace($categoryUrl, $secureBaseUrl, 0, mb_strlen($unsecureBaseUrl));
              }

              return $categoryUrl;
              }


              So far it works fine.



              If you have more elegant (less hacky) solution, please post it here. I'm happy to change the correct answer.






              share|improve this answer


























                0












                0








                0







                Finally I "hacked" it by getting UrlInstance from Category object, getting secure and non-secure base URLs and replacing it according front-end setting:



                private function getUrl(Category $category)
                {
                $categoryUrl = $category->getUrl();

                if ($this->config->useSecureUrlsInFrontend($category->getStoreId()) === false) {
                return $categoryUrl;
                }

                $unsecureBaseUrl = $category->getUrlInstance()->getBaseUrl(['_secure' => false]);
                $secureBaseUrl = $category->getUrlInstance()->getBaseUrl(['_secure' => true]);

                if (strpos($categoryUrl, $unsecureBaseUrl) === 0) {
                return substr_replace($categoryUrl, $secureBaseUrl, 0, mb_strlen($unsecureBaseUrl));
                }

                return $categoryUrl;
                }


                So far it works fine.



                If you have more elegant (less hacky) solution, please post it here. I'm happy to change the correct answer.






                share|improve this answer













                Finally I "hacked" it by getting UrlInstance from Category object, getting secure and non-secure base URLs and replacing it according front-end setting:



                private function getUrl(Category $category)
                {
                $categoryUrl = $category->getUrl();

                if ($this->config->useSecureUrlsInFrontend($category->getStoreId()) === false) {
                return $categoryUrl;
                }

                $unsecureBaseUrl = $category->getUrlInstance()->getBaseUrl(['_secure' => false]);
                $secureBaseUrl = $category->getUrlInstance()->getBaseUrl(['_secure' => true]);

                if (strpos($categoryUrl, $unsecureBaseUrl) === 0) {
                return substr_replace($categoryUrl, $secureBaseUrl, 0, mb_strlen($unsecureBaseUrl));
                }

                return $categoryUrl;
                }


                So far it works fine.



                If you have more elegant (less hacky) solution, please post it here. I'm happy to change the correct answer.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Mar 10 '17 at 12:19









                Jan PetrJan Petr

                16414




                16414






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Magento Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f163644%2fmagento-2-how-to-get-secure-category-url-programmatically%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Magento 2 controller redirect on button click in phtml file

                    Polycentropodidae