バージョン選択

フォーラム

メニュー

オンライン状況

25 人のユーザが現在オンラインです。 (14 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 25
もっと...

サイト内検索

質問 > 管理機能 > カテゴリー情報の登録項目に画像を追加

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Rights
投稿日時: 2021/3/26 13:12
対応状況: −−−
一人前
登録日: 2019/3/12
居住地:
投稿: 81
カテゴリー情報の登録項目に画像を追加
カテゴリ管理は、カテゴリの名称のみを登録するようにしていますが、カテゴリーイメージとして、画像を登録するよう拡張しましたが、既存のカテゴリーの画像を変更しようとすると生成した画像ファイル名のDBへの登録も、アップロードもされません。

新規登録の際は、選択した画像はアップロードされています。
また、既存のカテゴリーで画像登録のあるデータの画像を削除する処理も動作します。

フォーム要素の指定の仕方に問題がありますでしょうか?
●新規登録
form.file1
●既存
forms[Category.id].file1
●アップロード処理
->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event){
$form = $event->getForm();
$Category = $event->getData();

if ($Category instanceof Category) {
$file_delete = $form["file_delete"]->getData();

if ($file_delete) {
$fs = new Filesystem();
if ($Category->getFilename1()) {
$fs->remove($this->eccubeConfig['eccube_save_image_dir'].'/'.$Category->getFilename1());
$Category->setFilename1(NULL);
}
}

$file1 = $form["file1"]->getData();
if ($file1) {
// 画像ファイルアップロード
$filename = $this->fileUploader->img_upload($file1, $Category->getFilename1());
$Category->setFilename1($filename);
}
}
})
;


[category.twig]
以下、該当箇所を抜粋
・新規登録

