+ Antworten
Ergebnis 1 bis 7 von 7

Thema: Flexform XML Knoten auslesen

  1. #1
    TP-Junior dande macht alles soweit korrekt
    Registriert seit
    Oct 2007
    Beiträge
    21

    Flexform XML Knoten auslesen

    Hi Leute,
    ich habe ein Extension das ein Flexform Formular enthält.
    Das Formular besteht aus einem Group Feld in dem man ein Bild laden kann.
    Außerdem ist es eine Section.
    So sieht es aus.

    Folgende XML wird in die DB gelegt:
    PHP-Code:
    <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
    <T3FlexForms>
        <data>
            <sheet index="sDEF">
                <language index="lDEF">
                    <field index="fields">
                        <el index="el">
                            <section index="1">
                                <itemType index="jpg">
                                    <el>
                                        <field index="thumb">
                                            <value index="vDEF">1_s_06.jpg</value>
                                        </field>
                                    </el>
                                </itemType>
                                <itemType index="_TOGGLE">0</itemType>
                            </section>
                            <section index="2">
                                <itemType index="jpg">
                                    <el>
                                        <field index="thumb">
                                            <value index="vDEF">2_s_01.jpg</value>
                                        </field>
                                    </el>
                                </itemType>
                                <itemType index="_TOGGLE">0</itemType>
                            </section>
                        </el>
                    </field>
                </language>
            </sheet>
        </data>
    </T3FlexForms>
    Wie komme ich nun an die Bildnamen damit ich die Bilder im FE anzeigen kann?
    Ich habe ua schon dieses hier versucht aber in einer Section klappt das nicht
    $content = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'thumb', 'sDEF');

    Danke und Gruß

  2. #2
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    aus diesem Grund hab ich in 4.3 folgende Funktion integriert:

    PHP-Code:
    /**
         * Converts a given config in Flexform to a conf-Array
         * @param    string         Flexform data
         * @param    array         Array to write the data into, by reference
         * @param    boolean        is set if called recursive. Don't call function with this parameter, it's used inside the function only
         * @access     public
         *
         */
        
    public function readFlexformIntoConf($flexData, &$conf$recursive=FALSE) {
            if (
    $recursive === FALSE) {
                
    $flexData t3lib_div::xml2array($flexData'T3');
            }

            if (
    is_array($flexData)) {
                if (isset(
    $flexData['data']['sDEF']['lDEF'])) {
                    
    $flexData $flexData['data']['sDEF']['lDEF'];
                }

                foreach (
    $flexData as $key => $value) {
                    if (
    is_array($value['el']) && count($value['el']) > 0) {
                        foreach (
    $value['el'] as $ekey => $element) {
                            if (isset(
    $element['vDEF'])) {
                                
    $conf[$ekey] =  $element['vDEF'];
                            } else {
                                if(
    is_array($element)) {
                                    
    $this->readFlexformIntoConf($element$conf[$key][key($element)][$ekey], TRUE);
                                } else {
                                    
    $this->readFlexformIntoConf($element$conf[$key][$ekey], TRUE);
                                }
                            }
                        }
                    } else {
                        
    $this->readFlexformIntoConf($value['el'], $conf[$key], TRUE);
                    }
                    if (
    $value['vDEF']) {
                        
    $conf[$key] = $value['vDEF'];
                    }
                }
            }
        } 
    Du kannst Sie bei Dir einsetzen und so aufrufen:
    PHP-Code:
    $flexconf = array();
    $this->readFlexformIntoConf($this->cObj->data['pi_flexform'], $flexconf); 


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  3. #3
    TP-Junior dande macht alles soweit korrekt
    Registriert seit
    Oct 2007
    Beiträge
    21
    Hi,

    es geht mit der Methode irgendwie nicht
    Ich erhalte nur ein EMPTY! für das flexconf Array im debugger.
    Es sollte doch durch '$conf[$key] = $value['vDEF'];' das Array befüllt werden:

    PHP-Code:
    function main($content$conf) {
            
    $this->conf $conf;
            
    $this->pi_setPiVarDefaults();
            
    $this->pi_loadLL();
             
    $this->pi_initPIflexForm();
        
            
    $flexconf = array();
            
    $this->readFlexformIntoConf($this->cObj->data['pi_flexform'], $flexconf); 
        
            
    t3lib_div::debug($flexconf ); // EMPTY!
            
    return $this->pi_wrapInBaseClass($content);
        } 

    Wenn ich außerdem versuche die XML in ein Array über die API Methode zu konvertieren erhalte ich ein 'Line 1: Empty document|'

    PHP-Code:
        function main($content$conf) {
            
    $this->conf $conf;
            
    $this->pi_setPiVarDefaults();
            
    $this->pi_loadLL();
             
    $this->pi_initPIflexForm();
        
        
            
    $flexData = array();
            
    $flexData t3lib_div::xml2array($this->cObj->data['pi_flexform']);
            
    t3lib_div::debug($flexData ); // |Line 1: Empty document| ????
            
            
    return $this->pi_wrapInBaseClass($content);
        } 

  4. #4
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    das liegt wohl an Deiner Flexform, die ist nicht korrekt.
    Anbei einmal die Flexform des neuen MediaCEs da die auch sections enthält. Vergleiche es mal!

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <T3DataStructure>
    	<meta>
    		<langDisable>1</langDisable>
    	</meta>
    	<sheets>
    		<sDEF>
    			<ROOT>
    				<TCEforms>
    					<sheetTitle>LLL:EXT:cms/locallang_ttc.xml:media.options</sheetTitle>
    				</TCEforms>
    				<type>array</type>
    				<el>
    					<mmFile>
    						<TCEforms>
    							<label>LLL:EXT:cms/locallang_ttc.xml:media.url</label>
    							<config>
    								<type>input</type>
    								<size>60</size>
    								<eval>trim</eval>
    								<default></default>
    								<wizards type="array">
    									<_PADDING>2</_PADDING>
    									<link type="array">
    										<type>popup</type>
    										<title>LLL:EXT:cms/locallang_ttc.xml:media.browseUrlTitle</title>
    										<icon>link_popup.gif</icon>
    										<script>browse_links.php?mode=wizard&amp;act=file|url</script>
    										<params type="array">
    											<blindLinkOptions>page,folder,mail,spec</blindLinkOptions>
    											<allowedExtensions>class,swf,swa,dcr,wav,avi,au,mov,asf,mpg,wmv,mp3,mp4,m4v,flv</allowedExtensions>
    										</params>
    										<JSopenParams>height=300,width=500,status=0,menubar=0,scrollbars=1</JSopenParams>
    									</link>
    								</wizards>
    							</config>
    						</TCEforms>
    					</mmFile>
    					<mmforcePlayer>
    						<TCEforms>
    							<label>LLL:EXT:cms/locallang_ttc.xml:media.forcePlayer</label>
    							<config>
    								<type>check</type>
    								<default>1</default>
    							</config>
    						</TCEforms>
    					</mmforcePlayer>
    					<mmType>
    						<TCEforms>
    							<label>LLL:EXT:cms/locallang_ttc.xml:media.type</label>
    							<config>
    								<type>select</type>
    								<items>
    									<numIndex index="0">
    										<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.type.video</numIndex>
    										<numIndex index="1">video</numIndex>
    									</numIndex>
    									<numIndex index="1">
    										<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.type.audio</numIndex>
    										<numIndex index="1">audio</numIndex>
    									</numIndex>
    								</items>
    							</config>
    						</TCEforms>
    					</mmType>
    					<mmWidth>
    						<TCEforms>
    							<label>LLL:EXT:cms/locallang_ttc.xml:media.width</label>
    							<config>
    								<type>input</type>
    								<size>8</size>
    								<max>5</max>
    								<eval>trim</eval>
    							</config>
    						</TCEforms>
    					</mmWidth>
    					<mmHeight>
    						<TCEforms>
    							<label>LLL:EXT:cms/locallang_ttc.xml:media.height</label>
    							<config>
    								<type>input</type>
    								<size>8</size>
    								<max>5</max>
    								<eval>trim</eval>
    							</config>
    						</TCEforms>
    					</mmHeight>
    					<mmRenderType>
    						<TCEforms>
    							<label>LLL:EXT:cms/locallang_ttc.xml:media.renderType</label>
    							<config>
    								<type>select</type>
    								<items>
    									<numIndex index="0">
    										<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.renderType.auto</numIndex>
    										<numIndex index="1">auto</numIndex>
    									</numIndex>
    									<numIndex index="1">
    										<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.renderType.swf</numIndex>
    										<numIndex index="1">swf</numIndex>
    									</numIndex>
    									<numIndex index="2">
    										<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.renderType.qt</numIndex>
    										<numIndex index="1">qt</numIndex>
    									</numIndex>
    									<numIndex index="3">
    										<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.renderType.embed</numIndex>
    										<numIndex index="1">embed</numIndex>
    									</numIndex>
    								</items>
    								<itemsProcFunc>tx_cms_mediaItems->customMediaRenderTypes</itemsProcFunc> 
    							</config>
    						</TCEforms>	
    					</mmRenderType>
    					<mmMediaOptions>
    					<tx_templavoila>
    						<title>LLL:EXT:cms/locallang_ttc.xml:media.additionalOptions</title>
    					</tx_templavoila>
    						<type>array</type>
    						<section>1</section>
    						<el>
    							<mmMediaOptionsContainer>
    							<type>array</type>
    							<tx_templavoila>
    								<title>LLL:EXT:cms/locallang_ttc.xml:media.params</title>
    							</tx_templavoila>
    							<el>
    								<mmParamName>
    									<TCEforms>
    										<label>LLL:EXT:cms/locallang_ttc.xml:media.params.option</label>
    										<config>
    											<type>select</type>
    											<items>
    												<numIndex index="0">
    													<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.params.autoPlay</numIndex>
    													<numIndex index="1">autoPlay</numIndex>
    												</numIndex>
    												<numIndex index="1">
    													<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.params.loop</numIndex>
    													<numIndex index="1">loop</numIndex>
    												</numIndex>
    												<numIndex index="2">	
    													<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.params.quality</numIndex>
    													<numIndex index="1">quality</numIndex>
    												</numIndex>
    												<numIndex index="3">	
    													<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.params.preview</numIndex>
    													<numIndex index="1">preview</numIndex>
    												</numIndex>
    												<numIndex index="4">
    													<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.params.allowScriptAccess</numIndex>
    													<numIndex index="1">allowScriptAccess</numIndex>                     
    												</numIndex>
    												<numIndex index="5">
    													<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.params.allowFullScreen</numIndex>
    													<numIndex index="1">allowFullScreen</numIndex>                     
    												</numIndex>
    											</items>
    											<itemsProcFunc>tx_cms_mediaItems->customMediaParams</itemsProcFunc> 
    										</config>
    									</TCEforms>	
    								</mmParamName>
    								<mmParamSet>
    									<TCEforms>
    										<label>LLL:EXT:cms/locallang_ttc.xml:media.params.setTo</label>
    										<config>
    											<type>select</type>
    											<items>
    												<numIndex index="0">
    													<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.params.on</numIndex>
    													<numIndex index="1">1</numIndex>
    												</numIndex>
    												<numIndex index="1">
    													<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.params.off</numIndex>
    													<numIndex index="1">0</numIndex>
    												</numIndex>
    												<numIndex index="2">
    													<numIndex index="0">LLL:EXT:cms/locallang_ttc.xml:media.params.valueEntry</numIndex>
    													<numIndex index="1">2</numIndex>                     
    												</numIndex>
    											</items>
    										</config>
    									</TCEforms>	
    								</mmParamSet>
    								<mmParamValue>
    									<TCEforms>
    										<label>LLL:EXT:cms/locallang_ttc.xml:media.params.value</label>
    										<config>
    											<type>input</type>
    											<size>16</size>
    											<default></default>
    										</config>
    									</TCEforms>
    								</mmParamValue>
    							</el>
    							
    							</mmMediaOptionsContainer>
    							<mmMediaCustomParameterContainer>
    								<type>array</type>
    								<tx_templavoila>
    									<title>LLL:EXT:cms/locallang_ttc.xml:media.params.customEntry</title>
    								</tx_templavoila>
    								<el>
    									<mmParamCustomEntry>
    										<TCEforms>
    											<label>LLL:EXT:cms/locallang_ttc.xml:media.params.customEntryLabel</label>
    											<config>
    												<type>text</type>
    												<rows>6</rows>
    												<cols>60</cols>
    											</config>
    										</TCEforms>
    									</mmParamCustomEntry>	
    								</el>
    							</mmMediaCustomParameterContainer>
    						</el>
    					</mmMediaOptions>
    				</el>
    			</ROOT>
    		</sDEF> 
    	</sheets>
    </T3DataStructure>
    wie Du siehst gehört bei section auch ein type=array dazu.

    Line 1: Empty document deutet auf invalides xml


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  5. #5
    TP-Junior dande macht alles soweit korrekt
    Registriert seit
    Oct 2007
    Beiträge
    21
    Ich habe meine flexform XML mit deiner bsp. xml verglichen.
    Die sind exakt gleich nur das ich ein group anstatt ein select verwende.
    <type>array</type><section>1</section> habe ich auch stehen.

    Ich erhalte im FE immer nur ein "Line 1: Empty document" im debugger

    Vielleicht magst du dir mal die extension anschauen, ich habe diese hier hochgeladen.
    Einfach installieren und als plugin auf einer Seite einbauen. Bilder auswählen und schauen was im FE ausgegeben wird. Vielleicht bekommst du ja das Array ausgegeben?

  6. #6
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    ok, habs mir angeschaut.

    Der Grund ist klar: $this->pi_initPIflexForm(); macht bereits ein xml2array auf das Feld. Ein 2. Aufruf ergibt natürlich ein leeres Ergebnis.

    Also entweder $this->pi_initPIflexForm(); und direkt debug auf $this->cObj->data['pi_flexform'] oder meine Routine ohne $this->pi_initPIflexForm(); oder xml2array ohne $this->pi_initPIflexForm(); - suchs Dir aus


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  7. #7
    TP-Junior dande macht alles soweit korrekt
    Registriert seit
    Oct 2007
    Beiträge
    21
    Vielen dank ,da wäre ich im leben nicht drauf gekommen.
    Klappt jetzt bestens.

+ Antworten

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 20.09.2008, 09:48
  2. Flexform Link-Element
    Von Elli im Forum TYPO3
    Antworten: 4
    Letzter Beitrag: 11.06.2008, 15:43
  3. Knoten
    Von counter18 im Forum Photoshop
    Antworten: 1
    Letzter Beitrag: 07.11.2007, 18:09
  4. Antworten: 4
    Letzter Beitrag: 28.04.2007, 10:34
  5. Antworten: 5
    Letzter Beitrag: 12.03.2007, 00:38

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51