How do I make the same variable available to all my theme files?Variable available everywhere in template?How to make the pdf files downloadable?How do I use a preprocess function for a node template?How do I pass a theme variable from a template to another?How do i get the all the regions available in the current theme programatically?Pass variables from one preprocess function to another in .themeHow do I integrate the Color module in my theme?Make variable available in template filePass data to hook_preprocess_html from custom moduleCustom theme: variable not made available in menu template
Why is lying to Congress a crime?
Short story about aliens who tried using the common cold as a weapon
SSH from a shared workplace computer
Delete line if next line is the same
Does wall of stone need support or not?
Can you take Bowwow out after returning him to MeowMeow?
First aid scissors confiscated by Dubai airport security
Fill a bowl with alphabet soup
Count number of different name in a file
Employer says he needs to delay payment by 3 months due to bureaucracy
5v home network
A Grandma Riddle
Is it plausible that an interrupted Windows update can cause the motherboard to fail?
How is the corresponding author on a (math) paper typically chosen?
Why is coffee provided during big chess events when it contains a banned substance?
Can you decide not to sneak into a room after seeing your roll?
Giving a character trauma but not "diagnosing" her?
Why is it so hard to land on the Moon?
"Dear Stack Exchange, I am very disappointed in you" - How to construct a strong opening line in a letter?
Did Feynman cite a fallacy about only circles having the same width in all directions as a reason for the Challenger disaster?
Novel set in the future, children cannot change the class they are born into, one class is made uneducated by associating books with pain
How can AnyDVD destroy a DVD drive?
Proofreading a novel: is it okay to use a question mark with an exclamation mark - "?!"
Print the sequence
How do I make the same variable available to all my theme files?
Variable available everywhere in template?How to make the pdf files downloadable?How do I use a preprocess function for a node template?How do I pass a theme variable from a template to another?How do i get the all the regions available in the current theme programatically?Pass variables from one preprocess function to another in .themeHow do I integrate the Color module in my theme?Make variable available in template filePass data to hook_preprocess_html from custom moduleCustom theme: variable not made available in menu template
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty
margin-bottom:0;
In mytheme.theme I have the following:
function mytheme_preprocess(&$variables)
$current_path = Drupal::service('path.current')->getPath();
$result = Drupal::service('path.alias_manager')->getAliasByPath($current_path);
$variables['currenttab'] = explode('/', $result)[1];
This function is extracting the first dirname from my url, for example, httttp://server/dirname/pagename it sets currenttab to 'dirname'.
It is working reasonably well, but I notice that if I click around on my site in a specific way, occasionally I get a page where the sidebar template has the correct currenttab but the navbar has the currenttab value from an older page.
I thought this theme preprocess would make currenttab be the same in all my theme templates, but that does not appear to be the case. Once this problem appears, I can reload the page many times and it persists. I think this is related to the order in which I change urls.
What is going on here?
theming
add a comment
|
In mytheme.theme I have the following:
function mytheme_preprocess(&$variables)
$current_path = Drupal::service('path.current')->getPath();
$result = Drupal::service('path.alias_manager')->getAliasByPath($current_path);
$variables['currenttab'] = explode('/', $result)[1];
This function is extracting the first dirname from my url, for example, httttp://server/dirname/pagename it sets currenttab to 'dirname'.
It is working reasonably well, but I notice that if I click around on my site in a specific way, occasionally I get a page where the sidebar template has the correct currenttab but the navbar has the currenttab value from an older page.
I thought this theme preprocess would make currenttab be the same in all my theme templates, but that does not appear to be the case. Once this problem appears, I can reload the page many times and it persists. I think this is related to the order in which I change urls.
What is going on here?
theming
add a comment
|
In mytheme.theme I have the following:
function mytheme_preprocess(&$variables)
$current_path = Drupal::service('path.current')->getPath();
$result = Drupal::service('path.alias_manager')->getAliasByPath($current_path);
$variables['currenttab'] = explode('/', $result)[1];
This function is extracting the first dirname from my url, for example, httttp://server/dirname/pagename it sets currenttab to 'dirname'.
It is working reasonably well, but I notice that if I click around on my site in a specific way, occasionally I get a page where the sidebar template has the correct currenttab but the navbar has the currenttab value from an older page.
I thought this theme preprocess would make currenttab be the same in all my theme templates, but that does not appear to be the case. Once this problem appears, I can reload the page many times and it persists. I think this is related to the order in which I change urls.
What is going on here?
theming
In mytheme.theme I have the following:
function mytheme_preprocess(&$variables)
$current_path = Drupal::service('path.current')->getPath();
$result = Drupal::service('path.alias_manager')->getAliasByPath($current_path);
$variables['currenttab'] = explode('/', $result)[1];
This function is extracting the first dirname from my url, for example, httttp://server/dirname/pagename it sets currenttab to 'dirname'.
It is working reasonably well, but I notice that if I click around on my site in a specific way, occasionally I get a page where the sidebar template has the correct currenttab but the navbar has the currenttab value from an older page.
I thought this theme preprocess would make currenttab be the same in all my theme templates, but that does not appear to be the case. Once this problem appears, I can reload the page many times and it persists. I think this is related to the order in which I change urls.
What is going on here?
theming
theming
edited 11 hours ago
Innovine
asked 11 hours ago
InnovineInnovine
1226 bronze badges
1226 bronze badges
add a comment
|
add a comment
|
1 Answer
1
active
oldest
votes
You would have to add a cache context:
$variables['#cache']['contexts'][] = 'url.path';
Now you cache for each relative path a different version of the template.
However, it is not a good idea to add this context to all templates. Only add it to those templates you intend to use the variable, otherwise you fill up your cache with a lot of useless variations:
function mytheme_preprocess(&$variables, $hook)
if (in_array($hook, ['foo', 'bar']))
$variables['#cache']['contexts'][] = 'url.path';
// add variables depending on the relative url
I added this to my single preprocess function and it looks like it solves it, much thanks!! When you say "add it to those templates you intend to use.." do you mean I should have a preprocess hook for that template, and not have the cache in the most general preprocess function?
– Innovine
11 hours ago
You can still use the generic preprocess hook, but check $hook for the templates you want to target. See the code example I've added to the answer.
– 4k4
10 hours ago
I'm digging into it now, thanks again!
– Innovine
10 hours ago
add a comment
|
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "220"
;
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/4.0/"u003ecc by-sa 4.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');
);
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%2fdrupal.stackexchange.com%2fquestions%2f287038%2fhow-do-i-make-the-same-variable-available-to-all-my-theme-files%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
You would have to add a cache context:
$variables['#cache']['contexts'][] = 'url.path';
Now you cache for each relative path a different version of the template.
However, it is not a good idea to add this context to all templates. Only add it to those templates you intend to use the variable, otherwise you fill up your cache with a lot of useless variations:
function mytheme_preprocess(&$variables, $hook)
if (in_array($hook, ['foo', 'bar']))
$variables['#cache']['contexts'][] = 'url.path';
// add variables depending on the relative url
I added this to my single preprocess function and it looks like it solves it, much thanks!! When you say "add it to those templates you intend to use.." do you mean I should have a preprocess hook for that template, and not have the cache in the most general preprocess function?
– Innovine
11 hours ago
You can still use the generic preprocess hook, but check $hook for the templates you want to target. See the code example I've added to the answer.
– 4k4
10 hours ago
I'm digging into it now, thanks again!
– Innovine
10 hours ago
add a comment
|
You would have to add a cache context:
$variables['#cache']['contexts'][] = 'url.path';
Now you cache for each relative path a different version of the template.
However, it is not a good idea to add this context to all templates. Only add it to those templates you intend to use the variable, otherwise you fill up your cache with a lot of useless variations:
function mytheme_preprocess(&$variables, $hook)
if (in_array($hook, ['foo', 'bar']))
$variables['#cache']['contexts'][] = 'url.path';
// add variables depending on the relative url
I added this to my single preprocess function and it looks like it solves it, much thanks!! When you say "add it to those templates you intend to use.." do you mean I should have a preprocess hook for that template, and not have the cache in the most general preprocess function?
– Innovine
11 hours ago
You can still use the generic preprocess hook, but check $hook for the templates you want to target. See the code example I've added to the answer.
– 4k4
10 hours ago
I'm digging into it now, thanks again!
– Innovine
10 hours ago
add a comment
|
You would have to add a cache context:
$variables['#cache']['contexts'][] = 'url.path';
Now you cache for each relative path a different version of the template.
However, it is not a good idea to add this context to all templates. Only add it to those templates you intend to use the variable, otherwise you fill up your cache with a lot of useless variations:
function mytheme_preprocess(&$variables, $hook)
if (in_array($hook, ['foo', 'bar']))
$variables['#cache']['contexts'][] = 'url.path';
// add variables depending on the relative url
You would have to add a cache context:
$variables['#cache']['contexts'][] = 'url.path';
Now you cache for each relative path a different version of the template.
However, it is not a good idea to add this context to all templates. Only add it to those templates you intend to use the variable, otherwise you fill up your cache with a lot of useless variations:
function mytheme_preprocess(&$variables, $hook)
if (in_array($hook, ['foo', 'bar']))
$variables['#cache']['contexts'][] = 'url.path';
// add variables depending on the relative url
edited 10 hours ago
answered 11 hours ago
4k44k4
59k5 gold badges74 silver badges120 bronze badges
59k5 gold badges74 silver badges120 bronze badges
I added this to my single preprocess function and it looks like it solves it, much thanks!! When you say "add it to those templates you intend to use.." do you mean I should have a preprocess hook for that template, and not have the cache in the most general preprocess function?
– Innovine
11 hours ago
You can still use the generic preprocess hook, but check $hook for the templates you want to target. See the code example I've added to the answer.
– 4k4
10 hours ago
I'm digging into it now, thanks again!
– Innovine
10 hours ago
add a comment
|
I added this to my single preprocess function and it looks like it solves it, much thanks!! When you say "add it to those templates you intend to use.." do you mean I should have a preprocess hook for that template, and not have the cache in the most general preprocess function?
– Innovine
11 hours ago
You can still use the generic preprocess hook, but check $hook for the templates you want to target. See the code example I've added to the answer.
– 4k4
10 hours ago
I'm digging into it now, thanks again!
– Innovine
10 hours ago
I added this to my single preprocess function and it looks like it solves it, much thanks!! When you say "add it to those templates you intend to use.." do you mean I should have a preprocess hook for that template, and not have the cache in the most general preprocess function?
– Innovine
11 hours ago
I added this to my single preprocess function and it looks like it solves it, much thanks!! When you say "add it to those templates you intend to use.." do you mean I should have a preprocess hook for that template, and not have the cache in the most general preprocess function?
– Innovine
11 hours ago
You can still use the generic preprocess hook, but check $hook for the templates you want to target. See the code example I've added to the answer.
– 4k4
10 hours ago
You can still use the generic preprocess hook, but check $hook for the templates you want to target. See the code example I've added to the answer.
– 4k4
10 hours ago
I'm digging into it now, thanks again!
– Innovine
10 hours ago
I'm digging into it now, thanks again!
– Innovine
10 hours ago
add a comment
|
Thanks for contributing an answer to Drupal Answers!
- 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');
);
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%2fdrupal.stackexchange.com%2fquestions%2f287038%2fhow-do-i-make-the-same-variable-available-to-all-my-theme-files%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');
);
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');
);
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');
);
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