Zum Inhalt springen

Extension "No template found!"

Erstellt am 19. Juli 2009 · 7 Antworten · letzte Antwort am 21. Juli 2009

Tags: Frage

jenshh ·

Ich habe jetzt 2 Extensions nach Vorlage über den Kickstarter erzeugt. Das hat soweit funktioniert über die Listenansicht kann ich auch neue Daten hinzufügen. Nur wenn ich die Seite anzeigen möchte, in die ich das Template eingebunden habe, dann zeigt mir die Seite den Fehler No template found! Das finde ich eigentlich normal, weil ich ja auch kein Template für die Seite definiert habe, aber ich finde auch keinen Hinweis, wie ein entsprechendes Template aussehen sollte. Das Plugin habe ich auf einer leeren Seite in der Spalte normal angelegt. Müsste ich da jetzt nicht auch diese Spalte in einem Template expliziet auslesen und ausgeben?

Der letzte Versuch war dieses Beispiel http://www.rrzn.uni-hannover.de/fileadmin/multimedia/typo3/greifswald/material/anleitungen/ErsteExtension.pdf

Unbekannter Benutzer ·

Versuch nocheinmal, Dein Problem zu beschreiben. Ich selbst kann mich da nur schwer hineindenken, bzw. ist der Link zu einem PDF wenig aufschlussreich.
Wenn das nicht Vorhandensein eines Templates ausgewertet/angezeigt/bemängelt wird, dann weil Deine Extension dies als Bedingung vorraussetzt, kontrolliert und mit einer entsprechenden Meldung honoriert.
Du hast sicher Fragmente einer funktionierenden Extension benutzt, die Du berücksichtigen musst.

jenshh ·

naja, ich wollte das jetzt nicht so ausführlich beschreiben, weil so viel habe ich in der Extension nicht gemacht. Genau genommen habe ich lediglich mit dem Kickstarter ein Template erstellt, wie in dem PDF beschrieben. Die Extension habe ich dann gespeichert und in einer Seite eingefügt. Weiteren Code habe ich noch nicht eingefügt, weil in der Anleitung stand:

Auf einer Seite ein Content-Element einfügen, z. B. ein Text-Element. Das Pulldown-Menü für den Typ aufklappen und insert plugin auwählen. Das Pulldown-Menü im Feld Plugin aufklappen und als Plugin Mitarbeiter-Verzeichnis auswählen. Die Seite speichern und im Frontend anzeigen. Das Plugin sollte dann folgende Ausgabe liefern:

Dort müsste ich jetzt eine Mitarbeiterliste sehen, bekomme aber nur die Fehlermeldung

Ein Content Element kann ich nur in einer der 4 Spalten anlegen. Ich habe es in der Spalte normal angelegt und bekomme dann eben die Fehlermeldung. Da ich dieses Problem bereits beim 2. Beispiel habe, bin ich etwas verzweifelt. Der Code ist nur der vom Kickstarter

require_once(PATH_tslib.'class.tslib_pibase.php');

class tx_tkmitarbeiter_pi1 extends tslib_pibase {
	var $prefixId = 'tx_tkmitarbeiter_pi1';		// Same as class name
	var $scriptRelPath = 'pi1/class.tx_tkmitarbeiter_pi1.php';	// Path to this script relative to the extension dir.
	var $extKey = 'tk_mitarbeiter';	// The extension key.
	var $pi_checkCHash = TRUE;
	
	/**
	 * Main method of your PlugIn
	 *
	 * @param	string		$content: The content of the PlugIn
	 * @param	array		$conf: The PlugIn Configuration
	 * @return	The content that should be displayed on the website
	 */
	function main($content,$conf)	{
		switch((string)$conf['CMD'])	{
			case 'singleView':
				list($t) = explode(':',$this->cObj->currentRecord);
				$this->internal['currentTable']=$t;
				$this->internal['currentRow']=$this->cObj->data;
				return $this->pi_wrapInBaseClass($this->singleView($content,$conf));
			break;
			default:
				if (strstr($this->cObj->currentRecord,'tt_content'))	{
					$conf['pidList'] = $this->cObj->data['pages'];
					$conf['recursive'] = $this->cObj->data['recursive'];
				}
				return $this->pi_wrapInBaseClass($this->listView($content,$conf));
			break;
		}
	}
	
