В общем, я пробовал по всякому. Ничего нормального тут не получается.
Но поделюсь одним нестабильным элементом:
Весь главный шаблон оборачиваем в блок, к примеру resource.
Далее создаем новый промежуточный layout-wraper.tpl с таким содержимым
{extends "layout.tpl"} {block name="resource"} {if $is_ajax} {block name=content} {$smarty.block.parent} {/block} {else} {$smarty.block.parent} {/if} {/block}
Здесь важно, чтобы блока content не было в главном layout-шаблоне. Вот тогда при вызове какого-либо более глубокого расширяемого шаблона по условию выводился только блок content.
Но у меня это было очень не стабильно. Это скорее бага, чем фича. Если захочешь с этим поэкспериментировать, то до конечного шаблона создай еще один расширяющий шаблон, в котором будет только расширение прописано {extends ...} и все.
Мне сейчас совсем некогда ковырять глубоко Смарти, чтобы объяснить такое странное его поведение. Коммент оставляю, чтобы возможно на досуге вернуться к изучению этого интересного явления.