Наследование вот что такое. Есть, например, родительский шаблон. В нем указаны все заголовки, основной дизайн, меню и т.д. И есть дочерний шаблон, скажем, контент которого должен занять определенное место в родительском. Назовем их main и content.
Тогда наша картина примет такой вид:
main.tpl:
<html>
<head>
<title>{block name=title}Главная страница{/block}</title>
</head>
<body bgcolor="#FFFFFF">
<div id="main">
<div id="header"></div>
<div id="container">
{block name=pagecontent}Добро пожаловать на наш сайт!{/block}
</div>
</div>
</body>
</html>
cintent.tpl:
{extends file="main.tpl"}
{block name=title}Наши координаты{/block}
{block name=pagecontent}
<h2>Контакты:</h2>
<p>Обращаться по телефону: 0(000)000-00-00</p>
{/block}
Теперь если мы из смарти вызываем display main, то видим главную страницу.
А если вызываем display content, то блоки перегружаются и на экран выводится другая страница.
Мы можем перегружать сколь угодно много блоков. И строить цепочки сколь угодно длинные. Добавлять в родителя таблицы стилей, менять title, забрасывать различные картинки из потомка - короче классная штука, ОЧЕНЬ удобная.
Ну и, конечно же, при всем при этом никто не отменял переменные, которые мы можем передавать из контроллера.