В общем, я пробовал по всякому. Ничего нормального
В общем, я пробовал по всякому. Ничего нормального тут не получается. Но поделюсь одним нестабильным элементом:
Весь главный шаблон оборачиваем в блок, к примеру 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 ...} и все.
Мне сейчас совсем некогда ковырять глубоко Смарти, чтобы объяснить такое странное его поведение. Коммент оставляю, чтобы возможно на досуге вернуться к изучению этого интересного явления.