View placeholders allow you to inject content from view scripts, or alternatively some content you've defined in a Controller file, into the layout. View scripts are probably the most common use case, though, since other content can be passed through View attributes as well. By default there's a single placeholder available,
$placeholders->default, which will contain the rendered output of current page using whatever view script is selected (by default "default.php").
If you want to pass additional markup from Controller to layout, you can create a new placeholder simply by calling it: add an echo statement into the layout (
<?= $placeholders->placeholder_name ?>) and then store some data to this placeholder in the Controller:
$this->view->placeholders->placeholder_name = "<p>Content for the layout.</p>";
Alternatively you can create a view script matching the placeholder name, such as /site/templates/views/scripts/home/placeholder_name.php, and wireframe will automatically render the page using that view script and inject the result into the placeholder slot:
<?php namespace ProcessWire; echo "<p>Content for the layout.</p>";
That right there probably isn't the best example, so consider it this way: if you have a shared header that you use for most of your pages, you can add the "shared version" directly to the layout, and additionally check if $placeholders->header contains a value – and if it does, output it instead. Now you just need to create a header.php view script for any page you want to have a custom header.