Magento 2: How to get secure category URL programmatically?
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:
Thanks for any help!
magento2 magento-2.1 category url
add a comment |
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:
Thanks for any help!
magento2 magento-2.1 category url
add a comment |
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:
Thanks for any help!
magento2 magento-2.1 category url
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:
Thanks for any help!
magento2 magento-2.1 category url
magento2 magento-2.1 category url
edited 7 mins ago
Himanshu
802521
802521
asked Mar 9 '17 at 15:37
Jan PetrJan Petr
16414
16414
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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.
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
add a comment |
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.
add a comment |
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.
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.
answered Mar 10 '17 at 12:19
Jan PetrJan Petr
16414
16414
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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