Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Обсуждение общих технических вопросов > Мастер-класс

Ответ
 
Опции темы Опции просмотра
Старый 01.06.2016, 21:24   #1
alexk
Senior Member
 
Регистрация: 26.10.2007
Сообщений: 108
По умолчанию Новый элемент TCA - Label

Приветствую коллеги!

Бывает что много полей в форме и к некоторым полям нужно подписать информацию, в случае разных значений поля или что бы было понятнее.

Можно конечно вписать все в 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 (infoalertdanger...)
            
'title' => $ll.'bookingInfo.title',
            
'text' => '',
            
'field' => 'booking_available',
            
'itemsText' => array(
                
'1' => $ll 'bookingInfo.available',
                
'0' => $ll 'bookingInfo.notAvailable'
            
)
        )
    )
), 
Значения booking_information изменится в зависимости от значения booking_available. Если не вписывать field и itemText то будет статичное сообщение.
__________________
Фанат TYPO!
alexk вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос сайта на новый хостинг gradusov Общие вопросы 12 27.07.2011 17:16
Один элемент контента для нескольких страниц MVH Общие вопросы 3 16.02.2010 17:56
Модификация TCA при помощи Dynaflex reva2 Общие вопросы 2 17.01.2008 14:54
как начать в TYPO3 новый сайт ? Vam TypoScript практикум 5 04.01.2008 03:18
FlexForms + TCA z0r1k Общие вопросы 6 19.10.2007 15:21


Часовой пояс GMT +4, время: 12:22.


Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot

Хостинг и техническая поддержка: TYPO3 Лаборатория