Вы спрашивали, как другие языки справляются с этим, и я не видел ничего, кроме PHP, поэтому я призываю вас проверить Rails. Соглашение Rails элегантно и отражает версию @codeincarnate на PHP.
В платформе MVC текущее представление отображается внутри файла макета для конкретного контроллера, который инкапсулирует соответствующее представление текущего метода. Он использует метод yield для определения раздела, в который должно быть вставлено содержимое представления. Общий файл макета выглядит следующим образом:
<html>
<head>
<% #stylesheet and js includes %>
<body>
<div id="header">Header content, menus, etc…</div>
<%= yield %>
<div id="footer">Footer content</div>
</body>
</html>
Это позволяет приложению иметь другой внешний вид или другую навигацию в зависимости от контроллера. На практике я не использовал разные файлы макетов для каждого контроллера, а вместо этого полагаюсь на макет по умолчанию, который называется «приложение».
Однако предположим, что у вас был веб-сайт компании с отдельными контроллерами для «информации», «блога» и «администратора». Затем вы можете изменить навигацию для каждого в чистом и ненавязчивом виде, обрабатывая различные виды компоновки в их соответствующих файлах компоновки, которые соответствуют их контроллерам.
Вы всегда можете установить пользовательский макет в методе контроллера, указав:
render :layout => 'custom_layout'
В Rails также есть отличные вспомогательные методы, поэтому вам не нужно полагаться на переменные $ global в PHP, чтобы гарантировать правильность путей CSS и Javascript в зависимости от среды разработки (dev, staging, prod…). Наиболее распространенными являются:
#looks in public/stylesheets and assumes it's a css file
stylesheet_link_tag "filename_without_extension"
#looks in public/javascripts and assumes it's a js file
javascript_include_tag "jquery"
Конечно, каждый из этих разделов может быть объяснен гораздо более подробно, и это всего лишь чистка поверхности. Проверьте следующее для более подробной информации:
http://guides.rubyonrails.org/layouts_and_rendering.html