Перейти к содержанию

Тимофей

invision Member
  • Постов

    14
  • Зарегистрирован

  • Посещение

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

Достижения Тимофей

  1. Тимофей

    Языковые строки

    Invision Community поддерживает множество языков и инструментов перевода таких как визуальный редактор языков. Весь текст который используется вашим плагином должен быть приведен к языковой строке. Языковые строки определяются key/value парами. Чтобы добавить строку языка, просто откройте файл /plugins/<ваш_плагин>/dev/lang.php и добавьте элемент в массив. Затем чтобы использовать языковые строки, используйте их в контроллере: \IPS\Member::loggedIn()->language()->get( 'KEY' ); Или вот так в шаблоне: {lang="KEY"}
  2. Плагины поддерживают внешние ресурсы такие, как изображения, JavaScript, CSS файлы и шаблоны. HTML шаблоны HTML файлы становятся шаблонами в группе core -> global -> plugins. Другими словами, вы получите содержание HTML-файлов, созданных с помощью этого кода в контроллерах, где filename = имя вашего шаблона: \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->filename( ... ); Или следующий код для использования в других шаблонах: {template="filename" group="plugins" location="global" app="core"} Вы должны создавать свои файлы, используя расширение ".phtml". Первая строка файла должна иметь следующий тег: <ips:template parameters="$example1, $example2" /> Заменить $example1, $example2 переменными, которые вы хотите передать. Можно и не передавать параметры. В этом случае атрибуты параметров должны быть просто пустой строкой. Вы можете использовать логику шаблонов и теги шаблонов. Обратите внимание, что если какой-либо код в шаблоне вызывает исключение (что может произойти, если вы используете особенно сложную логику шаблона/теги без четких определений), содержимое шаблона будет игнорироваться, и будет возвращаться пустая строка. CSS/Javascript файлы Любые CSS и JavaScript файлы, которые вы создадите, будут скомпилированы с остальной частью CSS и JavaScript автоматически, поэтому вам не нужно ничего делать, кроме создания файлов. Убедитесь, что вы создаете файлы с нужным расширениями в соответствующем каталоге вашего плагина. Изображения При запуске плагина, изображения будут размещены в core -> global, в директории под названием plugins. Другими словами, вы будете отображать изображения, которые вы разместили в папке /resources с помощью кода в шаблонах: <img src='{resource="plugins/example.jpg" app="core" location="global"}'> Вы должны поместить все изображения непосредственно в каталоге /resources, не создавая подкаталоги.
  3. При установке Для запуска кода изменения базы данных при установке вашего плагина, откройте файл /plugins/<ваш_плагин>/dev/setup/install.php и следуйте инструкциям в комментариях. Примечание. Чтобы файл установки install.php был выполнен, вы должны добавить начальную (initial) версию в центр разработчика. При обновлении Плагины поддердивают систему контроля версий. Всякий раз, когда вы выпускаете новую версию своего плагина, вам необходимо добавить новую версию в Plugin Developer Center. При добавлении версии, необходимо указать идентификационный номер (например, "10000", "10001" и т.д.), а также удобную для восприятия пользователем строку (например, "1.0.0", "1.0.1", и т.д.). Конкретного стандарта на то, как должен быть отформатирован идентификационный номер, нет, но необходимо увеличить номера для более новых версий. Строка для пользователя должна быть в формате "x.y.z". В файле, который находится в каталоге /plugins/<your plugin>/dev/setup, вы можете указать код, который будет выполняться при обновлении до этой версии (см комментарии в файле для более подробной информации). Важно отметить, что при установке, будет выполнена только установка, поэтому, когда вы вносите изменения, как правило, необходимо добавить их как к установщику, так и в соответствующий файл обновления для этой версии.
  4. Тимофей

    Задачи

    Задачи – это скрипты, которые выполняются через определенные промежутки времени. Они полезны для выполнения вспомогательных процессов, которые должны выполняться регулярно. Важно отметить, однако, что на них не всегда можно полагаться - хотя Invision Community обеспечивает возможность выполнения задач для администраторов, используя cron, он может быть выключен, и в этом случае задачи могут быть выполнены только тогда, когда пользователь запустит скрипт на сайте. Вы можете создавать задачи в Plugin Developer Center. При создании задачи, файл вашей задачи автоматически будет создан в директории /plugins/<ваш_плагин>/task. Комментарии в этом файле объяснят, как реализовать поставленную задачу.
  5. Тимофей

    Настройки

    Как и полноценные приложения, плагины могут иметь системные настройки, которые позволяют администраторам настраивать их. Например, у вас могут быть настройки, которые включают/отключают какую-то часть вашего функционала, или полей, которые могут принимать некоторые значения аутентификации, используемые в какой-либо другой системе. Если вашему плагину требуется кастомизация пользователем, настройки - идеальный инструмент для реализации этого. Выделение места в IPS\Settings \IPS\Settings является хранилищем для пар данных key/value - оно делится между всеми приложениями и плагинами и доступен отовсюду. Есть также ярлыки для быстрого доступа к его содержимому, которое находится в шаблонах. Его основная цель предназначена для хранения настроек, которые задает администратор в админцентре. Для того, чтобы использовать это, необходимо ввести ключи, которые вы хотите выделить для вашего плагина и значения по умолчанию в Plugin Developer Center. Ключи не находятся в пространстве имен, поэтому рекомендуется выбирать ключи, которые вряд ли будут использоваться другими приложениями или плагинами. Создание страницы настроек Ваш плагин может иметь одну страницу настроек, которая будет отображаться когда администратор нажимает на кнопку "изменить" рядом с плагином. В большинстве случаев это будет просто обычная форма которая создается с помощью помощника форм. Несмотря на то, что помощник очень гибкий (может создавать вкладки, боковые панели и широкий спектр типов ввода), вы не ограничены им и можете отображать настройки, как вам нравится. В каталоге /plugins/<ваш_плагин> вы найдете файл под названием "settings.rename.php" – переименуйте его в "settings.php". В нем будет содержаться код, который запускается, когда пользователь открывает вашу страницу настроек. Файл-пример создан помощником, и все что вам нужно сделать для его использования, это добавить дополнительные поля ввода. Если вы хотите использовать кастомный интерфейс, вам просто нужно возвращать либо строку (с контентом для отображения) или TRUE, для пропуска страницы настроек. Ваш код будет обработан и, поэтому, вам не нужно использовать <?PHP тег - включите его в начальный файл чтобы подсветка синтаксиса работала как нужно, но нельзя забывать что он должен быть закомментирован.
  6. Тимофей

    Хуки тем

    Хуки тем позволяют изменять шаблоны HTML. Шаблоны HTML в Invision Community структурированы по группам, месту расположения и приложениям. У каждого приложения по меньшей мере 3 местоположения: front (шаблоны используемые для фронт-энда) admin (шаблоны используемые для администратора) global (шаблоны которые используются для обоих) Хотя некоторые приложения могут иметь больше, для конкретных целей (например, приложение core имеет другое место для установки/обновления - setup). Каждое местоположение может содержать любое количество групп - группы являются наборами шаблонов, например, приложение core имеет одну группу (в front) называется messaging, который содержит все шаблоны для создания и просмотра личных бесед. Один хук тем действует в одной группе шаблонов. Вы можете создать хуки тем в Plugin Developer Center. При создании есть два способа использования хуков тем - каждый из которых работает по-разному и поэтому будет уместен при различных потребностях. CSS селекторы При редактировании ваших хуков тем в Plugin Developer Center, будет отображаться панель, показывающая все шаблоны в этой группе: При выборе любого шаблона появляется интерфейс с вкладками, показывающий изменения, которые ваш хук делает в этом шаблоне, и позволяет создавать другие изменения. Чтобы модифицировать выбранный шаблон, вам нужен CSS селектор - вы можете использовать любой из селекторов, поддерживаемых JQuery (стоит отметить, что jQuery не участвует в создании вашего хука, это просто чтобы показать, что поддерживаемые селекторы одинаковы). Самый простой способ выбрать селектор - использовать кнопку "Select Element", которая запустит модель отображения шаблона и позволит просто выбрать элемент, который вы хотите использовать: Важно отметить, что при использовании функции "Select Element", используется наиболее специфический селектор CSS для выбранного элемента, однако, селектор может также соответствовать другим элементам, так что вам, возможно, потребуется настроить его. При работе с контентом, в дополнение к переменным, которые доступны для шаблона (которые показаны рядом с редактором) вы также можете использовать любые переменные, доступные в этом пункте в шаблоне (например, если вы вставили код в цикл foreach, вы можете использовать переменные, созданные им). Вы можете также использовать логику шаблонов и теги шаблонов Invision Community. Режим PHP Под капотом, каждый шаблон группы скомпилирован в PHP класс, с помощью метода для каждого шаблона. Вы можете расширить этот класс вручную отредактировав файл, который будет создан в /plugins/<your plugin>/hooks. Важно отметить, что при использовании этого режима, когда вы перегружаете группы скомпилированных шаблонов, возвращаемое значение будет в виде HTML-кода, который будет отображаться, без какой-либо логики шаблонов или тэгов шаблона. Все те же соображения, что и для хуков кода (см "Важные моменты которые нужно помнить при создании хуков") также применимы и здесь.
  7. Тимофей

    Хуки кода

    Хуки кода позволяют расширить любой класс в Invision Community, или функционал установленного приложения. Вы можете создавать хуки кода в Plugin Developer Center. Как вы могли заметить, в коде классы при определении начинаются с подчеркивания, а вызывается без него. Например, в /system/Member/Member.php определение следующее: namespace IPS; class _Member extends \IPS\Patterns\ActiveRecord Уже в коде класс вызывается так \IPS\Member а не \IPS\_Member. При создании хука определите класс который вы хотите расширить без подчеркивания. Когда вы редактируете код будет следующая надпись "extends _HOOK_CLASS_" –это из-за того что класс который он расширяет может варьироваться, если несколько хуков перегружают один и тот же класс. Вы можете редактировать хуки как в Plugin Developer Center так и вручную, путем изменения файла, находящегося в /plugins/<ваш_плагин>/hooks. Использовать Plugin Developer Center удобнее так как все свойства и методы класса которые вы расширяете показаны в боковой панели и щелчок на любой из них вставит выражение в редактор. Важные моменты которые нужно помнить при создании хуков: Первая строчка в классе, который вы создаете, должна быть такой: //<?php – это если вы хотите править файл вручную в редакторе, чтобы подсветка синтаксиса работала верно, так или иначе тэг <?php не должен применяться без комментариев. Ваш хук определится как расширение _HOOK_CLASS_ - синтаксически это неверно, но это нельзя менять. Система сама изменит это на нужный класс который может изменяться в зависимости от того сколько на нем хуков. Если ваш код создает PHP ошибку или выдает RuntimeException, ваш хук будет проигнорирован и система вернется к исходному классу. Если вы хотите намеренно создать исключение, добавьте объект соответствующего класса в исключение. При переопределении метода НЕОБХОДИМО вызвать родительский метод. Идеально если вы вставите его в начало или конец метода. Это необходимо для работы нескольких хуков на один метод. При переопределении метода, вам НЕ СЛЕДУЕТ копировать код оригинального метода в ваш хук. Необходимо убедиться, что ваш хук не будет конфликтовать с багфиксами или изменениями оригинального класса в будущих версиях. Кроме того, это противоречит условиям лицензии Invision Community на инъекции в него кастомного кода.
  8. Тимофей

    Обзор плагинов

    “Плагины” позволяют разработчикам изменять или расширять функциональность приложений в Invision Community. Это руководство подробно описывает различные функции, доступные при использовании “Плагинов”. Описание многих функций доступно в Plugin Developer Center - чтобы получить доступ к нему нужно активировать режим разработчика. После того как будет активирован режим разработчика, кнопка "Создать плагин" появится в админпанели в разделе Систем --> Возможности --> Плагины. Используйте ее, чтобы создать свой плагин, после чего вы будете перенаправлены в Plugin Developer Center. Назначение плагинов Плагины отличаются от приложений тем, что они предназначены для расширения функционала существующих приложений. Есть хуки кода и хуки тем, которые позволяют подключиться к существующему коду в других приложениях и манипулировать им - отличный вариант для расширения функционала. Если вы поняли что хотите добавить качественно отличающиеся функции которые не пересекаются с существующими, вы можете создать новое приложение. Распространение плагинов В режиме разработчика ваши плагины создаются в виде файлов в файловой системе. Когда ваш плагин готов к публикации, Invision Community скомпилирует его в виде отдельного XML файла, которым можно поделиться и который может быть установлен другими, например, в нашем файловом архиве или официальном IPS Marketplace. Просто скачайте файл XML из Plugin Developer Center.
  9. Приложения в 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 Содержит скрипты которые отображают виджеты которые используются в системе блоков.
  10. 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"}'> ... Изменяйте имя файла, ключ приложения и расположение в зависимости от потребностей.
  11. В этой статье описывается, как определить версии вашего приложения и использовать 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/. Просто откройте файл и следуйте инструкциям в нем, чтобы добавить свой код.
  12. Большинство URL-адресов в Invision Community являются "дружественными", также известные как FURLs (ЧПУ – человекопонятные ссылки) - то есть, они на простом английском и легко читаются пользователями и поисковыми системами. FURL (ЧПУ) отображаются с помощью Invision Community в виде традиционных URL с параметрами, на основе преобразования, предоставляемого приложением. Например, FURL site.ru/messenger/compose может быть отображен как site.ru/index.php?app=core&module=messaging&controller=messenger&do=compose. Как загружаются контроллеры Контроллеры автоматически запускаются, когда совпадает URL. Параметры URL используются Invision Community, чтобы найти нужный контроллер: app=core Указывает, что контроллер находится в приложении “core” module=messaging Указывает, что контроллер находится в модуле обмена сообщениями “messaging”, в базовом приложении “core” controller=messenger Указывает, что мы загружаем контроллер “messenger”, в модуле обмена сообщениями “messaging”, в базовом приложении “core” do=сompose Параметр do не является обязательным, и позволяет вызывать конкретный метод в контроллере, чтобы обработать запрос. Если этот параметр опущен, то по умолчанию будет вызываться метод manage. Так, для URL site.ru/index.php?app=core&module=messaging&controller=messenger&do=compose, загружаемый контроллер будет находиться в /applications/core/modules/front/messaging/messenger.php, и будет вызываться метод compose внутри контроллера, чтобы обработать запрос. По этой структуре очень легко определить, какой именно способ, в каком контроллере обрабатывает запрос для любого заданного URL. Определение дружественных URL-адресов При разработке приложения, ваша FURL конфигурация создается в файле furl.json в каталоге /data вашего приложения. JSON структура определяет дружественный URL, реальный URL, который ему соответствует, и некоторые другие данные которые могут быть использованы. Простой пример FURL ... "messenger_compose": { "friendly": "messenger/compose", "real": "app=core&module=messaging&controller=messenger&do=compose" }, ... Ключ (в данном случае messenger_compose) это то, что идентифицирует этот FURL в IPS4. При создании ссылок в шаблонах или контроллерах, вы будете использовать этот ключ, чтобы указать, какой FURL будет использоваться для генерации и парсинга URL-адреса. Значение friendly это ЧПУ, который будут видеть пользователи. Значение real является фактическим URL, который будет использовать Invision Community, чтобы найти правильное app/module/controller для обработки запроса. FURLs с использованием параметров Хотя многие FURL статичные и простые, как в вышеуказанном примере, некоторые будут динамическими и будут включать в себя параметры, идентифицирующие конкретную запись, которая должна отображаться - например, просмотр темы на форуме. Для облегчения этой задачи, FURL определения поддерживают параметры. ... "profile": { "friendly": "profile/{#id}-{?}", "real": "app=core&module=members&controller=profile" }, ... Параметры, находящиеся внутри FURL заключены в фигурные скобки {}. Первый символ может быть либо #, чтобы соответствовать номеру, или @, чтобы соответствовать строкам. За этим следует имя параметра, и оно должно совпадать с именем параметра, который будет подставлен в реальном URL. Например, здесь мы используем {#id}, который совпадает с номером и приведет к &id=123 и передается в наш реальный URL. Тег {?} может быть использован для SEO заголовков; то есть дружественный текст, который идентифицирует отдельные записи, но который не является частью реального URL. Примером этого было бы название темы - оно включено в URL, чтобы помочь пользователям и поисковым системам, но только id темы используется для её поиска в реальном URL-адресе. Вы можете использовать несколько SEO заголовков в пределах URL, используя нулевой индексированный номер в теге, например {?0}, {?1} и {?2}. Вам не следует указывать FURL параметры, которые вы собираете в реальном URL; они автоматически добавляются к реальному URL-адресу диспетчером. В приведенном выше примере URL пользователь будет видеть что-то вроде site.ru/profile/123-имя-пользователя. Специфика FURL Порядок, в котором вы указываете ваши FURL значения имеет большое значение. Когда диспетчер пытается соотнести URL, он проходит последовательно через значения FURL, и останавливается на первом значении, которое подходит. Отсюда следует, что ваши более специфичные значения должны идти перед менее специфичными в furl.json. Например, предположим, у нас есть два значения, относящиеся к профилю пользователя. Одним из них является домашняя страница профиля, другой – страница редактирования профиля. Если мы указали значения таким образом: "profile": { "friendly": "profile/{#id}-{?}", "real": "app=core&module=members&controller=profile" }, "edit_profile": { "friendly": "profile/{#id}-{?}/edit", "real": "app=core&module=members&controller=profile&do=edit" }, …Тогда edit_profile не будет использоваться. profile/1-имя-пользователя URL будет найден первым и вызван диспетчером. Вместо этого следует сделать так, указав значения следующим образом: "edit_profile": { "friendly": "profile/{#id}-{?}/edit", "real": "app=core&module=members&controller=profile&do=edit" }, "profile": { "friendly": "profile/{#id}-{?}", "real": "app=core&module=members&controller=profile" }, ... это означает что edit_profile будет пропущен, пока не будет определено более частное значение, что позволяет более точно определить все запросы для обработки.
  13. Классы в Invision Community 4 являются "автоматически подгружаемыми". Это означает, что вам не нужно подключать исходный файл IPS4. Для справки, метод автоподгрузки \IPS\IPS::autoloader() находится в файле init.php корневого каталога. Местонахождение классов Классы должны быть расположены в правильной дериктории и быть корректно названы, чтобы загрузчик мог найти их. Существует всего три дериктории: Классы фреймворка Структура имени класса: \IPS\Namespace\Class. Расположение на диске: system/Namespace/Class.php. Классы приложений Структура имени класса: \IPS\app\Namespace\Class (обратите внимание, что ключ приложения в нижнем регистре, но части после используют PascalCase). Расположение на диске: applications/app/sources/Namespace/Class.php Расширения приложений и модули Структура имени класса : \IPS\app\modules\front\module\controller (обратите внимание, все части в нижнем регистре) Расположение на диске: applications/app/modules/front/module/controller.php Для классов фреймворка и классов приложений, конечный файл всегда должен находиться в пределах папки (не беспорядочно в системном каталоге). Если он будет находится хотя бы на один уровень глубже, система будет искать файл в каталоге с тем же именем. Например \IPS\Member находится в директории system/Member/Member.php в то время как \IPS\Member\Group находится в system/Member/Group.php Подмена кода (Monkey Patching) При обьявлении, классы всегда начинаются с подчеркивания. Например, в Invision Community вы вызываете так: \IPS\Member, однако, если посмотреть в исходном файле вы увидите, что он объявлен следующим образом: namespace IPS; class _Member { ... Этот прием называется “Обезьяним патчем” (Monkey Patching), который позволяет сторонним разработчикам перегрузить любой класс без какого-либо пересмотра кода и не конфликтовать хукам друг с другом. В этом примере система, сразу после автозагрузки файла Member.php, выполнит такой код: namespace IPS; class Member extends \IPS\_Member { } Если сторонний разработчик хочет перегрузить \IPS\Member, система вставит это внутрь, так что в итоге получится примерно так: \IPS\Member extends hook1 hook1 extends \IPS\_Member Или, если два хука хотят перегрузить \IPS\Member: \IPS\Member extends hook1 hook1 extends hook2 hook2 extends \IPS\_Member Это означает, что фреймворк, или любой сторонний код должен только вызвать \IPS\Member, и система не только автоматически подгрузит источник, но и создаст цепочку любых хуков, которые хотят перегрузить класс. Если эта технология выглядит пугающе (это не обычная практика) - вы не обязаны это понимать. Вам нужно только знать, что классы должны начинаться с подчеркивания при объявлении, но это подчеркивание обычно никогда не используется. Это также означает, что вместо того, чтобы вызвать "self::" внутри класса, вы должны вызвать "static::", так что вы обращаетесь к перегруженному классу, а не к оригинальному. Сторонние библиотеки Если вы хотите использовать сторонние PHP библиотеки, они, конечно, должны быть включены вручную и не могут использовать замену кода (Monkey patching). Если библиотека соответствует стандарту нэйминга PSR-0, вы можете добавить её в \IPS\IPS::$PSR0Namespaces таким образом, и автозагрузчик затем подгрузит ее: \IPS\IPS::$PSR0Namespaces['Libary'] = \IPS\ROOT_PATH . '/applications/app/system/3rd_party/Library'; В противном случае, вам нужно будет включать исходники вручную.
  14. Перед тем, как приступить к разработке плагинов или приложений для Invision Community, Вам необходимо включить Режим Разработчика. Активация данного режима приводит к тому, что программное обеспечение будет загружать необходимые файлы непосредственно из файловой системы, а не из кэшированных версий или базы данных. В Режиме Разработчика программное обеспечение работает намного медленнее и может привести к уязвимостям в системе безопасности. Включайте режим разработчика только, если вы PHP разработчик и намерены разрабатывать приложения и плагины. Активировать Режим Разработчика следует только на локальном сервере, который не доступен через интернет. Включение Режима Разработчика Чтобы включить Режим Разработчика на вашем форуме, нужно выполнить следующие действия: Загрузить инструменты разработчика, убедившись, что вы выбрали версию, подходящую для вашего Invision Community. Инструменты разработчика для более новых версий так же будут доступны, поэтому вам может понадобиться, загрузить более раннюю версию из раздела «Предыдущие версии». Извлечь инструменты разработчики и переместить их в папку, где установлен ваш Invision Community, объединяя с существующими файлами. Существует папка "Dev" в инструментах разработчика, и "Dev" папка для каждого приложения. Если у вас не установлены все приложения Invision Community, вы должны удалить папки, которые вам не нужны из папки Tools Developer перед копированием. Наличие средств разработчика для неустановленных приложений может привести к ошибкам. Если у вас нет файла constants.php в корневой папке Invision Community, то создайте его. Добавьте следующие строки в файл constants.php: <? define( 'IN_DEV', TRUE ); Важные замечания Инструменты разработки включают в себя файлы, необходимые для всех приложений IPS. Если вы включаете режим разработчика на IPS на котором установлены сторонние приложения и плагины, вам также необходимо получить и применить инструменты разработчика (т.е. положить папку "Dev") для них. Получить их вы можете у автора приложения. Обратите внимание, что при обновлении версии Invision Community, вам необходимо будет загрузить новые инструменты разработчика.
×
×
  • Создать...

Важная информация

Используя наш сайт вы соглашаетесь с нашей Политикой конфиденциальности