WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
Blog スタッフブログ
EC-CUBE
システム開発
[EC-CUBE]OrderItemに独自カラム追加した場合の注意点
システム開発担当のTFです。
※EC-CUBE4.0.4
メモ
OrderItemのTraitで、 auto_renderをfalseにしている場合、
管理画面の受注編集でフォームを追加しないと、編集保存で値がクリアされた( バージョンや他カスタマイズの影響の可能性も有り )
auto_renderをtrue にするか 手動でフォーム追加 必要と思われる
フォームによる編集をしない場合でも、hiddenで飛ばす必要があると思われる
サンプル
<?php
namespace Customize\Entity;
use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation as Eccube;
use Eccube\Annotation\EntityExtension;
/**
* @EntityExtension("Eccube\Entity\OrderItem")
*/
trait OrderItemTrait
{
/**
* @ORM\Column(name="delivered", type="boolean", nullable=true, options={"default" = false})
* @Eccube\FormAppend(
* auto_render=false,
* )
*/
public $delivered;
/**
* @ORM\Column(name="delivery_date", type="datetimetz", nullable=true)
* @Eccube\FormAppend(
* auto_render=false,
* )
*/
public $delivery_date;
/**
* @return boolean
*/
public function getDelivered()
{
return ( !empty($this->delivered) ) ? true : false;
}
/**
* @param boolean|null $delivered
*
* @return OrderItem
*/
public function setDelivered(bool $delivered = null)
{
$this->delivered = $delivered;
return $this;
}
/**
* @param \DateTime|null $orderDate
*
* @return OrderItem
*/
public function setDeliveryDate($deliveryDate = null)
{
$this->delivery_date = $deliveryDate;
return $this;
}
/**
* Get delivery_date.
*
* @return \DateTime|null
*/
public function getDeliveryDate()
{
return $this->delivery_date;
}
}<?php
namespace Customize\Form\Extension\Admin;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilderInterface;
use Eccube\Form\Type\Admin\OrderItemType;
use Symfony\Component\Form\Extension\Core\Type;
class OrderItemTypeExtension extends AbstractTypeExtension
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add("delivered",Type\ChoiceType::class,[
'expanded' => false,
'multiple' => false,
'required' => false,
'choices' => ['未発送'=>'0', '発送済み'=>'1'],
]);
$builder->add('delivery_date',Type\DateTimeType::class, [
'widget' => 'single_text',
'required' => false,
]);
}
/**
* {@inheritdoc}
*/
public function getExtendedType()
{
return OrderItemType::class;
}
/**
* {@inheritdoc}
*/
public static function getExtendedTypes(): iterable
{
yield OrderItemType::class;
}
}{# 省略 #}
{# このループ内に追加 #}
{% for orderItemForm in form.OrderItems %}
{# 省略 #}
{# 表示し、セレクト #}
{{ form_widget(orderItemForm.delivered) }}
{# 非表示で値の保持 #}
{{ form_widget(orderItemForm.delivery_date, { 'type': 'hidden' }) }}
{# 省略 #}
{% endfor %}
{# 省略 #}