umebius さん
ありがとうございます!
js、cssなどは自動でコピーされるのですね!
コピーされるようにしておくよう、特定のパスに配置する必要があるなどの条件はありますか?
プラグイン有効時に行いたいのは、次のとおりです。
これらの方法を4系のときにどう実装すればよいかがわかりません。
・リソースのコピー →自動で行われる?
・WYSIWYGでアップロードされる画像の保存先パスの指定
・ブロックのコピー
参考に、3系プラグインの時のソースを記載しておきます。
// プラグイン有効時
public function enable($config, $app)
{
// リソースのコピー
$file = new Filesystem();
$file->mkdir($app['config']['plugin_html_realdir'] . '/samplepage/save_image', 0775);
$to_path = $app['config']['plugin_html_realdir'] . '/samplepage/assets';
$file->mirror(__DIR__.'/Resource/assets', $to_path);
// jbimagesの画像保存先パスを置換
$file_path = $to_path . '/js/vendor/tinymce/plugins/jbimages/config.php';
$configs = file_get_contents($file_path);
$search = '$config[\'img_path\'] = \'/plugin/samplepage/save_image\';';
$replace = '$config[\'img_path\'] = \'' . $app['config']['plugin_urlpath'] . '/samplepage/save_image\';';
$configs = str_replace($search, $replace, $configs);
file_put_contents($file_path, $configs);
// ブロックのコピー
$this->copyBlock($app);
}
/**
* ブロックファイルをブロックディレクトリにコピーしてDBに登録
*
* @param $app
* @throws \Exception
*/
private function copyBlock($app)
{
$file = new Filesystem();
if (!$file->exists(sprintf("%s/%s.twig", $app['config']['block_realdir'], self::BLOCKFILENAME))) {
$file->copy($this->Block, sprintf("%s/%s.twig", $app['config']['block_realdir'], self::BLOCKFILENAME));
$app['orm.em']->getConnection()->beginTransaction();
try {
// ブロックの登録
$Block = $this->registerBlock($app);
// BlockPositionの登録
$this->registerBlockPosition($app, $Block);
$app['orm.em']->getConnection()->commit();
} catch (\Exception $e) {
$app['orm.em']->getConnection()->rollback();
throw $e;
}
}
}
/**
* ブロックの登録
*
* @return \Eccube\Entity\Block
*/
private function registerBlock($app)
{
$DeviceType = $app['eccube.repository.master.device_type']->find(DeviceType::DEVICE_TYPE_PC);
/** @var \Eccube\Entity\Block $Block */
$Block = $app['eccube.repository.block']->findOrCreate(null, $DeviceType);
$Block->setName(self::BLOCKNAME);
$Block->setFileName(self::BLOCKFILENAME);
$Block->setDeletableFlg(Constant::DISABLED);
$Block->setLogicFlg(1);
$app['orm.em']->persist($Block);
$app['orm.em']->flush($Block);
return $Block;
}
/**
* BlockPositionの登録
*
* @param $Block
*/
private function registerBlockPosition($app, $Block)
{
$blockPos = $app['orm.em']->getRepository('Eccube\Entity\BlockPosition')->findOneBy(
array('page_id' => 1, 'target_id' => PageLayout::TARGET_ID_UNUSED),
array('block_row' => 'DESC'));
$BlockPosition = new BlockPosition();
// ブロックの順序を変更
if ($blockPos) {
$blockRow = $blockPos->getBlockRow() + 1;
$BlockPosition->setBlockRow($blockRow);
} else {
// 1番目にセット
$BlockPosition->setBlockRow(1);
}
$PageLayout = $app['eccube.repository.page_layout']->find(1);
$BlockPosition->setPageLayout($PageLayout);
$BlockPosition->setPageId($PageLayout->getId());
$BlockPosition->setTargetId(PageLayout::TARGET_ID_UNUSED);
$BlockPosition->setBlock($Block);
$BlockPosition->setBlockId($Block->getId());
$BlockPosition->setAnywhere(Constant::DISABLED);
$app['orm.em']->persist($BlockPosition);
$app['orm.em']->flush($BlockPosition);
}
----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。