В Smarty в {extends ....} можно использовать переменную, примерно так: {extends $modx->layout} а $modx->layout можно где-нибудь определить скажем в modxsmarty.class.php в конструкторе: ... ...
function __construct(modX &$modx, $params= array ()) { parent :: __construct(); $this->modx= & $modx;
$this->modx->layout= $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' ? "layout.tpl" : "<strong>empty_layout.tpl</strong>";
... ...