Hello!
I’m slowly building my website and trying to better understand Kirby.
I’ve added a search on my website following the Search recipe on the cookbook but encountered some issue and I would like to understand if my solution was the proper one and why.
I’ve put the form in my header snippet but otherwise I’ve followed the cookbook. I could not make the form work (except on the search page). I guessed it was because the $query
variable was not shared with the other templates.
So I’ve added the variable in my site controller and it’s working perfectly now. Was this the right thing to do or should I have done things differently?
I don’t really understand why it is now working or why I only need to add the $query
in the site controller and not the other.
I have a:
- site controller
- note controller
- search controller.
In the site controller:
<?php
return function ($page, $pages, $site, $kirby) {
# Fetch and store the content for the title tag and the meta description
$titleTag = Str::unhtml($page->title()) . " | " . $site->title();
# Stylesheets can be included using the `css()` helper. Kirby also provides the `js()` helper to include script file.
#More Kirby helpers: https://getkirby.com/docs/reference/templates/helpers
$links = css(['assets/css/index.css', '@auto']);
$metaDescription = $page->text()->excerpt(120);
$query = get('q');
# Return an array containing the data that we want to pass to the template
return compact('titleTag' , 'links', 'metaDescription', 'query');
};
In the search controller
<?php
return function ($page, $pages, $site, $kirby) {
# Grab the data from the default controller
$shared = $kirby->controller('site' , compact('page', 'pages', 'site', 'kirby'));
# Store the content for the different title tag
$query = get('q');
$results = $site->index()->listed()->search($query, 'title|text');
$results = $results->paginate(20);
$titleTag = Str::unhtml($page->title()) . " $query | " . $site->title();
$links = css(['assets/css/index.css', 'assets/css/templates/notes.css', '@auto']);
return [
'query' => $query,
'results' => $results,
'pagination' => $results->pagination(),
'titleTag' => $titleTag,
'links' => $links
];
};
Thank you for time and help.