Приветствую коллеги!
Бывает что много полей в форме и к некоторым полям нужно подписать информацию, в случае разных значений поля или что бы было понятнее.
Можно конечно вписать все в locallang_csh.. но я предпочитаю вписывать туда общую инфу по полю.
И так начнем:
Typo3 7.. построен на bootstrap и там есть два замечательных элемента это alert и panel (почитать можно тут:
http://bootstrap-3.ru/) их и задействуем.
Что будем делать:
1. статичные сообщения
2. динамичные сообщения в зависимости от значения поля.
1) в файл ext_tables.php добавляем новый тип элемента 'label'
PHP код:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry']['label'] = array(
'nodeName' => 'label',
'priority' => 90,
'class' => \Tx\Extension\Backend\Form\Element\LabelElement::class,
);
\Tx\Extension\Backend\Form\Element\LabelElement - это не путь, а namespace
2) создаем папку Classes/Form/Element/ c файлом LabelElement.php
PHP код:
<?php
namespace Tx\Extension\Backend\Form\Element;
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
use TYPO3\CMS\Core\Utility\GeneralUtility; \\ это не обязательно
use TYPO3\CMS\Backend\Form\Element\AbstractFormElement;
use TYPO3\CMS\Lang\LanguageService;
use TYPO3\CMS\Extbase\Utility\DebuggerUtility; \\ это не обязательно, только для проверки
/**
* Generation of geopicker TCEform element
*/
class LabelElement extends AbstractFormElement
{
/**
* Handler for unknown types.
*
* @return array As defined in initializeResultArray() of AbstractNode
*/
public function render()
{
$resultArray = $this->initializeResultArray();
$languageService = $this->getLanguageService();
$ll = 'LLL:EXT:extension/Resources/Private/Language/locallang.xlf:';
$row = $this->data['databaseRow'];
$parameterArray = $this->data['parameterArray'];
$parameters = $parameterArray['fieldConf']['config']['parameters'];
$title = ($parameters['title']) ? $languageService->sL($parameters['title'], true) : '';
$text = ($parameters['title']) ? $languageService->sL($parameters['text'], true) : $languageService->sL($ll.'panelDefaultText', true);
if(isset($parameters['field']) && $parameters['field']){
$fieldValue = $row[$parameters['field']];
if(isset($parameters['itemsText']) && $parameters['itemsText']){
$text = $languageService->sL($parameters['itemsText'][$fieldValue]);
}
}
if($parameters['elementtype'] == 'panel'){
$type = ($parameters['infotype']) ? $parameters['infotype'] : 'info';
$html = '<div class="panel panel-'.$type.'">';
$html .= '<div class="panel-heading"><h3 class="panel-title">'.$title.'</h3></div>';
$html .= '<div class="panel-body">'.$text.'</div>';
}
if($parameters['elementtype'] == 'alert'){
$type = ($parameters['infotype']) ? $parameters['infotype'] : 'info';
$html = '<div class="alert alert-'.$type.'">';
$html .= '<strong>'.$title.'</strong> ';
$html .= $text.'</div>';
}
$resultArray['html'] = $html;
return $resultArray;
}
}
все вроде понятно и просто, тут не сложный php c условиями.
locallang.xlf - тут ваш lang файл там можно вписать заголовок или текст по умолчанию, что бы не забывали вписывать.
и собственно сам TCA
PHP код:
'booking_available' => array(
'exclude' => 0,
'label' => $ll.'booking_available',
'config' => array(
'type' => 'check',
'default' => 1,
'items' => array(
array($ll.'yesno', '0')
)
)
),
'booking_information' => array(
'exclude' => 0,
'config' => array(
'type' => 'label',
'parameters' => array(
'elementtype' => 'panel', \\ panel or alert
'infotype' => 'info', \\ bootstrap types (info, alert, danger...)
'title' => $ll.'bookingInfo.title',
'text' => '',
'field' => 'booking_available',
'itemsText' => array(
'1' => $ll . 'bookingInfo.available',
'0' => $ll . 'bookingInfo.notAvailable'
)
)
)
),
Значения booking_information изменится в зависимости от значения booking_available. Если не вписывать field и itemText то будет статичное сообщение.