Доки http://forum.joostina.ru/categories/joostina-x-docs/feed.rss Sun, 08 Dec 19 07:43:49 -0500 Доки ru-RU Документация про joostina 2x http://forum.joostina.ru/discussion/319/dokumentaciya-pro-joostina-2x Mon, 12 Mar 2012 11:23:29 -0400 boston 319@/discussions
Версия пока первая которую не страшно и не очень стыдно показать, прошу не судить строго, понять что там внутри и осознать что с документацией в 2х будет на порядок лучше чем в более ранних версиях - уже можно.

Собственно: http://xboston.github.com/joostina-docs/

Еще не все классы и методы задокументированны, часть их того что есть ждёт тщательная группировка и доработка. Это можно сказать первая альфа-версия документации. Обновлять буду по мере полировки кода.]]>
joosAutoloader [в разработке] http://forum.joostina.ru/discussion/77/joosautoloader-v-razrabotke Sun, 17 Apr 2011 18:06:55 -0400 boston 77@/discussions Итак, как же не работает.

Для начала определим какие типы классов есть в системе:
1. Классы ядра, для них зарезервированн преффикс joos. Например joosCore, joosText и т.д. Часть классов ядра распологается непосредственно в файле ядра - /core/joostina.php . Другие же расположены в каталоге библиотек /core/libraries. Имена классов библиотек формируются по правилу joosDatabase - /core/ libraries/database.php
2. Классы контроллеров. Для этих классов зарезервирован преффикс actions и actionsAdmin. Например actionsBlog для контроллера блогов фронта, и actionsAdminBlog для контроллера блогов панели управления. Файлы содержащие эти классы должны распологаться в каталогах компонентов приложения: /app/components /{name}/{name}.php и /app/components /{name}/admin. {name}.php
3. Классы моделей. Модели должны соотвествовать письменному названию соответсвующей таблицы в формате CamelCase. Например таблица jos_blog, модель – Blog, jos__blog_category – BlogCategory. Модели должны располагаться в каталоге models обрабатывающего контролера приложения: /app/components/{name}/modules/{name}.php . Если контроллер обрабатывает несколько связанных между собой моделей – то рекомендуется распологать все модели в одном файле соответствующем названию корневой модели.
Для работы в панели управления рекомендуется использовать новую модель с наследованием от основной и преффиксом admin. Например модель Blog, модель для работы в панели управления – adminBlog. Располагать модель следует в файле по схеме /app/components/{name}/modules/admin.{name}.php . Такая схема позволит наиболее оптимально расходывать память при работе фронтальной части приложения, и обеспечить гибкость в описании модели и её параметров для автоматического генератора интерфейсов панели управления joosAutoAdmin.

Пока всё, еще остались хелперы модулей, хелперы контроллеров и плагины.]]>
Файловая структура http://forum.joostina.ru/discussion/273/faylovaya-struktura Sun, 25 Dec 2011 15:57:41 -0500 boston 273@/discussions краткое и более расширенное описание файловой структуры системы.]]> Модули [в разработке] http://forum.joostina.ru/discussion/58/moduli-v-razrabotke Sat, 09 Apr 2011 06:07:23 -0400 ZaiSL 58@/discussions
Модуль может содержать в себе любую информацию - от простого текста до php-кода.

Зачастую модули взаимодействуют с БД и конкретными компонентами (тогда говорят, что данный модуль "для компонента такого-то").

Примеры использования модулей:
- вывод последних новостей на главной странице сайта
- вывод формы логина
- вывод опроса в произвольном месте сайта и т.п.

====================


Модули фронтенда находятся в папке /modules
Модули админпанели - в папке /admin/modules

Файловая структура модуля
-----------------------------
Рассмотрим на примере сферического фронтенд-модуля под названием "Test".
modules
test
test.php
test.helper.php
test.params.php
view
default.php

