В основе серверной части ComStarter'a лежит быстрый и очень гибкий микрофреймворк Fat-Free, предоставляющий свою систему роутинга, автозагрузчик классов, шаблонизатор (используется в модификации), валидатор, юнит-тестирование, логирование и ряд других полезных подсистем, образующих прочный фундамент для ComStarter'a.

Также в ComStarter со стандатным пакетом компонентов входит:

  • Bootstrap 3 - популярный свободно распространяемый CSS-фреймворк, позволяющий быстро придать проекту профессиональный дизайн.
  • jQuery - популярная библиотека JavaScript, значительно упрощающая управление деревьями элементов DOM.
  • MeekroDB - небольшая свободно распространяемая библиотека, обеспечивающая удобную работу с базами данных без PDO.

Важно отметить, что фреймворк изначально ориентирован на поддержку мультиязычности и по умолчанию работает с кодировкой UTF-8.

Подробная информация:

По умолчанию фреймворк имеет следующую структуру каталогов:
  • app - каталог приложения. Весь пользовательский код, предназначенный непосредственно для разрабатываемого web-приложения, должен находиться здесь (исключение - js и css файлы).
    • com - каталог для пользовательских компонентов, созданных специально для данного web-приложения. Это могут быть как самостоятельные решения, так и расширения существующих (стандартных) компонентов.
      Важно: Названия подкаталогов самого нижнего уровня должны соответствовать названиям компонентов. См. Созднание собственных компонентов.
    • config - каталог, хранящий все конфигурационные настройки web-приложения. См. подраздел Конфигурационные файлы ниже.
    • libraries - каталог для подключаемых к приложению пользовательских php-библиотек.
    • locales - каталог с файлами переводов на различные языки. См. подраздел Поддержка многоязычности.
    • models - каталог с моделями для работы с используемыми источниками данных (обычно, БД MySQL). См. подраздел Модели.
    • views - каталог для HTML-представлений "общего характера", использующих встроенный шаблонизатор. Обычно это универсальные шаблоны для заголовка и футера, размещаемые на страницах web-приложения. См. подраздел Шаблоны.
  • comstarter - каталог базовых (стандартных) компонентов, моделей и библиотек. Данный каталог не подлежит какой-либо модификации при разработке приложения. Это своего рода "системная" директория фреймворка.
    • com - обширная библиотека готовых компонентов, которые вы можете свободно использовать в своём приложении, однако крайне не рекомендуется вносить в них какие-либо изменния! См. Созднание собственных компонентов.
      Примечание: хотя иметь обширную библиотеку готовых компонентов на все случаи жизни и удобно на стадии разработки, всё же рекомендуется удалять все неиспользуемые компоненты в релиз-версии приложения, оставляя только действительно необходимый набор.
      См. Стандартные компоненты.
    • f3 - каталог микрофреймворка Fat-Free, функциональное ядро системы. Не подлежит какой-либо модификации со стороны разработчика web-приложения.
    • libraries - содержит служебные библиотеки, необходимые для работы фреймворка.
    • models - содержит базовые модели фреймворка, предоставляющие упрощённый унифицированный интерфейс для работы с различными источниками данных, то есть выполняющие роль фасада. От данных моделей в свою очередь должны наследоваться и декорироваться прикладной логикой пользовательские классы (в каталоге app).
  • css - каталог используемых css файлов.
  • fonts - каталог с используемыми web-шрифтами.
  • img - каталог используемых файлов изображений.
  • js - каталог используемых js файлов.
  • tests - каталог с юнит-тестами (может быть дополнен, а при ненадобности удалён). См. подраздел >Юнит-тестирование.
  • tmp - каталог для хранения временных файлов и подкаталогов служебного характера.
Данная структура является довольно гибкой и может быть значительно дополнена и изменена. За подробной информацией см. раздел, посвящённый конфигурационным файлам ниже.

