limb2:ru:2_x:file_path_resolving

Резолвинг имен файлов

С самого начала Limb разрабатывался с учетом разделения общей установки между несколькими проектами. Иногда проектам необходимо реализовать поведение, несколько отличное от заданного изначально. Вот почему Limb использует специальную технологию разрешения путей к файлам.

Сначала файл ищется в файловой структуре проекта, затем - в файловой структуре Limb.

Эта технология использует две константы, которые Вы определяете в setup.php (или в setup.override.php): PROJECT_DIR и LIMB_DIR.

Таким образом файловая структура Limb и основанного на ней проекта похожи.

Этот метод разрешения PROJECT_DIR → LIMB_DIR применяется практически ко всему:

  • ко всем фабрикам объектов, вроде db_table_factory, action_factory, site_object_factory и т.д.
  • к файлам *.ini - локализационным строкам, конфигурационным файлам и т.д.
  • к шаблонам WACT, поэтому это простейший способ переопределить в проекте шаблон Limb

Иногда это даже не технология разрешения имен файлов, а технология разрешения имен классов (это зависит от резолвера). Например, путь к действию может выглядеть так: /article/edit_article_actions. В этом случае action_factory интерпретирует ее так:

  • добавит '.class.php' к каждому пути
  • поищет в PROJECT_DIR/core/actions/
  • поищет в LIMB_DIR/core/actions/

В действительности, если необходима отличная функциональность в отдельном проекте, вы можете скопировать файл из Limb в свой проект и изменить его. Это допустимый способ расширять и переопределять базовую функциональность.

С точки зрения чистого ООП это немного грязный трюк - мы знаем об этом и работаем над технологией пакетов. В будущем эта возможность останется только для шалонов WACT.

Разрешение имен шаблонов работает немного по-другому. Здесь во время компиляции шаблонов, принимается во внимание локализация.

Сначала производится поиск в каталогах (порядок важен, возвращается первое сообщение):

  • PROJECT_DIR . '/design/main/templates/_' . CONTENT_LOCALE_ID . '/' . $file_path
  • PROJECT_DIR . '/design/main/templates/' . $file_path
  • LIMB_DIR . '/design/main/templates/_' . CONTENT_LOCALE_ID . '/' . $file_path
  • LIMB_DIR . '/design/main/templates/' . $file_path

Вот почему, если Вы хотите настроить шаблон в соответсвии с текущей локализацией во время выполнения, Вам необходимо сделать что-то наподобие этого:

<locale:LOCALE name='en'>
  <core:INCLUDE file='_en/type_tables.html'>
</locale:LOCALE>
<locale:LOCALE name='ru'>
  <core:INCLUDE file='/_ru/type_tables.html'>
</locale:LOCALE>

Хорошей практикой является использование тэга <locale:string> для вывода локализованных строк в шаблонах </locale:string>.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
  _____   ____  _      __   ____  ____ 
 / ___/  / __/ | | /| / /  / __/ / __ \
/ (_ /  _\ \   | |/ |/ /  / _/  / /_/ /
\___/  /___/   |__/|__/  /___/  \___\_\
 
limb2/ru/2_x/file_path_resolving.txt · Последнее изменение: 2010/11/10 10:02 — 127.0.0.1