	/**
	 * Shows a list of database entries
	 *
	 * @param	string		$content: content of the PlugIn
	 * @param	array		$conf: PlugIn Configuration
	 * @return	HTML list of table entries
	 */
	function listView($content,$conf)	{
		$this->conf=$conf;		// Setting the TypoScript passed to this function in $this->conf
		$this->pi_setPiVarDefaults();
		$this->pi_loadLL();		// Loading the LOCAL_LANG values
		
		$lConf = $this->conf['listView.'];	// Local settings for the listView function
	
		if ($this->piVars['showUid'])	{	// If a single element should be displayed:
			$this->internal['currentTable'] = 'tx_tkmitarbeiter_personen';
			$this->internal['currentRow'] = $this->pi_getRecord('tx_tkmitarbeiter_personen',$this->piVars['showUid']);
	
			$content = $this->singleView($content,$conf);
			return $content;
		} else {
			$items=array(
				'1'=> $this->pi_getLL('list_mode_1','Mode 1'),
				'2'=> $this->pi_getLL('list_mode_2','Mode 2'),
				'3'=> $this->pi_getLL('list_mode_3','Mode 3'),
			);
			if (!isset($this->piVars['pointer']))	$this->piVars['pointer']=0;
			if (!isset($this->piVars['mode']))	$this->piVars['mode']=1;
	
				// Initializing the query parameters:
			list($this->internal['orderBy'],$this->internal['descFlag']) = explode(':',$this->piVars['sort']);
			$this->internal['results_at_a_time']=t3lib_div::intInRange($lConf['results_at_a_time'],0,1000,3);		// Number of results to show in a listing.
			$this->internal['maxPages']=t3lib_div::intInRange($lConf['maxPages'],0,1000,2);;		// The maximum number of "pages" in the browse-box: "Page 1", "Page 2", etc.
			$this->internal['searchFieldList']='name,vorname';
			$this->internal['orderByList']='uid,name,vorname';
	
				// Get number of records:
			$res = $this->pi_exec_query('tx_tkmitarbeiter_personen',1);
			list($this->internal['res_count']) = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);
	
				// Make listing query, pass query to SQL database:
			$res = $this->pi_exec_query('tx_tkmitarbeiter_personen');
			$this->internal['currentTable'] = 'tx_tkmitarbeiter_personen';
	
				// Put the whole list together:
			$fullTable='';	// Clear var;
		#	$fullTable.=t3lib_div::view_array($this->piVars);	// DEBUG: Output the content of $this->piVars for debug purposes. REMEMBER to comment out the IP-lock in the debug() function in t3lib/config_default.php if nothing happens when you un-comment this line!
	
				// Adds the mode selector.
			$fullTable.=$this->pi_list_modeSelector($items);
	
				// Adds the whole list table
			$fullTable.=$this->pi_list_makelist($res);
	
				// Adds the search box:
			$fullTable.=$this->pi_list_searchBox();
	
				// Adds the result browser:
			$fullTable.=$this->pi_list_browseresults();
	
				// Returns the content from the plugin.
			return $fullTable;
		}
	}
	/**
	 * Display a single item from the database
	 *
	 * @param	string		$content: The PlugIn content
	 * @param	array		$conf: The PlugIn configuration
	 * @return	HTML of a single database entry
	 */
	function singleView($content,$conf)	{
		$this->conf=$conf;
		$this->pi_setPiVarDefaults();
		$this->pi_loadLL();
		
	
			// This sets the title of the page for use in indexed search results:
		if ($this->internal['currentRow']['title'])	$GLOBALS['TSFE']->indexedDocTitle=$this->internal['currentRow']['title'];
	
		$content='<div'.$this->pi_classParam('singleView').'>
			<H2>Record "'.$this->internal['currentRow']['uid'].'" from table "'.$this->internal['currentTable'].'":</H2>
			<table>
				<tr>
					<td nowrap="nowrap" valign="top"'.$this->pi_classParam('singleView-HCell').'><p>'.$this->getFieldHeader('name').'</p></td>
					<td valign="top"><p>'.$this->getFieldContent('name').'</p></td>
				</tr>
				<tr>
					<td nowrap="nowrap" valign="top"'.$this->pi_classParam('singleView-HCell').'><p>'.$this->getFieldHeader('vorname').'</p></td>
					<td valign="top"><p>'.$this->getFieldContent('vorname').'</p></td>
				</tr>
				<tr>
					<td nowrap'.$this->pi_classParam('singleView-HCell').'><p>Last updated:</p></td>
					<td valign="top"><p>'.date('d-m-Y H:i',$this->internal['currentRow']['tstamp']).'</p></td>
				</tr>
				<tr>
					<td nowrap'.$this->pi_classParam('singleView-HCell').'><p>Created:</p></td>
					<td valign="top"><p>'.date('d-m-Y H:i',$this->internal['currentRow']['crdate']).'</p></td>
				</tr>
			</table>
		<p>'.$this->pi_list_linkSingle($this->pi_getLL('back','Back'),0).'</p></div>'.
		$this->pi_getEditPanel();
	
		return $content;
	}
	/**
	 * Returns a single table row for list view
	 *
	 * @param	integer		$c: Counter for odd / even behavior
	 * @return	A HTML table row
	 */
	function pi_list_row($c)	{
		$editPanel = $this->pi_getEditPanel();
		if ($editPanel)	$editPanel='<TD>'.$editPanel.'</TD>';
	
		return '<tr'.($c%2 ? $this->pi_classParam('listrow-odd') : '').'>
				<td><p>'.$this->getFieldContent('uid').'</p></td>
				<td valign="top"><p>'.$this->getFieldContent('name').'</p></td>
				<td valign="top"><p>'.$this->getFieldContent('vorname').'</p></td>
			</tr>';
	}
	/**
	 * Returns a table row with column names of the table
	 *
	 * @return	A HTML table row
	 */
	function pi_list_header()	{
		return '<tr'.$this->pi_classParam('listrow-header').'>
				<td><p>'.$this->getFieldHeader_sortLink('uid').'</p></td>
				<td><p>'.$this->getFieldHeader_sortLink('name').'</p></td>
				<td><p>'.$this->getFieldHeader_sortLink('vorname').'</p></td>
			</tr>';
	}
	/**
	 * Returns the content of a given field
	 *
	 * @param	string		$fN: name of table field
	 * @return	Value of the field
	 */
	function getFieldContent($fN)	{
		switch($fN) {
			case 'uid':
				return $this->pi_list_linkSingle($this->internal['currentRow'][$fN],$this->internal['currentRow']['uid'],1);	// The "1" means that the display of single items is CACHED! Set to zero to disable caching.
			break;
			
			default:
				return $this->internal['currentRow'][$fN];
			break;
		}
	}
	/**
	 * Returns the label for a fieldname from local language array
	 *
	 * @param	[type]		$fN: ...
	 * @return	[type]		...
	 */
	function getFieldHeader($fN)	{
		switch($fN) {
			
			default:
				return $this->pi_getLL('listFieldHeader_'.$fN,'['.$fN.']');
			break;
		}
	}
	
	/**
	 * Returns a sorting link for a column header
	 *
	 * @param	string		$fN: Fieldname
	 * @return	The fieldlabel wrapped in link that contains sorting vars
	 */
	function getFieldHeader_sortLink($fN)	{
		return $this->pi_linkTP_keepPIvars($this->getFieldHeader($fN),array('sort'=>$fN.':'.($this->internal['descFlag']?0:1)));
	}
}



