Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   flexform и создание extensions (http://forum.typo3.ru/showthread.php?t=8275)

3ton 30.12.2009 11:31

flexform и создание extensions
 
создал расширение которое отлично работает
суть заключается в том что расширение лезет на защищеный WebSrvice и берет оттуда данные, после чего закидывает их в базу
предварительно проверяет если последние данные были взяты меньше часу назад то не лезет а берет сразу данные из базы.

проблема в том что с этими данными будут работать несколько модулей и у меня ситуация при которой либо я делаю 5-6 отдельных расширений, либо я добавляю в BE к расширению параметры
пользователь при вставке плагина выбирает параметр и расширение в соответствии с выбором будет выдаст нужный результат

расширение и таблицы создал через KickStarter, но не нашел как сделать форму для внесения параметров, почитал что вроде как это FlexForm, но никакой нормальной инфы по ней не нашел, может кто поможет?

Valery Romanchev 30.12.2009 13:40

кикстартер флекс формы к сожалению не делает
Я сам разбирался с флексформами на примерах (экстеншен comments)
Пара страниц об этом есть в книжке Дулепова, но проще на примере посмотреть.

3ton 30.12.2009 13:46

тогда вопрос к Вам, как к уже прошедшему данный этап

достаточно ли создать файл flexform.xml и задать в нем нужную структуру или есть еще пару файлов необходимых для появления формы настроек в BE ???

void 30.12.2009 14:53

Ещё есть пара файлов

3ton 30.12.2009 14:54

можете подсказать или лучше книжку купить??? ;)

Lucifer 30.12.2009 15:11

Думаю, лучше на примерах смотреть. методом научного тыка так сказать :)

void 30.12.2009 22:35

http://wiki.typo3.org/index.php/Exte...sing_Flexforms

3ton 31.12.2009 00:40

спасибо Void - то что доктор прописал!

3ton 04.01.2010 12:22

значит для остальных и по существу.

после написания расширения в KickStarter необходимо его доработать дабы в BE появилась возможность ввести переменные для вставляемого на страницу контент-плагина

для этого необходимо
1. создать файл flexform.xml (его структуру можете изучить, почти в любом имеющемся плагине он в корневой папке)
2. добавить строки соответствующие объявленым в flexform.xml в файл locallang_db.xml (он так же находится в корневой папке)
3. в файле ext_tables.php(тоже в корневой директории) добавить строки

Код:

if(t3lib_div::int_from_ver(TYPO3_version) >= 4002000)
        t3lib_extMgm::addPiFlexFormValue('*','FILE:EXT:'.$_EXTKEY.'/flexform.xml');
else
        t3lib_extMgm::addPiFlexFormValue('default','FILE:EXT:'.$_EXTKEY.'/flexform.xml');

$TCA['tt_content']['types']['list']['subtypes_addlist'][$_EXTKEY.'_pi1']='pi_flexform';

позволяющие нам работать с flexform из нашего плагина

4. добавить в файл нашего расширения (pi1/class.tx_нашеРасширение_pi1.php)
следующий код

Код:

        function main($content, $conf) {
                $this->conf = $conf;
                $this->pi_setPiVarDefaults();
                $this->pi_loadLL();
                // Init FlexForm configuration for plugin:
                $this->pi_initPIflexForm();
                $this->mergeflexFormValuesIntoConf();
                // Get vars
                $var1 = $this->flexFormValue('var1', 's_модуль');
                $var2 = $this->flexFormValue('var2', 's_модуль');
                $var3 = $this->flexFormValue('var3', 's_модуль');

далее добавить методы

Код:

        protected function mergeflexFormValuesIntoConf() {
                $flex = array();
                if ($this->flexFormValue('var1', 's_модуль')) {
                        $flex['var1'] = $this->flexFormValue('var1', 's_модуль');
                }

                if ($this->flexFormValue('var2', 's_модуль')) {
                        $flex['var2'] = $this->flexFormValue('var2','s_модуль');
                }

                if ($this->flexFormValue('var3', 's_модуль')) {
                        $flex['var3'] = $this->flexFormValue('var3', 's_модуль');
                }

                $pid = $flex['pages'] ? $this->pi_getPidList($flex['pages'], $flex['recursive']) : 0;
                if ($pid > 0) {
                        $flex['storagePid'] = $pid;
                }

                $this->conf = array_merge($this->conf, $flex);
        }


        protected function flexFormValue($var, $sheet) {
                return $this->pi_getFFvalue($this->cObj->data['pi_flexform'], $var,$sheet);
        }

        protected function getDisplayText($label, $stdWrapArray=array()) {
                return $this->flexFormValue($label,'s_messages') ? $this->cObj->stdWrap($this->flexFormValue($label,'s_messages'),$stdWrapArray) : $this->cObj->stdWrap($this->pi_getLL('ll_'.$label, '', 1), $stdWrapArray);
        }

насчет последнего метода не уверен, но мне кажеться он вызывается парентом, так как без него у меня не срабатывает отображение

в принципе 4 этих пунктов достаточно чтоб создать форму параметров для вставляемого расширения

dmartynenko 04.01.2010 16:50

Вы так пишете, что новички могут подумать что flexform.xml всегда один и в корневой папке. На самом деле их может может быть много - например один для каждого плагина (piX).

Я для удобства обычно пишу их не в корень, а в подпапку плагина:
pi1/flexform.xml
pi2/flexform.xml

Так легче разбираться с ними если плагинов в экстеншене несколько. Надо только правильно прописать пути в вызове addPiFlexFormValue().

Ваша функция getDisplayText это от какого-то копипаста остаток. Она вовсе не обязательна и никем кроме вас не может вызываться. Хотя это может быть удобным способом локализации - она берет локализованную строку либо заданную пользователем со странички FF s_messages, либо из стандартного locallang файла. Но это все должно быть должным образом сконфигурировано.

Также у вас есть дублирование в коде, так как вы уже FF в $this->conf записали используя mergeflexFormValuesIntoConf():
Код:

$this->mergeflexFormValuesIntoConf();
// Get vars
$var1 = $this->conf('var1');

И стоит сказать, что такая практика нужна если вы хотите использовать в плагине возможность конфигурирования одновременно через FF и через TypoScript. Иначе записывать в $this->conf совсем не обязательно.


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

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