31からまでを表示 (計136) |
ご教示ありがとうございます。
参照クラスを以下のように設定し、コードを変更いたしました。
そうしますと、「このサイトにアクセスできません。
ウェブページは一時的に停止しているか、新しいウェブアドレスに移動した可能性があります。」と表示されました(添付ファイル)。
参照クラス設定か、どこかで間違えている可能性もあるかと存じます。
どこが原因か、お教えいただけますと幸いでございます。どうぞよろしくお願い
申し上げます。
参照クラス・名前空間
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ダウンロードが終了しました。');
}
Posted on 2月 16, 2021 at 1:21 午後
|
hissyさん
おはようございます。ありがとうございます。
2/12の週刊concrete5において、katzさんより、
viewから渡したエンティティハンドル名がどのように
なっているかなど、var_dump で確認してみてくださいと
教えていただきましたので、それぞれの変数を確認して
見ました。
var_dump($entname);
exit();
としたところ、$entname は、予定通り、エンティティのハンドル
名が渡っておりました。
その後、return StreamedRespons::create~
の上の行までは、正常に値が取れておりました。
return StreamedRespons::create~で何も取得できていない状態
になっておりましたので、教えていただいた方法で検証させて
いただきます。ありがとうございます。
Posted on 2月 16, 2021 at 10:35 午前
|
いつもお世話になっております。
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);
}
Posted on 2月 12, 2021 at 4:14 午後
|
hissyさん
ありがとうございます。
そこまでご配慮いただき、感謝申し上げます。
はい、上のようにして$entityを取得しておりますので、
これを public function csv_export に引き継いで、
一度試させていただきます。
ありがとうございます。
Posted on 2月 09, 2021 at 6:02 午後
|
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ファイルの作成ができると
考えております。
どうぞよろしくお願い申し上げます。
Posted on 2月 09, 2021 at 5:35 午後
|
hissyさん
おはようございます。
ありがとうございます。よく理解できました。
このコアクラスと、ExpressエンティティIDを
動的に取得できれば、csvファイルダウンロード
機能が実装できると思います。
ありがとうございました。
Posted on 2月 09, 2021 at 9:17 午前
|
aniyaさま、おはようございます。
いつもご支援を賜りまして、ありがとうございます。
今回の週間concrete5を拝聴し、hissyさんからご教示いただいた、Githubのコードを
確認させていただき、ExpressのCSVエクスポートの動きが理解できてまいりました。
external formのリストボックスで選択したExpressエンティティ(番号)を引数として
csvライブラリに渡して検証してみたいとおもいます。
concrete5には、フォームヘルパーやメールヘルパーと同様に、CsvWriterのような強力
なライブラリが最初から備わっているのは、本当に助かります。
1からphpコードを書くことに比べ、開発効率が格段に上がります。
ありがとうございます。頑張って解決いたします。
Posted on 2月 08, 2021 at 10:58 午前
|
フォーラムの皆さま
いつもお世話になっております。
おかげさまで、自己解決いたしました。
フォームヘルパで設置した部品を<label>タグで囲むことで実現できました。
【Before】
<div class="form-group border col-sm-2"><?=$form->radio('gakka', '1')?>法学科</div>
【After】
<div class="form-group border col-sm-2"><label><?=$form->radio('gakka', '1')?>法学科</label></div>
取り急ぎ、ご報告申し上げます。
Posted on 2月 04, 2021 at 2:11 午後
|
フォーラムの皆さま
おはようございます。
いつも暖かいご支援をいただき、ありがとうございます。
外部フォームで、フォームヘルパの「ラジオボタン」や
「チェックボックス」を配置しておりますが、
通常のHTML5に見られるように、ラジオボタンだけではなく、
後ろにつくラベルをクリックしたときにも、ラジオボタンが
セレクトされた状態にしたいと思っております。
HTML5の例
<input type="radio" name="gakubu" id="L" value="1"><label for="L">法学部</label>
上記のように記述しますと、ラジオボタンとラベルどちらをクリックしても
ラジオボタンが選択されます。
フォームヘルパの例
フォームヘルパのラジオボタンで、buttonvalue という属性がございますが、
これがinputタグのidに該当すると思い、
<?=$form->radio('gakubu', 'L', '1')?><label for="L">①法学部</label>
としてみましたが、ページ上ではラベルをクリックしてもラジオボタンは
選択できませんでした。
方法がございましたら、お教えいただけますと幸いです。
どうぞよろしくお願い致します。
Posted on 2月 04, 2021 at 11:24 午前
|
hissyさん
おはようございます。
ありがとうございます。
ぜひ確認させていただきます。
追加する機能が増えるにつれ、まだまだ勉強不足を痛感
しております。
勉強させていただきます。
Posted on 2月 04, 2021 at 11:15 午前
|