* test.php - основной исполняемый файл модуля. В этом файле происходит разная магия (запросы к БД, вычисления и т.п.), а также именно здесь подключается шаблон представления.
* test.helper.php - вспомогательный класс, в котором могут находиться функции-помощники, требующиеся для работы модуля. Этот файл не является обязательным - всё зависит от сложности кода и от предпочтений разработчика
* test.params.php - файл содержит массивы с данными и настройками модуля. Информация из этого файла используется при установке модуля, а также при работе с настройками модуля в админпанели
* директория views - в этой папке находятся шаблоны (представления) модуля
* views/default.php - стандартный шаблон вывода модуля


Подробное описание файлов модуля
--------------------------------

****** test.php
****************************************************
//Запрет прямого доступа
defined('_JOOS_CORE') or die();

//Подключение вспомогательной библиотеки
require_once joosCore::path('test', 'module_helper');

[.....содержимое_модуля.........]

//Подключение шаблона модуля
require $module->template_path;
****************************************************

В основном исполняемом файле модуля доступны следующие переменные:
$module
Экземпляр класса joosModule

$params
Параметры модуля - ассоциативный массив, полученный декодированием JSON, сохраненным в поле 'params'

$object_data
Массив с данными, который был возвращен текущим методом текущего контроллера компонента.
С помощью этих данных можно успешно избегать дополнительных запросов к БД
Например: на странице пользователя можно вывести блок информации о пользователе,
не сделав при этом ни одного запроса к БД - все данные уже будут доступны в $object_data


test.params.php
***********************************************
//Запрет прямого доступа
defined('_JOOS_CORE') or die();

//Установочная информация (обязательный блок)
//каждый ключ данного массива соответствует полю в таблице `#__modules` БД
$extension_install = array(
'type'=>'module',
'module'=>'test',
'client_id'=>'0',
'position'=>'left',
'title'=>'Тестовый модуль',
);

//Регистрация прав
//Правила прописываются в таблице `#__access`:
//#__access.section = 'Module'
//#__access.action = ключ_массива (например: 'view', 'smth_action')

$extension_access = array(
'view'=>array(
'title'=>'Отображать', //#__access.action_label
'groups'=>array(8,9) //#__access.access (JSON)
),
'smth_action'=>array(
'title'=>'Какое-то действие',
'groups'=>array(9)
)
);


//Общая информация о расширении
//Автор, версия, лицензия и т.п.
//Блок необязательный, но желательный.
//Выводится на странице редактирования настроек модуля в админпанеле (пока не выводится! но будет)
$extension_info = array(
'author'=>'Joostina Team',
'creationDate'=>'2010',
'copyright'=>'(C) 2008-2010 Joostina team.',
'license'=>'http://www.gnu.org/licenses/gpl-2.0.htm GNU/GPL',
'authorEmail'=>'joostinacms@gmail.com',
'authorUrl'=>'www.joostina.ru',
'version'=>'1.0',
'description'=>'Модуль для демонстрации всяческих возможностей'
);


//Дополнительные параметры модуля (помимо генерируемых системой)
//Описание полей производится в формате joiAdmin
//Сгенерированные по данным правилам поля выводятся на странице редактирования модуля в админпанеле
//Данные, переданные посредством этих полей помещабтся в #__modules.params (в формате JSON)
$extension_params = array(
'param1' => array(
'name' => 'Параметр #1',
'editable' => true,
'html_edit_element' => 'edit',
'html_edit_element_param' => array()
),
'param2' => array(
'name' => 'Параметр #2',
'editable' => true,
'html_edit_element' => 'edit',
'html_edit_element_param' => array()
)
);




***********************************************


******test.helper.php
***********************************************
//Запрет прямого доступа
defined('_JOOS_CORE') or die();


class testHelper {

public static function smth_func(){
//..........
}

}

***********************************************
Именование вспомогательного класса производится по следующему правилу:
модульHelper



******views/default.php
**********************************************
//Запрет прямого доступа
defined('_JOOS_CORE') or die();?>

Тееееееест!

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




