Zum Inhalt springen

Flexform -> foreign_table_where

Erstellt am 7. Mai 2008 · 5 Antworten · letzte Antwort am 3. Dezember 2008

Tags: Frage

laser ·

Moin,

hab ein kleines Problem. Zuerst mein Flexform-Code:

<displayFederalstates>
  <TCEforms>
    <label>LLL:EXT:mh_branchenbuch/locallang_db.php:tx_mhbranchenbuch_bundesland.name</label>
    <config>
      <type>select</type>
      <foreign_table>tx_mhbranchenbuch_bundesland</foreign_table>
      <foreign_table_where>ORDER BY tx_mhbranchenbuch_bundesland.name</foreign_table_where>
      <requestUpdate>1</requestUpdate>
      <size>1</size>
      <items type="array">
        <numIndex index="0"></numIndex>
      </items>
      <maxitems>1</maxitems>
      <minitems>0</minitems>
    </config>
  </TCEforms>
</displayFederalstates>

<displayAdministrative>
  <TCEforms>
    <label>LLL:EXT:mh_branchenbuch/locallang_db.php:tx_mhbranchenbuch_landkreis.name</label>
    <config>
      <type>select</type>
      <foreign_table>tx_mhbranchenbuch_landkreis</foreign_table>
      <foreign_table_where>
        AND tx_mhbranchenbuch_landkreis.bundesland=###REC_FIELD_displayFederalstates### 
        ORDER BY tx_mhbranchenbuch_landkreis.name
      </foreign_table_where>
      <requestUpdate>1</requestUpdate>
      <size>1</size>
      <items type="array">
        <numIndex index="0"></numIndex>
      </items>
      <maxitems>1</maxitems>
      <minitems>0</minitems>
    </config>
  </TCEforms>
</displayAdministrative>

displayFederalstates wird angezeigt, nur displayAdministrative nicht. Folgendes soll eigentlich passieren. Man wählt etwas in displayFederalstates aus und die entsprechenden Datensätze aus displayAdministrative werden dann ausgelesen. Das Backend sagt mir folgende Fehlermeldung:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY tx_mhbranchenbuch_landkreis.name' at line 7 This may indicate a table defined in tables.php is not existing in the database!

Dabei macht mich der letzte Satz stutzig. Nehme ich den Krams mit den ###REC_FIELD...### raus dann geht das wunderbar.

digedag ·

Hi, ich wollte gerade die gleiche Funktionalität nutzen und erhalte den gleichen Fehler. #paralyzed# Wenn du bei dir das sqlDebug aktivierst, dann wird auch ersichtlich, warum es nicht funktioniert. Der Marker ###REC_FIELD_...### wird nämlich nicht richtig ersetzt und bleibt leer.

Ich hab mal in der t3lib_befunc nachgesehen und festgestellt, daß man wohl nur Zugriff auf die Daten des tt_content-Records hat. Die Werte des Flexform sind ja in der XML-Struktur versteckt und können daher leider nicht verwendet werden. Hier bleibt dann wohl nur der Weg über eine Userfunction.

SfiSh ·

Hallo,
ich wollte das Thema nochmal aufwärmen und fragen, ob ihr eine Lösung gefudnen habt?
Ein Tip für einen Workaround wäre mir auch ganz lieb.

Ich würde gern in der Flexform-conf einen Marker mit einem Wert auf static_conf ersetzen.

Viele Grüße.

digedag ·

Also wie schon erwähnt, bleibt hier nur der Weg über eine Userfunc:

<scope.betset>
  <TCEforms>
    <exclude>1</exclude>
    <label>LLL:EXT:t3sportsbet/locallang_db.xml:plugin.t3sportsbet.flexform.betset</label>
    <config>
      <type>select</type>
      <items>
      	<numIndex index="0">
      		<numIndex index="0">LLL:EXT:t3sportsbet/locallang_db.xml:plugin.t3sportsbet.flexform.betset.all</numIndex>
      		<numIndex index="1">0</numIndex>
      	</numIndex>
      </items>
      <itemsProcFunc>tx_t3sportsbet_util_ItemFunctions->getBetSet4BetGame</itemsProcFunc>
      <multiple>0</multiple>
      <minitems>0</minitems>
      <maxitems>99</maxitems>
      <size>5</size>
    </config>
  </TCEforms>
</scope.betset>

Die Userfunc sieht dann so aus:

/**
 * Used in flexform to lookup betset for a betgame in highscore list
 *
 * @param array $config
 */
function getBetSet4BetGame($config) {
	if(!$config['row']['pi_flexform']) return;
	$flex = t3lib_div::xml2array($config['row']['pi_flexform']);
	$betgameUid = $flex['data']['sDEF']['lDEF']['scope.betgame']['vDEF'];
	if(!$betgameUid) return;
	
	$options['where'] = 'tx_t3sportsbet_betsets.betgame = ' . $betgameUid;
	tx_div::load('tx_rnbase_util_Misc');
	tx_rnbase_util_Misc::prepareTSFE();
	$records = tx_rnbase_util_DB::doSelect('round_name, uid', 'tx_t3sportsbet_betsets', $options, 0);
	foreach($records As $record) {
		$config['items'][] = array_values($record);
	}
}

Wenn du noch Zugriff auf das Static Template benötigt, wirst du das aber selber nachladen müssen.