if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/tk_mitarbeiter/pi1/class.tx_tkmitarbeiter_pi1.php'])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/tk_mitarbeiter/pi1/class.tx_tkmitarbeiter_pi1.php']);
}
Unbekannter Benutzer ·

Ich finde auch keinen Hinweis, dass Deine Extension Templates benutzt.
Bist Du sicher, das der Fehler nur aus dem Plugin stammt? Kannst Du das Plugin zum Download irgendwo ablegen, damit es mal jemand checken kann?

jenshh ·

Ich weiß jetzt nicht ob ich nur zu blöd war oder eine andere Lösung gefunden habe. Ich habe zu der Seite, die das Plug-In enthält auch ein neues Template mit folgendem Inhalt erstellt:

page = PAGE
page.10 = CONTENT
page.10 < plugin.tx_tkmitarbeiter_pi1

Jetzt bekomme ich die Ansicht, die ich bislang vermisst habe. Ich finde allerdings in keiner der Beispiel Beschreibungen einen Hinweis darauf, dass ich das Template erweitern muss. So bin ich davon ausgegangen, das weiterer TS Code nicht notwendig ist. Was ist denn nun richtig?

Michaelh74 ·

Normalerweise ist das nicht nötig. Du kannst auch einfach Dein Plugin als Content-Element einbinden ohne eigenes TS Template. Steht vielleicht im setup.ts Deiner Extension ein Hinweis auf ein HTML-Template?

Gruß
Michael