Данный фреймворк позволяет создавать произвольное количество конфигурационных файлов с теми или иными общими настройками для определённых групп компонентов. Это позволяет легко и быстро вносить необходимые изменения в настройки компонентов путём подключения/отключения необходимых файлов конфигурации. Например, вы можете создать единый конфигурационный файл с используемыми в проекте css файлами и подключить его ко всем страницам сайта. При этом есть два особых конфигурационных файла, без которых работа фреймворка невозможна:

  • config.ini - содержит базовые настройки фреймворка, такие как:
    • Пространство имён globals
      • DEBUG - уровень детализации логов от 0 до 3. На рабочем сервере всегда должен быть установлен 0!
      • CACHE - определяет, включено ли кэширование выводимого контента.
      • UI - местоположение общего каталога для файлов представлений.
      • UPLOADS - определяет каталог для первичного временного размещения загружаемого контента.
      • UFILES - каталог для хранения текстовых информационных файлов (используется некоторыми компонентами).
      • PREFIX - префикс, используемый перед константами с текстом локализации. См. подраздел Поддержка многоязычности.
      • ENCODING - кодировка страниц, всегда UTF-8.
      • LOCALES - каталог с файлами переводов. См. подраздел Поддержка многоязычности.
      • IMAGES - каталог для хранения изображений.
      • FALLBACK - язык по умолчанию. См. подраздел Поддержка многоязычности.
      • SALT - "соль", некая уникальная комбинация различных печатных символов, служащая в криптографических целях.
    • Пространство имён components - представляет собой перечень используемых в системе компонентов. Только компоненты с указанными здесь именами попадут в "автозагрузку". Обязательная переменная standards определяет перечень загружаемых стандартных библиотек, остальные переменные представляют собой имена подкаталогов с пользовательскими компонентами в /app/com.
    • Пространство имён db - определяет параметры подключения к используемой базе данных.
  • routes.ini - маршрутизатор приложения, связывает компоненты страниц с именованными URL-адресами. Содержит строки вида:
    GET @index: /page/@code = comMainPage->index, где
    @index - имя маршрута,
    /page/@code - URL страницы без основного домена сайта (в данном примере передаёт в контроллер значение переменной "code", полученное из URL),
    comMainPage->index - название компонента и метод, ответственный за отображение главной страницы (контроллер).

На сегодняшний день данный фреймворк "из коробки" поддерживает 2 возможных источкика данных: MySQL и CSV. При необходимости Вы свободно можете реализовать поддержку иных типов баз данных. Компоненты фреймворка могут работать с любыми моделями (классами), реализующими интерфейс iModel, т.е. следующие методы:

Название метода Входные параметры Результат Описание
log string Служит для логирования SQL команд. Обычно используется в целях профилирования.
getAllData $fields=null - возвращаемые поля (все, если null)
$ordering=null - порядок сортировки (нет, если null)
array Читает все записи из связанной сущности (таблицы) и возвращает их в виде массива ассоциативных массивов, где ключи - имена полей.
getDataByKey $key - значение первичного ключа array | null Возвращает запись с указанным значением первичного ключа в виде ассоциативного массива, либо null, если запись не может быть найдена.
getPrimaryKey string Возвращает имя поля БД, являющегося первичным ключом.
getSchema string Возвращает ассоциативный массив - схему данных данной сущности (таблицы). См. Схема данных.
getSelectedData $where - условное выражение, служащее фильтром
$args - массив подставляемых значений вместо знаков "?" в выражении $where
$ordering=null - порядок сортировки (нет, если null). В случае сортировки по множеству полей - ассоциативный массив, где ключи - имена полей, а значения - направление (ASC или DESC).
array Возвращает записи, соответсвующие условию $where, в виде массива ассоциативных массивов, где ключи - имена полей.
getTitle $field - имя поля в модели, для которого требуется определить заголовок array Возвращает заголовок указанного поля с учётом текущего языка локализации.
countData $where=null - условное выражение, служащее фильтром (если null - без условий)
$args=null - массив подставляемых значений вместо знаков "?" в выражении $where
array Возвращает количество записей, соответсвующих условию $where.
addRecord $data - добавляемая запись в виде ассоциативного массива, где ключи - названия полей array Добавляет запись в таблицу.
saveRecord $data - новая запись в виде ассоциативного массива, где ключи - названия полей
$where - условное выражение, определяющее, какая запись будет заменена на $data
$args - массив подставляемых значений вместо знаков "?" в выражении $where
array Изменяет определённую запись в таблице.
Все вышеприведённые методы уже реазизованы в абстрактных классах CSM_sql и CSM_csv, так что вам достаточно лишь создать наследников, описывающих конкретные детали выбранного источника данных (таблицы).
Пример из модели mTopics, используемой в данной документации для описания навигационной структуры:
protected $file = '../files/topics.csv'; // путь к csv-файлу, связанному с моделью
protected $delimiter = "\t"; // разделитель между столбцами (по умолчанию TAB)
protected $fields = array( // поля csv-файла, о которых известно модели, и требования к ним (правила валидации)
	'sid' => array(
		'rules'=>'required|snake_case|maxlen[20]'
	),
	'parent_sid' => array(
		'rules'=>'required|snake_case|maxlen[20]'
	),
	'menu_sid' => array(
		'rules'=>'required|snake_case|maxlen[20]'
	),
	'order' => array(
		'rules'=>'required|number'
	),
	'menu_order' => array(
		'rules'=>'required|number'
	)
);
В целом, описание полей таблицы данных строится посредством ассоциативного массива со следующими возможными ключами:
'model_field' => array(
	'field'=>'...', // название поля в таблице данных (если отличается от имени ассоциативного ключа model_field)
	'rules'=>'...', // ключевые слова для описания накладываемых ограничений на значения данного поля
	'title'=>'...' // заголовок или ключ перевода при отображении данных для пользователя
),

