Многие ругают Битрикс, приводят примеры огромных запросов, плюются на ресурсоёмкость… и я понимаю причины.
Битрикс действительно далеко не идеален, но с моей точки зрения заслуживает внимания. Это сейчас самая зарабатывающая CMS как минимум в России.
Т.е. знание Битрикс — это весомый вклад в карман разработчика.
Сейчас у меня не достаточно кармы, но в дальнейшем планирую завести блог, в котором стану делиться наработками в этой области.
Статья №1. Как не набивать данные для тестирования вручную.
В разработке практически любого проекта возникает проблемма набивки данных для тестирования. Это дело меня лично всегда сильно утомляло.
Окончательно решив, что я разработчик, а не оператор взялся за скрипт.
Итак задача: разработать скрипт для забивки тестовых данных(рыбы) в Инфоблоки проекта на Битрикс.
Рыбу для статей было решено брать на ru.lipsum.com.
Итак что получилось, скрипт:
Оговорюсь — версия первая, но работоспособная.
Вот пример конфига:
Разберём по порядку что и как.
Конфиг:
Каждый элемент массива $cfg — конфтигурация для конкретного инфоблока. Ключ массива — ID инфоблока.
параметры:
«sect_count» — сколько нужно сделать разделов(если нет разделов — 0)
«items_count» => сколько в каждом разделе сделать Элементов.
«sect_name_tpl» => шаблон наименования раздела
«item_name_tpl» => шаблон наименования элемента
«item_preview_txt» => чем заполняем краткое описание элемента*
«item_detail_txt» => чем заполняем полное описание элемента*
* — в данный момент реализован только один формат заполнения — рыба с сайта.
Формат — ipsum:[количество]#[что генерить(words|paras|bytes|lists)]
т.е. ipsum:2#paras значит — 2 параграфа, а ipsum:20#words — 20 слов.
Скрипт для каждого указанного в конфиге инфоблока генерирует указанное количество разделов. В каждом разделе создаёт указанное количество элементов. Заполняет Наименование, Предварительное описание и детальное описание для элементов.
Такжке выставляется дата начала активности(используется как дата публикации обычно) разная для всех элементов.
Дата выставляется следующим образом:
дата для первого элемента в разделе — 60 дней назад.
для каждого последующего элемента в разделе добавляется 1 день.
В результате работы скрипта получаем рыбу в базе проекта за 10минут. Обычно это может занять до 4-5 часов тупой механической работы.
Пользуйтесь. Также у меня есть скрипты конвертации обычного сайта в сайт Битрикс и скрипт формирования структуры сайта из списка разделов(с формированием системы меню). Но об этом в следующий раз.
Битрикс действительно далеко не идеален, но с моей точки зрения заслуживает внимания. Это сейчас самая зарабатывающая CMS как минимум в России.
Т.е. знание Битрикс — это весомый вклад в карман разработчика.
Сейчас у меня не достаточно кармы, но в дальнейшем планирую завести блог, в котором стану делиться наработками в этой области.
Статья №1. Как не набивать данные для тестирования вручную.
В разработке практически любого проекта возникает проблемма набивки данных для тестирования. Это дело меня лично всегда сильно утомляло.
Окончательно решив, что я разработчик, а не оператор взялся за скрипт.
Итак задача: разработать скрипт для забивки тестовых данных(рыбы) в Инфоблоки проекта на Битрикс.
Рыбу для статей было решено брать на ru.lipsum.com.
Итак что получилось, скрипт:
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
CModule::IncludeModule("iblock");
?>
<?
### CONFIG ###
$file = "delfin_test.dat1";
### TOOLS ###
function getIpsum( $cnt, $what)
{
$url = "http://www.lipsum.com/feed/html?amount=$cnt&what=$what";
$text = file_get_contents($url);
preg_match("'<div id=\"lipsum\"[^>]*?>(.*?)</div>'si", $text, $matches);
return $matches[1];
}
?>
<?
include( $file );
$obSect = new CIBlockSection;
$obItem = new CIBlockElement;
while ( list($IBLOCK_ID, $arrCfg) = each($cfg) )
{
$sectCnt = 0;
$itemCnt =0;
$sect = array();
$time = strtotime("-60 days");
if ( $arrCfg["sect_count"] > 0 )
{
for ($i = 0; $i < $arrCfg["sect_count"]; $i++)
{
$sectCnt++;
$arSect = Array(
"IBLOCK_ID" => $IBLOCK_ID,
"NAME" => str_replace("#NUM#",$sectCnt, $arrCfg["sect_name_tpl"])
);
$ID = $obSect->Add($arSect);
if ( $ID > 0 )
$sect[] = $ID;
else
echo $obSect->LAST_ERROR;
}
}
else
{
$sect[] = 0;
}
reset($sect);
while ( list(,$SECTION_ID) = each($sect) )
{
for ($i = 0; $i < $arrCfg["items_count"]; $i++)
{
$itemCnt++;
$arTmp = explode(":", $arrCfg["item_preview_txt"]);
if ($arTmp[0] == "ipsum")
{
$arTmp = explode("#", $arTmp[1]);
$preview = getIpsum($arTmp[0], $arTmp[1]);
}
$arTmp = explode(":", $arrCfg["item_detail_txt"]);
if ($arTmp[0] == "ipsum")
{
$arTmp = explode("#", $arTmp[1]);
$detail = getIpsum($arTmp[0], $arTmp[1]);
}
$arItem = Array(
"ACTIVE" => "Y",
"IBLOCK_ID" => $IBLOCK_ID,
"IBLOCK_SECTION" => $SECTION_ID,
"NAME" => str_replace("#NUM#",$itemCnt, $arrCfg["item_name_tpl"]),
"ACTIVE_FROM" => ConvertTimeStamp($time + $itemCnt*24*60*60),
"PREVIEW_TEXT" => $preview,
"DETAIL_TEXT" => $detail,
"PREVIEW_TEXT_TYPE" => "html",
"DETAIL_TEXT_TYPE" => "html",
);
$ID = $obItem->Add($arItem);
if ( $ID > 0 )
$items[] = $ID;
else
echo $obItem->LAST_ERROR;
}
}
}
?>
Оговорюсь — версия первая, но работоспособная.
Вот пример конфига:
<?
$cfg = Array(
1 => Array(
"sect_count" => 3,
"items_count" => 5,
"sect_name_tpl" => "Раздел новостей №#NUM#",
"item_name_tpl" => "Новость №#NUM#",
"item_preview_txt" => "ipsum:20#words",
"item_detail_txt" => "ipsum:5#paras",
),
2 => Array(
"sect_count" => 0,
"items_count" => 15,
"item_name_tpl" => "Вакансия №#NUM#",
"item_preview_txt" => "ipsum:20#words",
"item_detail_txt" => "ipsum:5#paras",
),
3 => Array(
"sect_count" => 0,
"items_count" => 10,
"item_name_tpl" => "Статья №#NUM#",
"item_preview_txt" => "ipsum:2#paras",
"item_detail_txt" => "ipsum:7#paras",
),
4 => Array(
"sect_count" => 0,
"items_count" => 10,
"item_name_tpl" => "Требование №#NUM#",
"item_preview_txt" => "ipsum:5#words",
"item_detail_txt" => "ipsum:2#paras",
),
5 => Array(
"sect_count" => 0,
"items_count" => 10,
"item_name_tpl" => "Работа №#NUM#",
"item_preview_txt" => "ipsum:3#words",
"item_detail_txt" => "ipsum:3#paras",
),
6 => Array(
"sect_count" => 5,
"items_count" => 8,
"item_name_tpl" => "Товар №#NUM#",
"sect_name_tpl" => "Раздел товаров №#NUM#",
"item_preview_txt" => "ipsum:20#words",
"item_detail_txt" => "ipsum:2#paras",
),
);
?>
Разберём по порядку что и как.
Конфиг:
Каждый элемент массива $cfg — конфтигурация для конкретного инфоблока. Ключ массива — ID инфоблока.
параметры:
«sect_count» — сколько нужно сделать разделов(если нет разделов — 0)
«items_count» => сколько в каждом разделе сделать Элементов.
«sect_name_tpl» => шаблон наименования раздела
«item_name_tpl» => шаблон наименования элемента
«item_preview_txt» => чем заполняем краткое описание элемента*
«item_detail_txt» => чем заполняем полное описание элемента*
* — в данный момент реализован только один формат заполнения — рыба с сайта.
Формат — ipsum:[количество]#[что генерить(words|paras|bytes|lists)]
т.е. ipsum:2#paras значит — 2 параграфа, а ipsum:20#words — 20 слов.
Скрипт для каждого указанного в конфиге инфоблока генерирует указанное количество разделов. В каждом разделе создаёт указанное количество элементов. Заполняет Наименование, Предварительное описание и детальное описание для элементов.
Такжке выставляется дата начала активности(используется как дата публикации обычно) разная для всех элементов.
Дата выставляется следующим образом:
дата для первого элемента в разделе — 60 дней назад.
для каждого последующего элемента в разделе добавляется 1 день.
В результате работы скрипта получаем рыбу в базе проекта за 10минут. Обычно это может занять до 4-5 часов тупой механической работы.
Пользуйтесь. Также у меня есть скрипты конвертации обычного сайта в сайт Битрикс и скрипт формирования структуры сайта из списка разделов(с формированием системы меню). Но об этом в следующий раз.