---
title: "CONTENT: Datenbankabfrage nur, wenn Feld gesetzt"
url: "https://www.typo3.net/d/110170-content-datenbankabfrage-nur-wenn-feld-gesetzt"
source: "typo3.net"
tags: ["TYPO3","TypoScript","Datenbank","Frage"]
created: "2012-04-12"
last_reply: "2012-04-13"
replies: 4
solved: false
page: 1
pages: 1
lang: "de"
---

# CONTENT: Datenbankabfrage nur, wenn Feld gesetzt

TYPO3 › TypoScript · 4 Antworten · gestartet 2012-04-12

## Eröffnungsbeitrag

**Tosta** · 2012-04-12 · [Beitrag #1](https://www.typo3.net/d/110170-content-datenbankabfrage-nur-wenn-feld-gesetzt/1)

Hallo zusammen.

Ist es möglich, die **Ausführung** einer Datenbankabfrage zu verhindern, wenn eine bestimmte Bedingung gegeben ist?

Ich habe die Tabelle *pages* um ein Feld (*tx_xyz_ansprechpartner*) erweitert, das die UID eines *tt_address*-Satzes enthalten kann. Damit kann ich einer Seite einen Ansprechpartner zuordnen. Bei der Ausgabe der Seite soll die Ansprechpartneradresse ermittelt und ausgegeben werden – aber nur, wenn das Feld gesetzt ist.

**Die Datenbankabfrage darf nur ausgeführt werden, wenn das Ansprechpartner-Feld gesetzt ist.**

Es gelingt mir nicht, das richtig zu konfigurieren. Die Ausgabe wird zwar unterlassen, wenn das Feld nicht gesetzt ist, aber die DB-Abfrage wird durchgeführt, allerdings mit ungültigem SQL.

Hier ist mein TypoScript:

```typoscript
ansprechpartner = CONTENT
ansprechpartner {
  # Dieses if wirkt auf die Ausgabe, aber nicht auf die SQL-Ausführung:
  stdWrap.if.isTrue.data = page:tx_xyz_ansprechpartner
  wrap = <div id="ansprechpartner"> | </div>
  table = tt_address
  select {
    # Alle Adressen sind in Ordner 285 oder in dessen Unterordnern:
    pidInList = 285
    # Auch Unterordner durchsuchen:
    recursive = 99
    # Wenn tx_xyz_ansprechpartner nicht gesetzt ist, gibt es
    #   WHERE uid in ()
    # und damit einen Fehler:
    andWhere {
      data = page:tx_xyz_ansprechpartner
      wrap = uid in (|)
    }
  }
  renderObj = COA
  renderObj {
    # Ausgabe des Adressdatensatzes…
  }
}
```

*ansprechpartner.stdWrap.if…* wird zu spät ausgeführt und wirkt darum nur auf die Ausgabe. Welche anderen Möglichkeiten gibt es? Ist *CONTENT* überhaupt das Richtige? *RECORDS* scheint mir allerdings nicht geeignet.

Danke für eure Hilfe!

Tosta

## Antworten

### [#2](https://www.typo3.net/d/110170-content-datenbankabfrage-nur-wenn-feld-gesetzt/2) · Julian.​Hofmann · 2012-04-12

Hallo.

Ansich ist der Ansatz richtig, jedoch schlägt Dir die Abarbeitungsreihenfolge ins Gesicht.

Wenn Du in die zuständige Klasse schaust (/typo3/sysext/cms/tslib/content/class.tslib_content_content.php) siehst Du, dass stdWrap ganz am Ende ausgeführt wird, nachdem bereits alles andere abgearbeitet wurde (d.h. nach der SQL-Abfrage).

Um das if/stdWrap vor der Abfrage ausgewertet zu bekommen, müsstest Du das ganze nochmal schachteln - z.B. in ein COA. Dann im COA die Bedingung Plazierung und in das COA Dein CONTENT-Objekt setzen.

Viele Grüße
Julian

### [#3](https://www.typo3.net/d/110170-content-datenbankabfrage-nur-wenn-feld-gesetzt/3) · Tosta · 2012-04-12

Dass das *stdWrap* nach der DB-Abfrage ausgeführt wird, hatte ich ja erkannt. Auf die Idee der COA-Schachtelung bin ich darum auch gekommen. Leider macht das nichts besser: Das SELECT wird ausgeführt, auch wenn das Feld leer ist.

### [#4](https://www.typo3.net/d/110170-content-datenbankabfrage-nur-wenn-feld-gesetzt/4) · Julian.​Hofmann · 2012-04-12

Ups, zu gut gedacht, aber nicht nochmal selbst vergewissert. :o

*COA* hat einerseits die Eigenschaft *stdWrap* (und darin ein *if*) - das wird aber (konsequent) am Ende der Objekt-Renderings ausgeführt wir bei *CONTENT*.
Es hat aber auch direkt die *if*-Eigenschaft. 'if "if" returns false the COA is NOT rendered'.

```php
$content = '';
if ($this->cObj->checkIf($conf['if.'])) {
	$this->cObj->includeLibs($conf);
	$content = $this->cObj->cObjGet($conf);
	$wrap = isset($conf['wrap.']) ? $this->cObj->stdWrap($conf['wrap'], $conf['wrap.']) : $conf['wrap'];
	if ($wrap) {
		$content = $this->cObj->wrap($content, $wrap);
	}
	if (isset($conf['stdWrap.'])) {
		$content = $this->cObj->stdWrap($content, $conf['stdWrap.']);
	}
}
return $content;
```

Daher sollte es klappen mit

```typoscript
ansprechpartner = COA
ansprechpartner.if.isTrue.data = page:tx_xyz_ansprechpartner
ansprechpartner.10 = CONTENT
//...
```

### [#5](https://www.typo3.net/d/110170-content-datenbankabfrage-nur-wenn-feld-gesetzt/5) · Tosta · 2012-04-13

Wow – es funktioniert! Danke Julian!

---

Quelle: „CONTENT: Datenbankabfrage nur, wenn Feld gesetzt“, typo3.net, https://www.typo3.net/d/110170-content-datenbankabfrage-nur-wenn-feld-gesetzt
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
