Comments (5)
Ya, this is a good feature, you should submit a PR for this.
from plates.
The idea behind the default value for sections was really more intended for inline short hand, such as:
<title><?=$this->section('title', 'The default title')?></title>
For more complex defaults, I sort of feel like a simple if statement is a better approach, similar to what we have in the Plates documentation:
<html>
<head>
<title><?=$this->e($title)?></title>
</head>
<body>
<img src="logo.png">
<div id="page">
<?=$this->section('page')?>
</div>
<div id="sidebar">
<?php if ($this->section('sidebar')): ?>
<?=$this->section('sidebar')?>
<?php else: ?>
<?=$this->fetch('default-sidebar')?>
<?php endif ?>
</div>
</body>
</html>
That avoids rendering the default-sidebar
unless no sidebar
section has been set.
from plates.
That being said, it would be interesting to make the section default also accept a template name, in addition to only a string. That default template would only be rendered in the event that no section was found.
But how do we identify that a default template was provided and not just some string to output? We could:
- Check to see if the string provided resolves to a template, and if it does render it.
$this->section('sidebar', 'default-sidebar', ['some' => 'data']);
- Append a value to indicate that this is a template, not a string.
$this->section('sidebar', 'template:default-sidebar', ['some' => 'data']);
- Assume this is a template if data is provided (meaning you need the 3rd param even if you don't have any data)
// with data: $this->section('sidebar', 'default-sidebar', ['some' => 'data']); // without data: $this->section('sidebar', 'default-sidebar', []);
from plates.
@reinink in my experience i rarely had to specify just default string, maybe solution 3 is most useful with some fallback extension:
// default template
$this->section('sidebar', 'default-sidebar', ['some' => 'data']);
// default string
$this->section('sidebar')->or('No sidebar :(');
I think that is intuitive enough and makes unnecessary to specify empty data array.
Also or()
can have alternative signature to pass also template name and params, so we can even leave strictly one param to section()
call — ultimately transparent and intuitive.
// by prefix
$this->section('sidebar')->or('::template/name' /*, ['optional'=>'data']*/);
// separate method
$this->section('sidebar')->orTemplate('template/name' /*, ['optional'=>'data']*/);
from plates.
Closing in favor of #169. Will spend some time working on the syntax for this. It also relates to #48.
from plates.
Related Issues (20)
- ResolveTemplatePath not exist ?
- Replace 'callback' type with 'callable' in PhpDoc HOT 1
- Don't seem to be able to install last version using composer HOT 1
- Website blocked in India HOT 1
- Whats holding 3.5v release? HOT 1
- Any hope of documented Themes functionality being release? If not, recommended workaround? HOT 3
- Data documentation outdated
- I have cloned a php project from git. The project is using platesphp. But i am not able to run my branch in localhost. HOT 1
- league/plates v4.0.0-alpha to v3.4.0 create error HOT 3
- Atualização HOT 1
- Release 3.5 with PHP 8.2 compatibility and theme support? HOT 2
- Variables from the rendering process leak into templates
- Bug when pushing to sections inside of fetched templates HOT 8
- Documentation "Engine -> Accessing the engine and template"
- Does it support custom template tags? HOT 2
- How to properly use asset extension? HOT 2
- I can't use League\Plates\Extension\Asset;
- Expected behaviour for multiple sections build over multiple layouts HOT 1
- Deprecated dynamic property in extensions HOT 3
- Passing data to insert() inside layout() HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from plates.