<form role="form" name="form1" id="form1" method="post"
action="{% if TargetCategory.id %}{{ path('admin_product_category_edit', {id: TargetCategory.id}) }}{% elseif Parent %}{{ url('admin_product_category_show', {'parent_id': Parent.id}) }}{% else %}{{ url('admin_product_category') }}{% endif %}"
enctype="multipart/form-data">
{% if TargetCategory.hierarchy < eccube_config.eccube_category_nest_level %}
{{ form_widget(form._token) }}
<div class="form-row mb-3">
<div class="col-auto">
{{ form_widget(form.name) }}
{{ form_errors(form.name) }}
</div>
{# ここを追加 #}
<div class="col-auto align-items-center">
{{ form_widget(form.file1, { 'attr': { 'class': 'form-control', 'data-trigger': 'change' }}) }}
{{ form_errors(form.file1) }}
{{ form_widget(form.filename1) }}
{{ form_errors(form.filename1) }}
</div>
{# ここを追加 #}
<div class="col-auto">
<button class="btn btn-ec-regular" type="submit">
{{ 'admin.common.create__new'|trans }}
</button>
</div>
</div>
{# エンティティ拡張の自動出力 #}

・既存
<form class="form-row d-none mode-edit" method="POST" action="{{ (Parent and Parent.id) ? url('admin_product_category_show', {'parent_id': Parent.id}) : url('admin_product_category') }}">
{{ form_widget(forms[Category.id]._token) }}
<div class="col-auto align-items-center">
{{ form_widget(forms[Category.id].name, {'attr': {'data-origin-value': forms[Category.id].name.vars.value}}) }}
{{ form_errors(forms[Category.id].name) }}
</div>
{# ここを追加 #}
<div class="col-auto align-items-center">
{{ form_widget(forms[Category.id].file1, { 'attr': { 'class': 'form-control', 'data-trigger': 'change' }}) }}
{{ form_errors(forms[Category.id].file1) }}
{% if forms[Category.id].filename1.vars.value %}
<div class="c-form__uploadedFilename1">
<img src="{{ asset(forms[Category.id].filename1.vars.value, 'save_image') }}">
ファイル名:{{ forms[Category.id].filename1.vars.value }}
{{ form_widget(forms[Category.id].file_delete) }}
{{ form_errors(forms[Category.id].file_delete) }}
</div>
{% endif %}
{{ form_widget(forms[Category.id].filename1) }}
{{ form_errors(forms[Category.id].filename1) }}
</div>
{# ここを追加 #}
<div class="col-auto align-items-center">
<button class="btn btn-ec-conversion" type="submit">{{ 'admin.common.decision'|trans }}</button>
</div>
<div class="col-auto align-items-center">
<button class="btn btn-ec-sub action-edit-cancel" type="button">{{ 'admin.common.cancel'|trans }}</button>
</div>
{# エンティティ拡張の自動出力 #}

[CategoryTypeExtension.php]Form拡張
<?php

/*
* This file is part of EC-CUBE
*
* Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
*
* http://www.ec-cube.co.jp/
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Customize\Form\Extension;

use Customize\Service\FileUploader;
use Eccube\Common\EccubeConfig;
use Eccube\Entity\Category;
use Eccube\Form\Type\Admin\CategoryType;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\HttpFoundation\File\File;

class CategoryTypeExtension extends AbstractTypeExtension
{

/**
* @var EccubeConfig
*/
private $eccubeConfig;

/**
* @var FileUploader
*/
private $fileUploader;

public function __construct(
EccubeConfig $eccubeConfig,
FileUploader $fileUploader
) {
$this->eccubeConfig = $eccubeConfig;
$this->fileUploader = $fileUploader;
}

/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
// ファイルアップロード用の項目
->add('file1', FileType::class, [
'mapped' => false,
'required' => false,

'constraints' => [
new \Symfony\Component\Validator\Constraints\File([
'maxSize' => '10240k',
'mimeTypes' => [
'image/gif', 'image/jpeg', 'image/png',
],
'uploadErrorMessage' => '画像ファイルを選択してください'
])
]
])
->add('filename1', HiddenType::class)
->add('filename2', HiddenType::class)
->add('file_delete', CheckboxType::class, [
'mapped' => false,
'required' => false,
'label' => 'ファイルを削除',
'value' => '1',
])
;

$builder
->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event){
$form = $event->getForm();
$Category = $event->getData();

$filename1 = $Category->getFilename1();

if ($Category instanceof Category) {
if ($Category->getFilename1()) {
// アップロード済みのファイルをFileTypeにセット
$form["file1"]->setData(
new File(
$this->eccubeConfig["eccube_save_image_dir"]."/".$Category->getFilename1()
)
);
}
}
})
->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event){
$form = $event->getForm();
$Category = $event->getData();

if ($Category instanceof Category) {
$file_delete = $form["file_delete"]->getData();

if ($file_delete) {
$fs = new Filesystem();
if ($Category->getFilename1()) {
$fs->remove($this->eccubeConfig['eccube_save_image_dir'].'/'.$Category->getFilename1());
$Category->setFilename1(NULL);
}
}

$file1 = $form["file1"]->getData();
if ($file1) {
// 画像ファイルアップロード
$filename = $this->fileUploader->img_upload($file1, $Category->getFilename1());
$Category->setFilename1($filename);
}
}
})
;
}

/**
* {@inheritdoc}
*/
public function getExtendedType()
{
return CategoryType::class;
}
}
Rights
投稿日時: 2021/3/31 13:56
対応状況: 解決済
一人前
登録日: 2019/3/12
居住地:
投稿: 81
Re: カテゴリー情報の登録項目に画像を追加
自己レスです。

・既存
<form class="form-row d-none mode-edit" method="POST" action="{{ (Parent and Parent.id) ? url('admin_product_category_show', {'parent_id': Parent.id}) : url('admin_product_category') }}">

⇒ enctype="multipart/form-data" がありませんでした。

お邪魔しました。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は71,539名です
総投稿数は101,314件です

投稿数ランキング

1
seasoft
7333
2
468
2998
3
AMUAMU
2712
4
nanasess
2147
5
umebius
2000
6
yuh
1612
7
red
1449
8
h_tanaka
1080
9
tsuji
936
10
fukap
907
11
shutta
835
12
tao_s
793
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.