お問い合わせフォームの添付ファイル機能などに。
フォームからアップロードされたファイルはファイルマネージャに追加されます。
日本語の情報があまりないので、ググりまくってなんとか辿り着いたやりかたです。
なんか間違ってたら教えてください。
そもそもの外部フォームの作り方についてはここがとても詳しいです。
concrete5.7対応 外部フォームブロックの作り方まとめ
https://www.cherrypieweb.com/weblog/technical/20161207104805.php
フォーム側
application/blocks/external_form/form/hoge.php
<form enctype='multipart/form-data' action="<?php echo $this->action('send'); ?>" >
<?php echo $form->file('attachment'); ?> // attachmentのところは任意
</form>
これで<input type="file" name="attachment" id="attachment">
みたいなタグが吐き出されます
コントローラ側
application/blocks/external_form/form/controller/hoge.php
namespace Application\Block\ExternalForm\Form\Controller;
use Concrete\Core\Controller\AbstractController;
use Core;
use FileImporter; // ←追加
// 中略
public function action_send($bID = false)
{
// ファイルをとりこむ
if (!empty($_FILES['attachment']['tmp_name'])) {
$fi = new FileImporter();
$file = $fi->import($_FILES['attachment']['tmp_name'], $_FILES['attachment']['name']);
$this->file_name = $_FILES['attachment']['name']; // 必要ならファイル名が取得できる
$this->file_url = $file->getDownloadURL(); // 必要ならダウンロードリンクが取得できる
// ファイルセットを作ってそれに入れておくと自分で入れたファイルと区別がついてよいです
// (事前に"Inquire Files"ファイルセットを作っておくこと)
$set = \Concrete\Core\File\Set\Set::getByName('Inquire Files');
$set->addFileToSet($file);
}
}
これで僕はいけました。
設定の「許可されたファイル拡張子」に入ってないファイルが来るとエラーになるので注意!