Для перевода интерфейса на различные языки в системе существует специальный каталог (по умолчанию, app/locales), в котором создаются языковые ini-файлы поддерживаемых языков с необходимыми парами ключ-перевод.

Например, данная фраза находится в файле ru.ini и имеет ключ T_ARCHITECTURE_2. Для её отображения на текущем языке достаточно написать в требуемом месте шаблона [[*T_ARCHITECTURE_2*]].

Текущим считается язык, указанный в конфигурационной переменной LANGUAGE, и это значение должно совпадать с именем языкового ini-файла (без расширения). Также обратите внимание, что парсинг не осуществляется внутри переводов и соответственно вложение конструкций вида [[*TRANSLATE_KEY*]] друг в друга не допускается.

Для организации переключения между различными языками вы можете использовать соответствующий визуальный компонент.

Чтобы предотвратить исполнение html-тегов в переводах, используйте дополнительные квадратные скобки, т.е. [[[*T_ARCHITECTURE_2*]]].

Файлы шаблонов играют в ComStarter особую роль, поскольку именно в них происходит создание и базовая настройка большинства компонентов!

По умолчанию все шаблоны ханятся в поддиректориях views и имеют расширение html. Каждый визуальный компонент, как правило, имеет свой файл шаблона, отвечающий за его прорисовку на web-странице посредством HTML и JS кода.

Comstarter имеет удобный шаблонизатор, поддерживающий следующий синтаксис:

  • [[ @.component_var ]] - подстановка значения переменной компонента 'component_var'.
  • [[ @global_var ]] - подстановка значения глобальной переменной 'global_var', видимой для всех компонентов. Фреймворк содержит ряд стандартных глобальных переменных окружения, например, [[ @SITE_URL ]] хранит URL-адрес сайта.
  • [[* translation_key *]] - подстановка перевода по ключу 'translation_key', см. подраздел Поддержка многоязычности.
  • <foreach (@array_var as @key=>@item)>...\</foreach> - конструкция, предназначенная для отображения 'global_var', видимой для всех компонентов. Фреймворк содержит ряд стандартных глобальных переменных окружения, например, [[ @SITE_URL ]] хранит URL-адрес сайта.
  • <if(condition)>...<else>...</if> - условный оператор, где condition - некое выражение, в котором могут фигурировать как глобальные переменные, так и переменные данного компонента. Блок <else> может отсутствовать.

Но самая главная отосбенность данного шаблонизатора - это возможность расставлять на странице специальные теги для отображения готовых визуальных компонентов. См. Стандартные компоненты. и Созднание собственных компонентов.

Документация по данному разделу находится в разработке...

  FAQ   List of topics   Standard components

© 2024 ComStarter. Все права защищены.