Using block value in multiple places
- Crell
- Member | 3
I'm trying to allow a page title to be set from a template, and then show in
multiple places in the overall page. For example, in the
<title>
tags and in an <h1>
in the page
body. I'm unclear how to do that, however.
Here's what I'm doing now:
{* Some file somewhere *}
{layout 'layout.latte'}
{block title}Test Page{/block}
{block content}
// ...
{/block}
{* layout.latte *}
{default $title = 'Untitled'}
<html>
<head>
<title>{$siteName}: {block title}{/block}</title>
</head>
<body>
<h1>{$title}</h1>
<main>
{block content}{/block}
</main>
</body>
</html>
The <title>
gets filled in with the right value just fine.
The <h1>
obviously does not work, and gets just
“Untitled”. But… I'm not sure how to make it work correctly, and use the
same string in both places. I'm fine using a block or a variable or whatever,
I just don't know what the best practice is here. Please advise.
- MajklNajt
- Member | 498
I am using this setup:
{* Some file somewhere *}
{layout 'layout.latte'}
{define title}Test Page{/define}
{block content}
// ...
{/block}
{* layout.latte *}
<html>
<head>
<title>{$siteName}: {ifset title}{include title}{elseifset}Untitled{/ifset}</title>
</head>
<body>
<h1>{ifset title}{include title}{elseifset}Untitled{/ifset}</h1>
<main>
{include content}
</main>
</body>
</html>
EDIT: elseifset
Last edited by MajklNajt (2024-08-31 19:23)
- Crell
- Member | 3
Thanks! That kept giving me this compile error:
Fatal error: Uncaught Latte\CompileException: Unexpected end (in ‘…/templates/layout.latte’ on line 10 at column 63) in /app/vendor/latte/latte/src/Latte/Compiler/TagParser.php on line 254
However, it works with {else}
, not {elseifset}
. Are
we perhaps running different versions? I'm on 3.0.18.