2016-07-17 9 views
0

Я нажимал на меня небольшое расширение в сборщике расширений вместе. Это общий объект (стена) с IRRE-элементами (окна в стене - 1: n). Этот IRRE-элемент имеет поле выбора (цвет окна) с разными значениями. Я добавил значения в папку переопределения, поэтому они не перезаписываются, когда я добавляю другое поле в Extension Builder.TYPO3 Extension-Builder output select-value IRRE in Fluid

В моем шаблоне я просматриваю все n элементов и пытаюсь вывести каждый из них в частичном. Но теперь в браузере отображаются только идентификаторы, а не значения.

Вот мой TCA-Override:

$GLOBALS['TCA']['MY_EXTENSIO']['columns']['color']['config']['items'] = [ 
['Green', 0], 
['Red', 1], 
['Blue', 2], 
['Gray with orange dots', 3], 
]; 

Путь я сделать это в частичном

{window.color} // window is the passed variable of the loop 

В бэкэнд все работает просто отлично. Даже если я сохраняю данные, перезагружаю ... Всегда выбирается название цвета (например, «Синий»). Но в интерфейсе выход просто «2» - идентификатор цвета. Я ничего не делал: вместо этого я сменил контроллер, и я не работал многоканальный ...

Неужели кто-нибудь из вас знает меня? Я гуглингом с утра без каких-либо результатов.

+1

Конфигурация TCA будет отображаться поле выбора в ВЕ, поэтому вам сохраненный с BE, он сохранит значение поля выбора, как вы указали 2 для Blue. Вы можете присвоить значение, например ['Blue' => '# 00F'], и вам нужно проверить тип поля «color» вашего DB - varchar или numeric. в этом случае вам понадобится поле типа var varar. –

+0

Как выглядит конфигурация поля TCA перед переопределением? Можете ли вы опубликовать его здесь? –

+0

@Ghanshyam Gohel, я изменил код, как вы сказали, но теперь невозможно сохранить запись в бэкэнд. Каждый раз возникает ошибка: « 1: Эти поля записи 3 в таблице« tx_hous_domain_model_window »не были сохранены правильно: цвет! Значения могут быть изменены из-за разлива типа базы данных». Есть ли способ изменить базу данных? – user1508609

ответ

1

TCA-Override:

$GLOBALS['TCA']['MY_EXTENSIO']['columns']['color']['config']['items'] = [ 
['Green', '#060'], 
['Red', '#F00'], 
['Blue', '#00F'], // for better practice I suggest classes like: ['Blue', 'blue-color-code'] 
['Gray with orange dots', '#999'], 
]; 

Изменение типа поля в ext_tables.sql -> DONOT забудьте обновить БД из инструмент установки

CREATE TABLE tx_hous_domain_model_window (
    color varchar(255) DEFAULT '' NOT NULL 
); 

Просто посмотрите, как ваша модель должна выглядеть:

class Window extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity { 
    protected $color = ''; 

    public function getColor() { 
     return $this->color; 
    } 
    public function setColor($color) { 
     $this->color = $color; 
    } 
} 

на ваш взгляд:

{window.color} <!-- either you'll get '#00F' for blue or 'blue-color-code' class as per your TCA config --> 

Donot забудьте очистить установки кэш инструмент

+0

- это лучший способ? –

+0

@SebastianSchmal, поскольку есть много способов добиться того, что вам нужно, но всегда зависит от требований. обычно я предпочитаю или предлагаю использовать классы, как я дал его в приведенном выше примере. Http: // скринкаст.com/t/8OXXVRBGu –

+0

@SebastianSchmal как указано уже есть разные способы. Я бы предложил использовать модель домена для Color. Затем вы можете решить, должен ли он быть ValueObject или DomainEntity - если поведение связано только с атрибутами (значения RGB, значения CYMK, ..), это в основном ValueObject –