Как это работает (фронтенд)
--------------------------------
****Подготовка модулей
index.php

//Подключается класс модулей
require_once (JPATH_BASE . DS . 'includes' . DS . 'frontend.php');

//Запускается выполнение запрашиваемого метода контроллера
joosСontroller::run();
-> joosСontroller::views($results, self::$controller, self::$task);
->
//Готовим модули к выдаче: выбираем модули, которые нужны для текущей страницы
joosСontroller::prepare_modules_for_current_page($params, $option, $task);
->
//Из БД выбираются все модули для текущей страницы (одним запросом)
//Рассортировываются по массивам для удобного обращения впоследствии
joosModule::modules_by_page($option, $task, $params);


****Вывод модулей
Модули вызываются из index.php шаблона сайта или любого другого подходящего места (например, можно вызывать модуль из шаблона компонента, если есть такая необходимость).
Вызов модулей осуществляется с помощью обращения к следующим методам:

//Вывод всех модулей, связанных с позицией 'position'
joosModule::load_by_position('position');

//Вывод модуля с ID=1
joosModule::load_by_id(1);

//Вывод модуля с именем 'test'
//С помощью этого метода можно вызывать только устанавливаемые модули (т.е. те, которые организованы в виде файлов),
//пользовательские (созданные в админке) модули не имеют имён (только заголовки), поэтому к ним нельзя обратиться
//с помощью данной ф-ции (для их вывода можно использовать обращение по ID - см. выше)
joosModule::load_by_name('test');

Напоминиаем, все модули, предназначенные для вывода на текущей странице загружаются одним запросом и один раз. Все необходимые данные можно получить из класса joosModule, не производя дополнительных запросов к БД. Так-то.]]>
joosException [в разработке] http://forum.joostina.ru/discussion/78/joosexception-v-razrabotke Mon, 18 Apr 2011 05:41:01 -0400 boston 78@/discussions Наследование:

class AutoloaderFileNotFoundException extends joosException {}

вызов:

throw new AutoloaderFileNotFoundException('Файл класса не найден');
]]>
Params [в разработке] http://forum.joostina.ru/discussion/57/params-v-razrabotke Sat, 09 Apr 2011 06:04:25 -0400 ZaiSL 57@/discussions Библиотека и компонент позволяют любому произвольному компоненту работать с параметрами (настройками), не создавая при этом

файлов-конфигураций или таблиц в БД.

Как это работает:

БД
======================
В БД существует таблица `#__params`, в которой, собственно, и хранятся настройки расширений.
В структуре таблицы присутствуют следующие поля:
---здесь описания полей---

Как добавить функционал параметров в компонент:
===============================================
В административном интерфейсе:
1. Подключить библиотеку "Params"
для этого в контроллере или моделе компонента прописываем: joosLoader::lib('params','joostina')

2. В файле component.params.php прописать схему настроек:
схема создаётся по формату JoiAdmin и представляет собой ассоциативный массив
схема может содержать любое количество подгрупп. Подгруппа определяет, для какого типа объектов будут применяться
натройки (и на каких страницах в админке будут генериться настроечные поля)

Рассмотрим на примере компонента новостей (News)
-------------------------------------------------

3. Создать ссылку в подменю компонента на форму редактирования дефолтных настроек
Если в компоненте еще нет подменю - самое время создать его.
--- тут про создание подменю или отсылка к другой статье документации по этой теме ---
Редактирование дефолтного конфига компонента осуществляется в интерфейсе компонента Params, поэтому ссылка
будет выглядеть следующим образом:
index2.php?option=params&group=our_component
где "our_component' - это название компонента, с которым мы работаем

4. При построении основной формы редактирования подгрузить схему и сами данные (параметры) из БД
для этого необходимо обратиться к методу ---

5. При сохранении данных: передать параметры для сохранения в БД
для этого необходимо обратиться к методу ---

На фронте:
1. Подключить библиотеку
2. В контроллере получить необходимые параметры
3. Использовать .....
.....to be continued ]]>