Skip to content
Grav 2.0 is officially stable. Read the announcement →

Community guidelines

Please keep discussions civil and on-topic. Repeated violations may lead to a temporary ban.

Plugins

How to access to header custom properties with php?

first-time

Solved by Ron Wardenier View solution

Started by Zwitterio 7 years ago · 6 replies · 2161 views
7 years ago

I already know how to access properties from header in twig templates.
If I want to get the title of an article and printing it in a page, I can write:
page.header.title
If I want to get strings associated to my custom keys, I can do that like this:
page.header.metadata.author

Doing this, I call the string stored in this yaml frontmatter:
metadata:

author: 'author-person'

How can I store in a php var these contents?
I'm searching through docs since yesterday for hours and hours but I didn't find a specifical solution. I saw that I can recall taxonomy with a method, but I don't get the general approach.

7 years ago

There are numerous ways to store data.

You're already comfortable with storing data as variables in a page header (BTW also frequently named "frontmatter") so you could create a page just to store your data. And likely hide it from the menu by setting visibility: false in its frontmatter.

More suggestions are given in /forum/plugins/store-and-read-data-in-grav-t4560

I hope this helps.

👍 1
7 years ago

Thank you, the link you passed is very useful and I think it has answers to a lot of my questions, but I really can't find the answer to my original question. I'm sure it's my fault: maybe I didn't explain my problem well. What I have to do it's basically get the following info, for example:

page.header.metadata.author

BUT I don't want to access the data like this, in twig; instead, I want to do the same thing in php (exactly the same thing). The problem is all here: I can solve the problem in twig, but I'm asking here because I think it's better to split the logic and the template, so I would prefer to get the info in php and store this info in a variable that I will recall in the twig template. Maybe it's a simple task, but I'm having problems and I'm not able to do that.
Thank you again

7 years ago Solution

You need to create a plugin for that. To learn how, follow the Plugin Tutorial.

In your plugin you first must decide on what Grav events you want to act.

Finally, for an example of how to read and handle page header or frontmatter variables see for example https://github.com/bleutzinn/grav-plugin-add-page-by-form/blob/master/add-page-by-form.php#L366

This in addition to the resources mentioned earlier should get you going again.

👍 1
7 years ago

I'm studying from this examples, but I continue to obtain the same error when trying to get frontmatter infos:
"Undefined property: stdClass::$pagefrontmatter"

In my php, I did this:

PHP
public function onTwigSiteVariables()
    {
        $page = $this->grav['page'];
        $header = $page->header();

        // Get variables from the plugin configuration
        if (isset($header->pagefrontmatter) && is_array($header->pagefrontmatter))
        {
          $page_frontmatter = $header->pagefrontmatter;
        }
        else
        {
          $page_frontmatter = array();
        }
...

I basically copypaste the function in the form plugin or other plugins but it doesn't work: it's like $pagefrontmatter doesn't exists at all.

EDIT: I get it. I simply didn't know that to make this vars available in twig, I was supposed to add those like this:

PHP
$twig = $this->grav['twig'];
$twig->twig_vars['LOL'] = 'LOL string';

Now that I know this, I should be able to do the rest. I'm gonna try ASAP

EDIT 2: Although I know how to do more, I continue to can't find pagefrontmatter.
EDIT 3: I was wrong in trying to recall from pagefrontmatter. It's sufficient to recall objects from $page->header();

Thank you very much for your suggestions

last edited 06/12/19 by Zwitterio
7 years ago

I'm glad you figured it out. In hindsight the code I pointed you to may be confusing. There (line 366) "pageconfig" and below that "pagefrontmatter" which you tried to use are actually variables in the page header. Using title instead would have been simpler since that variable is by default present in every page header.
Sorry for not being very clear on that.

7 years ago

Oh, I see! I didn't noticed that. By the way, I enjoy diving into the code, when I have some input. It's good for learning, so thanks again for pointing me the right code to start.

Suggested topics

Topic Participants Replies Views Activity
Plugins · by Rene, 1 week ago
2 46 1 week ago
Plugins · by Xavier, 4 weeks ago
2 55 4 weeks ago
Plugins · by Luka Prinčič, 7 years ago
3 1181 1 month ago
Plugins · by Sebastian van de Meer, 1 month ago
1 49 1 month ago
Plugins · by PIERROT Alain, 2 months ago
3 73 2 months ago