Zum Inhalt springen

Kleine Extension - Liste Ausgeben mit zwei Rows

Erstellt am 8. Juli 2011 · 4 Antworten · letzte Antwort am 12. Juli 2011

Tags: PHP, Frage

lil-trick ·

Ich hab eine kleine Extension geschrieben mit der ich ein Template mit Items füllen möchte.

Hier ist mein Template

<!-- ###LISTVIEW### -->

<ul class="lof-main-wapper">
    <!-- ###ROWEINS### -->
    <li class="hoverboxes-liste-entry">###TITLE###</li>
    <!-- ###ROWEINS### -->
</ul>
<ul class="lof-navigator">
    <!-- ###ROWZWEI### -->
    <li>###IMAGEKLEIN###</li>     		
    <!-- ###ROWZWEI### -->
</ul>
<!-- ###LISTVIEW### -->

ich hab in meiner Listenansicht also zwei ul´s die ich befüllen möchte - mit einem funktioniert das ja ohne Probleme - jedoch mit zwei Rows hab ich so meine Probleme. Hier ist meine PHP Datei:

$subpart=$this->cObj->getSubpart($this->template,'###LISTVIEW###'); 
        	

$singlerow=$this->cObj->getSubpart($subpart,'###ROW###');
$singlerowzwei=$this->cObj->getSubpart($subpart,'###ROWZWEI###');

$res=$GLOBALS['TYPO3_DB']->exec_SELECTquery(
'*',
'tx_opusheader_gallery',
'hidden=0 and deleted=0 and pid='.$this->id,  #where
$groupBy='uid',
$orderBy= 'sorting',
$limit='');
        	
while($row=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
        	
$markerArray['###TITLE###']= $row['titel'];
$markerArrayzwei['###IMAGEKLEIN###']= $row['image'];
        			
$liste .= $this->cObj->substituteMarkerArrayCached($singlerow,$markerArray);
$listezwei .= $this->cObj->substituteMarkerArrayCached($singlerowzwei,$markerArray);
        			
}

$subpartArray['###ROW###']=$liste;       	
$subpartArrayzwei['###ROWZWEI###']=$listezwei;
        	
return $this->cObj->substituteMarkerArrayCached($subpart,$markerArray,$subpartArray,$subpartArrayzwei,array());

gibt mir auch alles aus nur die Eintrage bei ROWZEI kommen dann immer doppelt und ein paar davon sogar drei mal vor 🙁

vielleicht kann mir einer helfen, Danke

vince ·

Hallo,

In der Zeile $listezwei .= $this->cObj-> usw. :
ersetz da mal "$markerArray" durch "$markerArrayzwei".

Außerdem: $subpartArrayzwei brauchst Du nicht unbedingt, das eine subpartArray reicht.

Gruß,
Vince.

Julian.​Hofmann ·

Hallo.

Wenn ich das richtig verstehe, dann sollen zwei unabhängige Listen generiert werden, die aber auf den gleichen Datensätzen basieren. Im einfachsten Fall könntest Du die Marker daher in einem gemei nsamen Array führen und lediglich das Vorkommen in den Subpart-Templates entscheidet, welche Inhalte des Datensatzes sichtbar werden (weil Marker enthalten ist - oder eben nicht).

Den letzten Methoden-Aufruf kann ich nicht ganz nachvollziehen. Deine Subparts dürften ins gleiche SubpartArray gehören. $subpartArrayzwei als dritten Parameter an substituteMarkerArrayCached() zu übergeben, wirkt mir inkorrekt, wenngleich sich mit die Wirkung dieses Parameters (wrappedSubpartContentArray) nicht verständlich ist.

$subpart = $this->cObj->getSubpart($this->template, '###LISTVIEW###');

$singlerow = $this->cObj->getSubpart($subpart, '###ROW###');
$singlerowzwei = $this->cObj->getSubpart($subpart, '###ROWZWEI###');

$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
	'*',
	'tx_opusheader_gallery',
	'hidden=0 and deleted=0 and pid=' . $this->id, #where
	'uid',
	'sorting',
	'');

$liste = '';
$listezwei = '';
if ($res) {
	while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {

			// Alle Eigenschaften in EINEM Array sammeln...
		$markerArray['###TITLE###'] = $row['titel'];
		$markerArray['###IMAGEKLEIN###'] = $row['image'];

			// ...und auf unterschiedliche (Sub-)Templates anwenden
		$liste .= $this->cObj->substituteMarkerArrayCached($singlerow, $markerArray);
		$listezwei .= $this->cObj->substituteMarkerArrayCached($singlerowzwei, $markerArray);
	
	}
}
$subpartArray['###ROW###'] = $liste;
$subpartArray['###ROWZWEI###'] = $listezwei;

return $this->cObj->substituteMarkerArrayCached($subpart, $markerArray);

Viele Grüße
Julian