ビトリックス 開発。 テスト用のデータを手動で入力しない方法。

多くの人がBitrixをoldり、巨大なリクエストの例を挙げ、リソース消費に唾を吐きます...そして私はその理由を理解しています。

Bitrixは理想からはほど遠いですが、私の観点からは注目に値します。 これは少なくともロシアで最も収益性の高いCMSです。
つまり Bitrixの知識は、開発ポケットに大きく貢献しています。

今は十分なカルマがありませんが、将来的にはこの分野でのベストプラクティスを共有するブログを開始する予定です。

記事番号1。 テスト用のデータを手動で入力しない方法。
ほとんどすべてのプロジェクトの開発では、テスト用にデータを入力する問題が発生します。 このビジネスは常に私を個人的に悩ませてきました。
最終的に、私はオペレーターではなく開発者であると判断したため、スクリプトを取り上げました。

そのため、タスク:テストデータ(魚)をBitrixプロジェクトの情報ブロックに入れるためのスクリプト開発します。

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" =>要素の完全な説明を記入する*

*-現在実装されている充填形式は1つだけです-サイトからの魚。
形式はipsum:[number]#[生成するもの(ワード|パラス|バイト|リスト)]
つまり ipsum:2#parasは2段落を意味し、ipsum:20#wordsは20単語を意味します。

構成で指定された各インフォブロックのスクリプトは、指定された数のセクションを生成します。 各セクションでは、指定された数の要素を作成します。 要素の名前、予備の説明、詳細な説明を入力します。

また、アクティビティの開始日(通常は公開日として使用されます)は、すべての要素で異なるように設定されます。
日付は次のように設定されます。
セクションの最初のアイテムの日付は60日前です。
セクションの後続の要素ごとに、1日が追加されます。

スクリプトの結果として、プロジェクトデータベースに10分間魚を入れます。 通常、これには4〜5時間の鈍い機械作業が必要です。

それを使用します。 また、通常のサイトをBitrixサイトに変換するスクリプトと、セクションのリストからメニュー構造を作成してサイト構造を作成するスクリプトもあります。 しかし、次回については。

Source: https://habr.com/ru/post/J44359/


All Articles