-
В этой статье описывается, как определить версии вашего приложения и использовать Upgrader для выполнения запросов обновления между версиями.
Обновляетесь с IP.Board 3.x?
Если у вас есть приложение, которое изначально было разработано под IP.Board 3.x, вам нужно будет сделать следующее. Не имеет значения установили ли вы сразу версию 4.x или обновились с 3.x.
Создайте новое приложение в обычном режиме в панели администратора.
Если вы установили сразу версию 4.x, а не обновились, вручную создайте таблицы в вашей SQL базе данных.
Во вкладке “Database Schema” в центре разработчика импортировать таблицы базы данных. Важно использовать вкладку "Импорт из базы данных", так как другие варианты будут предполагать создание новых таблиц.
На вкладке “Versions” добавьте все ваши предыдущие версии и запросы, необходимые для обновления – более подробно это рассмотрено ниже. Существует возможность загрузить ваш более ранний файл versions.xml, чтобы быстро их импортировать, но нужно будет указать обновления для каждой версии вручную.
Как определить версии
В Центре разработчика есть вкладка “Versions”, которая показывает все версии вашего приложения. Важно, чтобы там всегда была указана последняя версия приложения. Например для нового приложения у вас должна быть указана версия "1.0.0". Когда вы создадите новую версию приложения (версии 1.0.0), вы должны сразу после этого добавить следующую версию (например 1.0.1), вы укажете информацию о версии при построении приложения, а специальная версия upg_working будет очищена и готова к следующей новой версии. Это нужно для того, чтобы когда вы работаете над приложением, система автоматически вносила любые изменения, которые вы сделали, в базу данных для того, чтобы обновить его с текущей версии до той, которую вы указали.
Схема базы данных
Во вкладке “Database Schema” можно определить все таблицы, которые использует ваше приложение. Когда приложение устанавливается в первый раз, создаются таблицы. По мере внесения изменений в схему базы данных, система автоматически добавит соответствующие запросы, чтобы обновить приложение до последней версии.
Например: у вас есть текущая финальная версия приложения на вкладке “Versions” 1.0.0 и у вас есть таблица на вкладке “Database Schema”. Вы публикуете эту версию, а затем добавляете версию 1.0.1 во вкладке “Versions”. Позже вы добавляете столбец в таблицу на вкладке “Database Schema”. При публикации версии 1.0.1, система автоматически:
Для установки: просто создает таблицу, как это было указано, в том числе с добавленным столбом.
Для обновлений: добавляет столбец.
Вам не нужно вручную добавлять столбец в процессе обновления.
Запросы пользовательской версии и код
Хотя система Database Schema хороша при автоматической обработке таблиц, принадлежащих вашему приложению, может понадобиться так же выполнить и другие запросы (например UPDATE запросы или запросы, чтобы добавить столбцы в таблицы, не принадлежащие вашему приложению). Это делается на вкладке Versions. Просто нажмите на значок "+" для версии, для которой должен быть выполнен запрос (например, если запрос должен быть выполнен при обновлении до версии 1.0.1 запрос, нужно нажать "+" для версии 1.0.1), однако, вы просто добавите это в текущую версию, над которой вы работаете, которая будет обозначаться как "upgrade_working" в списке "Versions").
Вы увидите, что есть специальная "install" версия, которая может быть использована для задания запросов, которые должны быть выполнены при установке. Может потребоваться добавить запрос как к "install" версии, так и к версии с которой вы работаете . Например, если вы работаете над версией 1.0.1, и хотите добавить столбец в таблицу core_groups, который вы не добавляли в версии 1.0.1, вам нужно будет добавить запрос для версии 1.0.1 (для тех, кто обновился с 1.0.0) и специальной "install" версии (для новых установок).
Если вам необходимо запустить код, который не может быть выражен в виде одного запроса, вы также можете использовать пользовательский код. Для этого нажмите на кнопку "</>" для версии, которая нуждается в пользовательском коде. Это создаст файл в директории applications/<ваше_приложение>/setup/<version>/ с каркасом для работы. Просто откройте этот файл и следуйте инструкциям в нем, чтобы добавить туда свой код. Вы также можете сделать это для "install" версии.
Если вы перешли с IP.Board 3, вы можете вручную создать файл queries.php в директории applications/<your_app>/setup/<version>/ с содержимым старого файла mysql_updates.php (установив $SQL переменную). Поскольку эта функция только для поддержки устаревших версий, файл нельзя создать из центра разработчика, только вручную. Если у вас небольшое количество запросов, может быть проще переписать их вызовом метода \IPS\Db::i() и добавить, используя обычный метод (нажав на кнопку "+" для нужной версии в Центре Разработчика).
Удаление кода
Система автоматически удалит все таблицы, определенные схемой базы данных вашего приложения при его удалении. Если вам необходимо выполнить код в дополнение к этому, вы можете сделать это с расширением Uninstall. В Центре разработчиков для вашего приложения, на вкладке “Расширения” нажмите кнопку "+" для core > Uninstall и создайте расширение (название не важно). Это создаст файл с каркасом в каталоге applications/<your_app>/extensions/core/Uninstall/. Просто откройте файл и следуйте инструкциям в нем, чтобы добавить свой код.
-
HTML шаблоны
В директории dev вашего приложения вы найдете каталог HTML, который будет содержать какие-либо шаблоны, которые вы создаете для использования в вашем приложении. Применимы три поддиректории:
admin/ содержит шаблоны для любых интерфейсов панели администратора;
front/ содержит шаблоны для пользовательского и фронт-энд интерфейсов;
global/ содержит шаблоны, которые используются как администраторскими так и фронт-энд областями.
Внутри каждого из этих каталогов вы должны создать подкаталоги, которые объединяют шаблоны в логические группы; как правило, каждый модуль в вашем приложении будет иметь соответствующий каталог и в admin и в front папках шаблонов, хотя вы можете сгруппировать их как вам удобно.
Шаблоны создаются в виде файлов с расширением .phtml в Режиме разработчика. Когда ваше приложение собрано и установлено другими администраторами, эти файлы шаблонов компилируются.
Чтобы использовать шаблоны в коде приложения, вы должны применять следующую конструкцию:
\IPS\Theme::i()->getTemplate( 'group', 'app', 'location' )->template_name( ... );
где:
group
Имя папки, которую вы создали в папке admin/front/global. например MyModule.
app
Ключ вашего приложения.
location
Расположение группы, т.е. admin, front или global.
template_name
Имя шаблона, который является файлом без расширения .phtml.
Любые параметры, которые требуются для вашего шаблона, могут быть переданы, так как template_name компилируется в функцию.
Сам файл шаблона должен содержать специальную строку заголовка в качестве самой первой строки:
<ips:template parameters="$example1=array(), $example2=FALSE" />
Атрибут parameters определяет параметры этого шаблона. Синтаксис этого атрибута идентичен определению параметров в PHP функциях. Если вам не нужны какие-либо параметры, вы все равно должны включать заголовок и атрибут parameters, но просто оставить его пустым.
CSS файлы
CSS файлы, которые требуются для вашего приложения, должны быть созданы в каталоге dev/css/ вашего приложения. Как и в случае HTML-шаблонов, есть три поддиректории для admin css, front-end css, и shared css. Файлы, созданные здесь, должны быть подгружены вручную в вашем коде, например, так:
\IPS\Output::i()->cssFiles = array_merge( \IPS\Output::i()->cssFiles, \IPS\Theme::i()->css( 'filename.css', 'app', 'location' ) );
где:
filename.css
Имя файла CSS (с суффиксом).
app
Ключ вашего приложения.
location
Расположение файла CSS (admin, front или global).
Куда загружать файлы CSS
Так как вы загрузите CSS файлы вручную с помощью вышеуказанного кода, имеет значение где вы разместите их. Если ваш файл CSS очень специфичный для конкретной страницы, вы можете загрузить только метод контроллера (-ов), которые обрабатывают эту страницу. Тем не менее, чаще всего, CSS-файл будет применяться к целому контроллеру в вашем приложении. В этом случае, вы можете загрузить файл CSS в методе контроллера execute(). Обратитесь к документации Контроллеры для получения дополнительной информации.
Если вам нужен CSS для всех front-end или admin страниц вашего приложения, вы можете поместить .css файл непосредственно в /admin или /front-end каталог, с таким же именем, как и у вашего приложения. В этом случае IPS4 будет автоматически загружать файл CSS для всех страниц вашего приложения. Например, ключ вашего приложения my_app, вы можете создать CSS файл /dev/css/front/my_app.css, и он будет включен во всех front-end страницах нашего приложения.
Javascript файлы
Файлы JavaScript обрабатываются аналогично CSS файлам: то есть, они создаются как .js файлы в соответствующем каталоге, а затем подгружаются по требованию в вашем коде. Существует одна небольшая разница: из-за способа архивации JavaScript файлов, при подключении файла JavaScript вы должны указать имя пакета, а не имя файла JavaScript. Javascript файлы архивируются по местоположению и группе что формирует имя результирующего пакета.
Например, если мы создали JavaScript файл dev/js/front/mygroup/somefile.js, то имя пакета будет front_mygroup.js (местоположение, подчеркивание, GroupName) и загрузится следующим образом:
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_mygroup.js', 'app', 'location' ) );
Изображения и другие ресурсы
Изображения (и другие ресурсы, такие как шрифты) должны быть размещены в каталоге /dev/resources, и, как обычно, есть /front, /admin и /global каталоги. Чтобы использовать файл ресурсов в шаблоне напишите следующее:
<img src='{resource="example.jpg" app="yourapp" location="front"}'>
... Изменяйте имя файла, ключ приложения и расположение в зависимости от потребностей.
-
Приложения в Invision Community состоят из нескольких типов классов. Большинство из них вы будете использовать в своих приложениях. Структура файлов ваших приложений должна быть построена верно. Именно это позволяет системе автоматически подгружать нужные классы.
Обзор структуры
В каталоге вашего приложения должна быть приблизительно следующая структура:
/Application.php
Главный файл вашего приложения.
/data
Содержит множество json файлов которые содержат настройки вашего приложения, схемы и другие данные трубуемые приложению.
/dev
Существует только когда вы в режиме разработчика.
/css
Содержит CSS файлы для front/admin каталогов
/email
Содержит шаблоны для нотификации писем, отправляемых вашем приложением
/html
Содержит все HTML шаблоны для front/admin каталогов, которые использует ваше приложение
/js
Содержит javascript контроллеры и шаблоны для front/admin каталогов, которые использует ваше приложение.
/resources
Содержит все другие ресурсы (такие как изображения, шрифты, аудиофайлы, которые использует ваше приложение).
/extensions
Содержит различные расширения которые может использовать ваше приложение.
/hooks
Содержит любые хуки для вашего приложения.
/interface
Каталог interface содержит код, который используется вашим приложением, но не являющийся его частью. Например здесь вы можете подкльчить сторонние javascript или PHP библиотеки которые вы используете.
/modules
Здесь находятся ваши контроллеры. Этот каталог делится на:
/admin
Содержит модули admin контроллеров.
/<module_name>
/<module_name_2> и т.д.
/front
Содержит модули font-end контроллеров
/<module_name>
/<module_name_2> и т.д.
/setup
Установка и обновление скриптов которые использует ваше приложение, если требуется.
/sources
каталог содержит models.
/<model_type>
/<model_type_2> и т.д.
/tasks
Содержит скрипты которые периодически выполняются плинировщиком.
/widgets
Содержит скрипты которые отображают виджеты которые используются в системе блоков.