Hallo,
seit einigen Tagen befasse ich mich mit der Erstellung eigener Extensions. Ich habe nun eine Extension erstellt welche eine List + Single Ansicht hat. Irgendwie klappt der Übergang zwischen den beiden Ansichten allerdings nicht reibungslos.
Wenn ich in der Listen-Ansicht einen Datensatz auswähl, lädt der Browser und es wird auch eine neue Adresse in der Adresszeile angezeigt, aber die Seite bleibt unverändert. Wenn ich jetzt allerdings einfach nur Strg + F5 drücke wird korrekt die Single Ansicht geladen, ohne das ich auf einen Link klicken musste.
Mein erster Gedanke war, dass es irgendwie mit dem Caching zusammenhängt, daher hab ich eine TS-Template auf der Seite mit meiner Ext Erstellt, mit dem Inhalt:
config.no_cache = 1
page.config.no_cache = 1
Das Problem bleibt allerdings unverändert.
evtl hab ich ja auch mit meinen weniger als rudimentären php kentnissen direkt in der php datei einen fehler eingebaut? Evtl. kann ja jemand der ein wenig bewanderter ist einmal den Code überfliegen?
<?php
require_once(PATH_tslib.'class.tslib_pibase.php');
class tx_tobyte_pi1 extends tslib_pibase {
var $prefixId = 'tx_to_byte_pi1'; // Same as class name
var $scriptRelPath = 'pi1/class.tx_tobyte_pi1.php'; // Path to this script relative to the extension dir.
var $extKey = 'to_byte'; // The extension key.
var $pi_checkCHash = true;
var $template;
var $id;
/**
* The main method of the PlugIn
*
* @param string $content: The PlugIn content
* @param array $conf: The PlugIn configuration
* @return The content that is displayed on the website
*/
function main($content,$conf) {
$this->conf=$conf;
$this->pi_setPiVarDefaults();
$this->pi_loadLL();
#ein paar Vorbelegungen
$this->id=$GLOBALS['TSFE']->id;
$this->template=$this->cObj->fileResource('EXT:to_byte/template.html');
#welche Ansicht?
if($this->piVars['item']) {
$content = $this->detailView();
} else {
$content = $this->listView();
}
return $this->pi_wrapInBaseClass($content);
}
function listView() {
$pidlist =$this->cObj->data[pages];
$subpart=$this->cObj->getSubpart($this->template,'###LISTVIEW###');
$singlerow=$this->cObj->getSubpart($subpart,'###ROW###');
#Datensätze holen
$res=$GLOBALS['TYPO3_DB']->exec_SELECTquery(
'*', #select
'tx_tobyte_kurse', #from
'hidden=0 and deleted=0 and pid='.$pidlist, #where
$groupBy='',
$orderBy='',
$limit='');
################
if($res) {
$liste='';
while($row=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
$markerArray['###LINK###']=$this->pi_linkTP($row['titel'],array($this->prefixId.'[item]'=> $row['uid']));
$liste .= $this->cObj->substituteMarkerArrayCached($singlerow,$markerArray);
}
$subpartArray['###ROW###']=$liste;
} else {
return $this->pi_getLL('nodata');
}
return $this->cObj->substituteMarkerArrayCached($subpart,$markerArray,$subpartArray,array());
}
function detailView() {
#Datensatz holen
$record=$this->pi_getRecord('tx_tobyte_kurse',$this->piVars['item']);
#Template-Auswahl
if($record['onlineanmeldung'] == "1") {
$subpart=$this->cObj->getSubpart($this->template,'###DETAILVIEWLINK###');
} elseif ($record['onlineanmeldung'] == "0") {
$subpart=$this->cObj->getSubpart($this->template,'###DETAILVIEWNOLINK###');
}
#Marker füllen
$markerArray['###TITEL###']=$record['titel'];
$markerArray['###KURSNUMMER###']=$record['kursnummer'];
$markerArray['###KATEGORIE###']=$record['kategorie'];
$markerArray['###DOZENT###']=$record['dozent'];
$markerArray['###TERMIN###']=$record['termin'];
$markerArray['###ORT###']=$record['ort'];
$markerArray['###PREIS###']=$record['preis'];
$markerArray['###BESCHREIBUNG###']=$record['beschreibung'];
$markerArray['###BILDUNGSURLAUB###']=$record['bildungsurlaub'];
$markerArray['###ONLINEANMELDUNG###']=$record['onlineanmeldung'];
/**/
#backlink als einfachen Link ohne Parameter
$markerArray['###BACKLINK###']=$this->pi_linkToPage($this->pi_getLL('back'),$this->id);
return $this->cObj->substituteMarkerArrayCached($subpart,$markerArray,array(),array());
}
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/to_byte/pi1/class.tx_tobyte_pi1.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/to_byte/pi1/class.tx_tobyte_pi1.php']);
}
?>
Also was mir aufgefallen ist:
$markerArray['###LINK###']=$this->pi_linkTP($row['titel'],array($this->prefixId.'[item]'=> $row['uid']));
$markerArray['###BACKLINK###']=$this->pi_linkToPage($this->pi_getLL('back'),$this->id);
Der Aufbau von pi_linkTP ist wie folgt Dokumentiert:
tslib_pibase.pi_linkTP ($ str,
$urlParameters = array(),
$cache = 0,
$altPageId = 0
)
hier linkToPage
tslib_pibase.pi_linkToPage ($str,
$id,
$target = '',
$urlParameters = array()
)
Ich würde also den Backlink ebenfalls mit pi_linkTP benutzen, allerdings würde ich in beiden Varianten den cache flag setzen.
bei dem hier würde ich vielleicht noch auf ein integer überprüfen lassen:
if($this->piVars['item']) {
$content = $this->detailView();
} else {
$content = $this->listView();
}