Re: Block Designer Proで作成したブロックに、CSVやXMLなどで、BuklImportしたい

2017年5月22日 at 20:35

以前に5.7系で大量のページへ一気にブロック登録するジョブを作ったことがあるので
アドオンを使ってドン!という感じではないのですが実現されたい内容と近いかも・・・

下記、ざっくりですが。

=====
csvの行に持つデータをこんな感じで設定します。
(エリア名とブロックハンドルは固定になるのでcsvに入れなくても良さそう)

・対象ページのID
・対象ページ内でブロックを挿入したいエリア名
・ブロックハンドル(BDPでブロック作った際に登録したもの)
・各設定項目のハンドル(項目のname属性に入っているもの。例はMainTtl、SubTtl項目をテキストエリアで用意、Imgを画像フィールドで用意した想定)

このcsvを使って、

1.csvから適当なパースライブラリで内容を取得

2.取得した内容を回してブロックを登録する

//$blockdataにcsvを配列に変換したデータが入っているとして
foreach($blockdata as $data){
$page = Page::getByID($data['PageID']);
$block = BlockType::getByHandle('ブロックハンドル');

$data = array(
'MainTtl' => $data['MainTtl'],
'SubTtl' => $data['SubTtl'],
'Img' => $data['Img'],//画像の場合はファイルID、など設定したフィールドに合わせたデータを指定
);
$page->addBlock($block, '対象ページ内でブロックを挿入したいエリア名', $data);
}

=====

BDPで作ったブロックもデフォルトでインストール済みのブロックと同様にaddBlock()を使ってデータの登録が可能でした。
データが大量な場合は2の処理を自動実行ジョブで回すと安心だと思います。

本家フォーラムのこの辺りを参考にしました。

http://www.concrete5.org/community/forums/customizing_c5/programmatically-add-a-block-to-a-page-area

http://documentation.concrete5.org/tutorials/concrete5-7-add-pagelist-block-programmatically-to-page

ファイルを新規にファイルマネージャーへ登録してさらにブロックに入れたい場合は
csvに登録したい画像のパスも登録して\Concrete\Core\File\Importer()を使ってパス指定でファイルを登録。
登録成功時に\Concrete\Core\File\Versionのインスタンスが返ってくるので
それを使って画像フィールドに値を渡すことでブロックへ登録できるかと思います。

↓こちらはページ属性バージョンですが、新規ファイルの投入はこれでいけると思います。
http://gist.github.com/YuzuruSano/4b86434c2bf95054462cfde2f9255b1d

参考になりましたら幸いです。

※もっといい方法あれば誰か教えてください!

タグ:

Re: Block Designer Proで作成したブロックに、CSVやXMLなどで、BuklImportしたい

2017年5月23日 at 11:26
ありがとうございます!

参考になります。

このポストのあと、aclissさんとも相談していたのですが、
CIF形式でブロックの内容を作ってCIF Importerでインポート出来ないか、という話をしていました。

佐野さんのアイデアも、検討してみます。

ありがとうございます!