Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Итак, всем известно (или почти всем), что уже в продукте есть и новое ядро, ORM и все это постепенно улучшается. Так вот, сегодня я вам расскажу какая примерно последовательность создания модулей на новом ядре с использованием ORM. Отчасти затрону использование , который идет в поставке как КП, так и БУС, и вы можете использовать его в полном объеме.
Структура файлов
Так как модуль для локального использования, то будем использовать папку local в корне сайта, которая с 14 версии ядра.
Мой модуль называется my.ticketstat, так и называется папка модуля, размещенная в /local/modules/. В ней у нас примерно стандартный набор, это папки: admin, install, lang, lib. Отдельно заострим внимание на lib - теперь никаких папок classes и прочего. Тут у нас будет хранится основная логика модуля, и это нам позволит использовать namespace с автоподгрузкой при вызове.
Логика работы модуля
Логика будет достаточно простая:
1. Принять данные.
- данные будут приходить из внешнего источника, поэтому будет использоваться публичный скрипт.
2. Отдать обработанные данные.
- данные отдаются в виде json, с последующей обработкой и построением графика в amCharts.
База данных
База у нас будет очень простая, всего с двумя полями (integer и datetime).
Для её описания в ORM воспользуется пока скрытыми возможностями модуля производительности, а именно, работы с таблицами.
Добавляем GET параметр orm=y и у каждой таблицы в контекстном меню добавляется пункт ORM.
На выходе получаем почти готовые данные для описания таблицы. После некоторых изменений, у нас остается:
Работа с данными
Для начала нам надо получить данные, и записать их в нашу базу данных.
За это у нас будет отвечать файл tools/stat_add.php.
Необходимые значения будут передаваться через GET, поэтому будем использовать объект запроса:
Для записи в базу, нам не надо придумывать велосипеды, методы ORM у нас уже есть на вооружении, достаточно ими воспользоваться:
Как видно, все гениальное - просто!
Теперь на очереди получение данных, за это у нас отвечает файл tools/get_stat.php.
Данные могут отдаваться за определенный день:
так и от определенного времени:
И фильтр идет в наш GetList, который мы также сами не писали:
Тут мы используем наш конвертер данных, чтобы они у нас получались сразу в нужном формате.
Сам конвертер у нас определен в файле lib/testconverter.php:
как видно, ничего сложного.
В начале я упоминал про . Вот его то мы и будем использовать для вывода наших данных.
Честно говоря, мне сильно наскучили графики, которые выводятся как единая картинка. А тут у нас готовая библиотека для построения красивых и динамичных графиков и прочего.
Всего-то нам надо подключить:
/bitrix/js/main/amcharts/3.3/amcharts.js
/bitrix/js/main/amcharts/3.3/serial.js
Поигравшись с желаемым видом графика, настройками и темой, мы можем получить приятный результат подобного вида:
Назад в раздел
Наверх
то ждем ваше обращение в нашей службе тех поддержки.
Написание модуля на D7+ORM
Всем привет, давно хотел написать данную простенькую статейку, но все не находил времени.Итак, всем известно (или почти всем), что уже в продукте есть и новое ядро, ORM и все это постепенно улучшается. Так вот, сегодня я вам расскажу какая примерно последовательность создания модулей на новом ядре с использованием ORM. Отчасти затрону использование , который идет в поставке как КП, так и БУС, и вы можете использовать его в полном объеме.
Структура файлов
Так как модуль для локального использования, то будем использовать папку local в корне сайта, которая с 14 версии ядра.
Мой модуль называется my.ticketstat, так и называется папка модуля, размещенная в /local/modules/. В ней у нас примерно стандартный набор, это папки: admin, install, lang, lib. Отдельно заострим внимание на lib - теперь никаких папок classes и прочего. Тут у нас будет хранится основная логика модуля, и это нам позволит использовать namespace с автоподгрузкой при вызове.
Логика работы модуля
Логика будет достаточно простая:
1. Принять данные.
- данные будут приходить из внешнего источника, поэтому будет использоваться публичный скрипт.
2. Отдать обработанные данные.
- данные отдаются в виде json, с последующей обработкой и построением графика в amCharts.
База данных
База у нас будет очень простая, всего с двумя полями (integer и datetime).
Для её описания в ORM воспользуется пока скрытыми возможностями модуля производительности, а именно, работы с таблицами.
Добавляем GET параметр orm=y и у каждой таблицы в контекстном меню добавляется пункт ORM.
На выходе получаем почти готовые данные для описания таблицы. После некоторых изменений, у нас остается:
namespace My\Ticketstat;
use Bitrix\Main\Entity;
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);
/**
* Class StatTable
*
* Fields:
* <ul>
* <li> COUNT int mandatory
* <li> TIME datetime optional
* </ul>
*
* @package Bitrix\Data
**/
class StatTable extends Entity\DataManager
{
public static function getFilePath()
{
return __FILE__;
}
public static function getTableName()
{
return 'bx_custom_stat';
}
public static function getMap()
{
return array(
'COUNT' => array(
'data_type' => 'integer',
'primary' => true,
'required' => true,
'title' => Loc::getMessage('STAT_ENTITY_COUNT_FIELD'),
),
'TIME' => array(
'data_type' => 'datetime',
'title' => Loc::getMessage('STAT_ENTITY_TIME_FIELD'),
),
);
}
}
|
| можно считать, что пол дела сделано |
Для начала нам надо получить данные, и записать их в нашу базу данных.
За это у нас будет отвечать файл tools/stat_add.php.
Необходимые значения будут передаваться через GET, поэтому будем использовать объект запроса:
$context = \Bitrix\Main\Application::getInstance()->getContext();
$request = $context->getRequest();
$request->get('text'); |
Для записи в базу, нам не надо придумывать велосипеды, методы ORM у нас уже есть на вооружении, достаточно ими воспользоваться:
\My\Ticketstat\StatTable::add(array( 'COUNT' => $count, 'TIME' => new \Bitrix\Main\Type\DateTime(null,0) )); |
Как видно, все гениальное - просто!
Теперь на очереди получение данных, за это у нас отвечает файл tools/get_stat.php.
Данные могут отдаваться за определенный день:
$filter = array('><TIME' => array(
new \Bitrix\Main\Type\DateTime(
date($request->get('date').' 00:00:00'),
'Y-m-d H:i:s'
),
new \Bitrix\Main\Type\DateTime(
date($request->get('date').' 23:59:59'),
'Y-m-d H:i:s'
)
),);
|
так и от определенного времени:
$filter = array('>=TIME' => new \Bitrix\Main\Type\DateTime(
date('Y-m-d '.$request->get('time')),
'Y-m-d H:i:s'
),);
|
И фильтр идет в наш GetList, который мы также сами не писали:
$arStat = \My\Ticketstat\StatTable::getList(array(
'select' => array("COUNT","TIME"),
'order' => array("TIME"=>'asc'),
'filter' => $filter,
));
while ($stat = $arStat->fetch(new \My\Ticketstat\TestConverter))
{
$result[] = $stat;
}
|
Тут мы используем наш конвертер данных, чтобы они у нас получались сразу в нужном формате.
Сам конвертер у нас определен в файле lib/testconverter.php:
namespace My\Ticketstat;
class TestConverter extends \Bitrix\Main\Text\Converter
{
public function encode($text, $textType = "")
{
if ($text instanceof \Bitrix\Main\Type\DateTime)
return $text->format('Y-m-d H:i:s');
return \Bitrix\Main\Text\String::htmlEncode($text);
}
public function decode($text, $textType = "")
{
if (is_object($text))
return $text;
return \Bitrix\Main\Text\String::htmlDecode($text);
}
}
|
как видно, ничего сложного.
В начале я упоминал про . Вот его то мы и будем использовать для вывода наших данных.
Честно говоря, мне сильно наскучили графики, которые выводятся как единая картинка. А тут у нас готовая библиотека для построения красивых и динамичных графиков и прочего.
Всего-то нам надо подключить:
/bitrix/js/main/amcharts/3.3/amcharts.js
/bitrix/js/main/amcharts/3.3/serial.js
|
P.S. версия может отличаться |
Назад в раздел
Подписаться на новые материалы раздела:
Загрузка...
Наверх