Инструменты пользователя

Инструменты сайта


limb2:ru: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/file_path_resolving.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)