katzさま
いつもご支援ありがとうございます。
どうぞよろしくお願いいたします。
次回の週刊concrete5を楽しみにお待ち
しております。
Re: エクスプレスエントリーデータダウンロードを外部フォームから実行したい
2021年2月1日 at 17:33
aniyaさま
いつもお世話になっております。
先日の週間concrete5 配信内容を参考に、取り急ぎ、Expressエンティティ
の属性名を取得して、リストからそれぞれの入力データをgetUserid();などの
メソッドで取得し、エントリーデータをループすることでcsvファイルとして
出力することはできました。
logs.php での csvファイル作成方法が大変役立ちました。
ありがとうございました。
引き続き、エンティティ名別にエントリーデータを動的に取得する方法
を試行中でございます。
完成いたしましたら、ご報告させていただきます
Re: エクスプレスエントリーデータダウンロードを外部フォームから実行したい
2021年2月9日 at 17:35
katzさん
いつも大変お世話になっております。
先週の週刊concrete5を拝聴させていただき、大変勉強になりました。
ありがとうございます。
番組内でご説明いただいた、エンティティのIDを取得しようと試みて
おります。
hissyさんよりご説明いただいた、
public function csv_export($treeNodeParentID = null){
$me = $this;
$parent = $me->getParentNode($treeNodeParentID);
$entity = $me->getEntity($parent);
...
}
において、$treeNodeParentID が、MYSQLの「ExpressEntities」テーブル
における "id" に該当すると思うのですが、違いますでしょうか?
hissyさんがご説明下さっているのは、ダッシュボードのExpressエンティティ
詳細画面でエントリーデータ一覧を表示させているため、
$me->getParentNodeID() で表示しているExpressエンティティのエントリー
データの親ID(エンティティID)を取得していると思うのですが、これを
エントリーリストから取得するとしますと、
まず、$entity = Express::getObjectByHandle('●●●●');
●●●●はエンティティのハンドル名
でエンティティ情報を取得してきて、そのデータのIDを
$id = $entity->getID();
で取得すればよいように考えたのですが、この考えは間違っておりますで
しょうか?
ExpressEntitiesテーブルの「id」が取得できれば、あとは、
public function csv_export と同じ方法でcsvファイルの作成ができると
考えております。
どうぞよろしくお願い申し上げます。
いつも大変お世話になっております。
先週の週刊concrete5を拝聴させていただき、大変勉強になりました。
ありがとうございます。
番組内でご説明いただいた、エンティティのIDを取得しようと試みて
おります。
hissyさんよりご説明いただいた、
public function csv_export($treeNodeParentID = null){
$me = $this;
$parent = $me->getParentNode($treeNodeParentID);
$entity = $me->getEntity($parent);
...
}
において、$treeNodeParentID が、MYSQLの「ExpressEntities」テーブル
における "id" に該当すると思うのですが、違いますでしょうか?
hissyさんがご説明下さっているのは、ダッシュボードのExpressエンティティ
詳細画面でエントリーデータ一覧を表示させているため、
$me->getParentNodeID() で表示しているExpressエンティティのエントリー
データの親ID(エンティティID)を取得していると思うのですが、これを
エントリーリストから取得するとしますと、
まず、$entity = Express::getObjectByHandle('●●●●');
●●●●はエンティティのハンドル名
でエンティティ情報を取得してきて、そのデータのIDを
$id = $entity->getID();
で取得すればよいように考えたのですが、この考えは間違っておりますで
しょうか?
ExpressEntitiesテーブルの「id」が取得できれば、あとは、
public function csv_export と同じ方法でcsvファイルの作成ができると
考えております。
どうぞよろしくお願い申し上げます。
Re: エクスプレスエントリーデータダウンロードを外部フォームから実行したい
2021年2月9日 at 17:51
その辺は不要です。お送りしたコードのハイライト部分にもあえて含めてません。
$entity までは取れているようでしたので、そのあと必要な部分だけをハイライトでお送りしました。
$entity までは取れているようでしたので、そのあと必要な部分だけをハイライトでお送りしました。
Re: エクスプレスエントリーデータダウンロードを外部フォームから実行したい
2021年2月12日 at 16:14
いつもお世話になっております。
viewのリストボックスで取得したエンティティ名(ハンドル名)を
controller側へ渡して$entname に代入し、エントリーデータを取得しようと
いたしました。
ところが、下記コードを実行しましても、CSVダウンロードのための
ダイアログボックス自体も表示されません。
なんの反応もない状態でございます。
コードの解釈が間違えていると思います。
$input['csvent'] に、viewで選択したエンティティ名'enqa'を渡しているのですが、
これが原因でしょうか?
ご教示いただければ幸いです。
public function action_submit(){
//CSV作成対象エンティティの取得
$input['csvent'] = $this->post('csvent');
if (isset($input['csvent']) && $input['csvent'] != ''){
$entname = $input['csvent'];
}
$entity = Express::getObjectByHandle($entname);
$headers = [
'Content-Type' => 'text/csv',
'Content-Disposition' => 'attachment; filename=' . $entity->getHandle() . '.csv',
];
$config = $this->app->make('config');
$bom = $config->get('concrete.export.csv.include_bom') ? $config->get('concrete.charset_bom') : '';
$datetime_format = $config->get('concrete.export.csv.datetime_format');
return StreamedResponse::create(function () use ($entity, $me, $bom, $datetime_format) {
$entryList = new EntryList($entity);
$writer = $this->app->make(CsvWriter::class, [
$this->app->make(WriterFactory::class)->createFromPath('php://output', 'w'),
new Date()
]);
echo $bom;
$writer->insertHeaders($entity);
$writer->insertEntryList($entryList,$datetime_format);
}, 200, $headers);
}
viewのリストボックスで取得したエンティティ名(ハンドル名)を
controller側へ渡して$entname に代入し、エントリーデータを取得しようと
いたしました。
ところが、下記コードを実行しましても、CSVダウンロードのための
ダイアログボックス自体も表示されません。
なんの反応もない状態でございます。
コードの解釈が間違えていると思います。
$input['csvent'] に、viewで選択したエンティティ名'enqa'を渡しているのですが、
これが原因でしょうか?
ご教示いただければ幸いです。
public function action_submit(){
//CSV作成対象エンティティの取得
$input['csvent'] = $this->post('csvent');
if (isset($input['csvent']) && $input['csvent'] != ''){
$entname = $input['csvent'];
}
$entity = Express::getObjectByHandle($entname);
$headers = [
'Content-Type' => 'text/csv',
'Content-Disposition' => 'attachment; filename=' . $entity->getHandle() . '.csv',
];
$config = $this->app->make('config');
$bom = $config->get('concrete.export.csv.include_bom') ? $config->get('concrete.charset_bom') : '';
$datetime_format = $config->get('concrete.export.csv.datetime_format');
return StreamedResponse::create(function () use ($entity, $me, $bom, $datetime_format) {
$entryList = new EntryList($entity);
$writer = $this->app->make(CsvWriter::class, [
$this->app->make(WriterFactory::class)->createFromPath('php://output', 'w'),
new Date()
]);
echo $bom;
$writer->insertHeaders($entity);
$writer->insertEntryList($entryList,$datetime_format);
}, 200, $headers);
}
Re: エクスプレスエントリーデータダウンロードを外部フォームから実行したい
2021年2月16日 at 7:40
通常のコントローラーは、Responseオブジェクトを返すだけでいい感じに処理してくれるのですが、外部フォームはそうではないようです。
return StreamedResponse::create(function () use ($entity, $me, $bom, $datetime_format) {
...
}
を
$response = StreamedResponse::create(function () use ($entity, $me, $bom, $datetime_format) {
...
}
$response->send();
と変更すれば動きそうです
return StreamedResponse::create(function () use ($entity, $me, $bom, $datetime_format) {
...
}
を
$response = StreamedResponse::create(function () use ($entity, $me, $bom, $datetime_format) {
...
}
$response->send();
と変更すれば動きそうです
Re: エクスプレスエントリーデータダウンロードを外部フォームから実行したい
2021年2月16日 at 10:35
hissyさん
おはようございます。ありがとうございます。
2/12の週刊concrete5において、katzさんより、
viewから渡したエンティティハンドル名がどのように
なっているかなど、var_dump で確認してみてくださいと
教えていただきましたので、それぞれの変数を確認して
見ました。
var_dump($entname);
exit();
としたところ、$entname は、予定通り、エンティティのハンドル
名が渡っておりました。
その後、return StreamedRespons::create~
の上の行までは、正常に値が取れておりました。
return StreamedRespons::create~で何も取得できていない状態
になっておりましたので、教えていただいた方法で検証させて
いただきます。ありがとうございます。
おはようございます。ありがとうございます。
2/12の週刊concrete5において、katzさんより、
viewから渡したエンティティハンドル名がどのように
なっているかなど、var_dump で確認してみてくださいと
教えていただきましたので、それぞれの変数を確認して
見ました。
var_dump($entname);
exit();
としたところ、$entname は、予定通り、エンティティのハンドル
名が渡っておりました。
その後、return StreamedRespons::create~
の上の行までは、正常に値が取れておりました。
return StreamedRespons::create~で何も取得できていない状態
になっておりましたので、教えていただいた方法で検証させて
いただきます。ありがとうございます。
Re: エクスプレスエントリーデータダウンロードを外部フォームから実行したい
2021年2月16日 at 13:21
ご教示ありがとうございます。
参照クラスを以下のように設定し、コードを変更いたしました。
そうしますと、「このサイトにアクセスできません。
ウェブページは一時的に停止しているか、新しいウェブアドレスに移動した可能性があります。」と表示されました(添付ファイル)。
参照クラス設定か、どこかで間違えている可能性もあるかと存じます。
どこが原因か、お教えいただけますと幸いでございます。どうぞよろしくお願い
申し上げます。
参照クラス・名前空間
namespace Application\Block\ExternalForm\Form\Controller;
use Concrete\Core\Controller\AbstractController;
use Concrete\Core\Csv\WriterFactory;
use Concrete\Core\Express\Export\EntryList\CsvWriter;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Concrete\Core\Entity\Express\Entity;
use Concrete\Core\Express\EntryList;
use Core;
use UserInfo;
use User;
use Express;
public function action_submit(){
//CSV作成対象エンティティの取得
$input['csvent'] = $this->post('csvent');
$me = $this;
if (isset($input['csvent']) && $input['csvent'] != ''){
$entname = $input['csvent'];
}
//$fileName = $entname.' download file';
$entity = Express::getObjectByHandle($entname);
$headers = [
'Content-Type' => 'text/csv',
'Content-Disposition' => 'attachment; filename=' . $entity->getHandle() . '.csv',
];
$config = $this->app->make('config');
$bom = $config->get('concrete.export.csv.include_bom') ? $config->get('concrete.charset_bom') : '';
$datetime_format = $config->get('concrete.export.csv.datetime_format');
//ここまでのすべての変数は、中身が正常に取れておりました
$response = StreamedResponse::create(function () use ($entity, $me, $bom, $datetime_format) {
$entryList = new EntryList($entity);
$writer = $this->app->make(CsvWriter::class, [
$this->app->make(WriterFactory::class)->createFromPath('php://output', 'w'),
new Date()
]);
echo $bom;
$writer->insertHeaders($entity);
$writer->insertEntryList($entryList,$datetime_format);
}, 200, $headers);
$response->send();
$this->set('message', 'csvダウンロードが終了しました。');
}
参照クラスを以下のように設定し、コードを変更いたしました。
そうしますと、「このサイトにアクセスできません。
ウェブページは一時的に停止しているか、新しいウェブアドレスに移動した可能性があります。」と表示されました(添付ファイル)。
参照クラス設定か、どこかで間違えている可能性もあるかと存じます。
どこが原因か、お教えいただけますと幸いでございます。どうぞよろしくお願い
申し上げます。
参照クラス・名前空間
namespace Application\Block\ExternalForm\Form\Controller;
use Concrete\Core\Controller\AbstractController;
use Concrete\Core\Csv\WriterFactory;
use Concrete\Core\Express\Export\EntryList\CsvWriter;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Concrete\Core\Entity\Express\Entity;
use Concrete\Core\Express\EntryList;
use Core;
use UserInfo;
use User;
use Express;
public function action_submit(){
//CSV作成対象エンティティの取得
$input['csvent'] = $this->post('csvent');
$me = $this;
if (isset($input['csvent']) && $input['csvent'] != ''){
$entname = $input['csvent'];
}
//$fileName = $entname.' download file';
$entity = Express::getObjectByHandle($entname);
$headers = [
'Content-Type' => 'text/csv',
'Content-Disposition' => 'attachment; filename=' . $entity->getHandle() . '.csv',
];
$config = $this->app->make('config');
$bom = $config->get('concrete.export.csv.include_bom') ? $config->get('concrete.charset_bom') : '';
$datetime_format = $config->get('concrete.export.csv.datetime_format');
//ここまでのすべての変数は、中身が正常に取れておりました
$response = StreamedResponse::create(function () use ($entity, $me, $bom, $datetime_format) {
$entryList = new EntryList($entity);
$writer = $this->app->make(CsvWriter::class, [
$this->app->make(WriterFactory::class)->createFromPath('php://output', 'w'),
new Date()
]);
echo $bom;
$writer->insertHeaders($entity);
$writer->insertEntryList($entryList,$datetime_format);
}, 200, $headers);
$response->send();
$this->set('message', 'csvダウンロードが終了しました。');
}
Re: エクスプレスエントリーデータダウンロードを外部フォームから実行したい
2021年2月17日 at 10:58
hissyさん
おはようございます。ありがとうございます!!できました!!
昨日投稿した「ページが表示できません」メッセージについては、
参照するクラスが抜けていたことが原因のようでございます。
ご迷惑をおかけいたしました(;^_^A
hissyさんのお教え通りに、$response = StreamRsponse::create(function () use...)
と致しまして、
$response->send(); を実行することで、ダイアログが表示され、無事ダッシュボード
と同じ機能が実現できました。
気になったところと致しましては、この方法でダウンロードしたcsvファイルを
ExcelからUTF-8で読み込んでみますと、
HTMLタグが一緒に吐き出されておりました。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" type="text/css" href="/tkp_system/concrete/themes/elemental/css/bootstrap-modified.css">
<link href="/tkp_system/application/files/cache/css/elemental/main.css?ts=1599545416" rel="stylesheet" type="text/css" media="all">・・・
そこで、
$response->send();
の後にdie関数をかませることで、防止することができました。
$response->send();
die();
これで何とか解決できました。
hissyさん、katzさん、aniyaさん、フォーラムの皆さん、本当に
ありがとうございました。
おはようございます。ありがとうございます!!できました!!
昨日投稿した「ページが表示できません」メッセージについては、
参照するクラスが抜けていたことが原因のようでございます。
ご迷惑をおかけいたしました(;^_^A
hissyさんのお教え通りに、$response = StreamRsponse::create(function () use...)
と致しまして、
$response->send(); を実行することで、ダイアログが表示され、無事ダッシュボード
と同じ機能が実現できました。
気になったところと致しましては、この方法でダウンロードしたcsvファイルを
ExcelからUTF-8で読み込んでみますと、
HTMLタグが一緒に吐き出されておりました。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" type="text/css" href="/tkp_system/concrete/themes/elemental/css/bootstrap-modified.css">
<link href="/tkp_system/application/files/cache/css/elemental/main.css?ts=1599545416" rel="stylesheet" type="text/css" media="all">・・・
そこで、
$response->send();
の後にdie関数をかませることで、防止することができました。
$response->send();
die();
これで何とか解決できました。
hissyさん、katzさん、aniyaさん、フォーラムの皆さん、本当に
ありがとうございました。
Re: エクスプレスエントリーデータダウンロードを外部フォームから実行したい
2021年2月17日 at 11:05
die(); で強制するより \Core::shutdown(); の方が望ましいです。
適切に処理を終了してくれます。
適切に処理を終了してくれます。
Your post has been saved and will be published after approval by the forum moderator.
Katz Ueno
Re: エクスプレスエントリーデータダウンロードを外部フォームから実行したい
ざっくりアドバイスですいませんが、
> 引き続き、エンティティ名別にエントリーデータを動的に取得する方法
を試行中でございます。
コードを奥深くまで読み解く必要があるのですが、
Express の管理画面の方のコードを参考にされると良いと思います。
詳しくは金曜日に・・・