Zum Inhalt springen

DB Eintrag im Frontend mit neuem Feld ergänzen

Erstellt am 15. August 2007 · 4 Antworten · letzte Antwort am 20. August 2007

Tags: Frage

RT-Schwabe ·

Hallo zusammen,

folgender Code gibt mir den Inhalt einer Tabelle aus:

<?php


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

class tx_admreport_pi1 extends tslib_pibase {
	var $prefixId = 'tx_admreport_pi1';		// Same as class name
	var $scriptRelPath = 'pi1/class.tx_admreport_pi1.php';	// Path to this script relative to the extension dir.
	var $extKey = 'adm_report';	// The extension key.
	var $pi_checkCHash = TRUE;

	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_admreport_adm';
			$this->internal['currentRow'] = $this->pi_getRecord('tx_admreport_adm',$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;
			if (!isset($this->piVars["sort"]))$this->piVars["sort"]="datum: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,25);		// Number of results to show in a listing.
			$this->internal['maxPages']=t3lib_div::intInRange($lConf['maxPages'],0,1000,100);;		// The maximum number of "pages" in the browse-box: "Page 1", "Page 2", etc.
			$this->internal['searchFieldList']='bericht,kundennummer,kundenname,plz,ort,adm,datum,ansprechpartner';
			$this->internal['orderBy']='datum';
			$this->internal['orderByList']='datum';
	
				// Get number of records:
			$res = $this->pi_exec_query('tx_admreport_adm',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_admreport_adm');
			$this->internal['currentTable'] = 'tx_admreport_adm';
	
				// 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').'>
			<h5>Eintrag "'.$this->internal['currentRow']['uid'].'" der Besuchsberichte</h2>
				<p'.$this->pi_classParam("singleViewField-datum").'><strong>'.$this->getFieldHeader('datum').':</strong> '.$this->getFieldContent('datum').'</p>
				<p'.$this->pi_classParam("singleViewField-adm").'><strong>'.$this->getFieldHeader('adm').':</strong> '.$this->getFieldContent('adm').'</p>
				<p'.$this->pi_classParam("singleViewField-kundennummer").'><strong>'.$this->getFieldHeader('kundennummer').':</strong> '.$this->getFieldContent('kundennummer').'</p>
				<p'.$this->pi_classParam("singleViewField-kundenname").'><strong>'.$this->getFieldHeader('kundenname').':</strong> '.$this->getFieldContent('kundenname').'</p>
				<p'.$this->pi_classParam("singleViewField-ansprechpartner").'><strong>'.$this->getFieldHeader('ansprechpartner').':</strong> '.$this->getFieldContent('ansprechpartner').'</p>
				<p'.$this->pi_classParam("singleViewField-plz").'><strong>'.$this->getFieldHeader('plz').':</strong> '.$this->getFieldContent('plz').'</p>
				<p'.$this->pi_classParam("singleViewField-ort").'><strong>'.$this->getFieldHeader('ort').':</strong> '.$this->getFieldContent('ort').'</p>
				<p'.$this->pi_classParam("singleViewField-branche").'><strong>'.$this->getFieldHeader('branche').':</strong> '.$this->getFieldContent('branche').'</p>
				
				<p'.$this->pi_classParam("singleViewField-verband").'><strong>'.$this->getFieldHeader('verband').':</strong> '.$this->getFieldContent('verband').'</p>
				<p'.$this->pi_classParam("singleViewField-kundenschluessel").'><strong>'.$this->getFieldHeader('kundenschluessel').':</strong> '.$this->getFieldContent('kundenschluessel').'</p>
				<p'.$this->pi_classParam("singleViewField-warenpraesenz_endress").'><strong>'.$this->getFieldHeader('warenpraesenz_endress').':</strong> '.$this->getFieldContent('warenpraesenz_endress').'</p>
				<p'.$this->pi_classParam("singleViewField-wettbewerber_1").'><strong>'.$this->getFieldHeader('wettbewerber_1').':</strong> '.$this->getFieldContent('wettbewerber_1').'</p>
				<p'.$this->pi_classParam("singleViewField-wettbewerber_2").'><strong>'.$this->getFieldHeader('wettbewerber_2').':</strong> '.$this->getFieldContent('wettbewerber_2').'</p>
				<p'.$this->pi_classParam("singleViewField-wettbewerber_3").'><strong>'.$this->getFieldHeader('wettbewerber_3').':</strong> '.$this->getFieldContent('wettbewerber_3').'</p>
				<p'.$this->pi_classParam("singleViewField-bericht").'><strong>'.$this->getFieldHeader('bericht').':</strong> '.$this->getFieldContent('bericht').'</p>

				<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('datum').'</p></td>
				<td valign="top"><p>'.$this->getFieldContent('adm').'</p></td>
				
				<td valign="top"><p>'.$this->getFieldContent('kundenname').'</p></td>
				<td valign="top"><p>'.$this->getFieldContent('plz').'</p></td>
				<td valign="top"><p>'.$this->getFieldContent('ort').'</p></td>
				<td valign="top"><p>'.$this->getFieldContent('branche').'</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 nowrap=""><p>'.$this->getFieldHeader_sortLink('datum').'</p></td>
				<td nowrap=""><p>'.$this->getFieldHeader_sortLink('adm').'</p></td>
				
				<td nowrap=""><p>'.$this->getFieldHeader_sortLink('kundenname').'</p></td>
				<td border="1"><p>'.$this->getFieldHeader_sortLink('plz').'</p></td>
				<td><p>'.$this->getFieldHeader_sortLink('ort').'</p></td>
				<td><p>'.$this->getFieldHeader_sortLink('branche').'</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'],0);	// The "1" means that the display of single items is CACHED! Set to zero to disable caching.
			break;

			case "datum":
					// For a numbers-only date, use something like: %d-%m-%y
				//return date("y-m-d",$this->internal['currentRow']['datum']);
				//return strftime('%a %e. %b %Y',$this->internal['currentRow']['datum']);
				return $this->internal['currentRow']['datum'];
			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/adm_report/pi1/class.tx_admreport_pi1.php'])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/adm_report/pi1/class.tx_admreport_pi1.php']);
}

?>

Das ganze ist eine Berichtstabelle, in der Berichte eingetragen werden damit sie abgearbeitet werden können.

Jetzt sollte in der Ansicht irgendwo ein Feld plaziert werden, wo man den Status ändern kann (Erledigt / noch offen), damit man weiss ob der Bericht bearbeitet wurde.

An welche Stelle muss ich das einfügen und wie? Ich habe dabei an ein <select> mit option etc gedacht, kann aber auch ein Häkchen setzen. Das ist egal.

Das muss im Bereich

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').'>
			<h5>Eintrag "'.$this->internal['currentRow']['uid'].'" der Besuchsberichte</h2>
				<p'.$this->pi_classParam("singleViewField-datum").'><strong>'.$this->getFieldHeader('datum').':</strong> '.$this->getFieldContent('datum').'</p>
				<p'.$this->pi_classParam("singleViewField-adm").'><strong>'.$this->getFieldHeader('adm').':</strong> '.$this->getFieldContent('adm').'</p>
				<p'.$this->pi_classParam("singleViewField-kundennummer").'><strong>'.$this->getFieldHeader('kundennummer').':</strong> '.$this->getFieldContent('kundennummer').'</p>
				<p'.$this->pi_classParam("singleViewField-kundenname").'><strong>'.$this->getFieldHeader('kundenname').':</strong> '.$this->getFieldContent('kundenname').'</p>
				<p'.$this->pi_classParam("singleViewField-ansprechpartner").'><strong>'.$this->getFieldHeader('ansprechpartner').':</strong> '.$this->getFieldContent('ansprechpartner').'</p>
				<p'.$this->pi_classParam("singleViewField-plz").'><strong>'.$this->getFieldHeader('plz').':</strong> '.$this->getFieldContent('plz').'</p>
				<p'.$this->pi_classParam("singleViewField-ort").'><strong>'.$this->getFieldHeader('ort').':</strong> '.$this->getFieldContent('ort').'</p>
				<p'.$this->pi_classParam("singleViewField-branche").'><strong>'.$this->getFieldHeader('branche').':</strong> '.$this->getFieldContent('branche').'</p>
				
				<p'.$this->pi_classParam("singleViewField-verband").'><strong>'.$this->getFieldHeader('verband').':</strong> '.$this->getFieldContent('verband').'</p>
				<p'.$this->pi_classParam("singleViewField-kundenschluessel").'><strong>'.$this->getFieldHeader('kundenschluessel').':</strong> '.$this->getFieldContent('kundenschluessel').'</p>
				<p'.$this->pi_classParam("singleViewField-warenpraesenz_endress").'><strong>'.$this->getFieldHeader('warenpraesenz_endress').':</strong> '.$this->getFieldContent('warenpraesenz_endress').'</p>
				<p'.$this->pi_classParam("singleViewField-wettbewerber_1").'><strong>'.$this->getFieldHeader('wettbewerber_1').':</strong> '.$this->getFieldContent('wettbewerber_1').'</p>
				<p'.$this->pi_classParam("singleViewField-wettbewerber_2").'><strong>'.$this->getFieldHeader('wettbewerber_2').':</strong> '.$this->getFieldContent('wettbewerber_2').'</p>
				<p'.$this->pi_classParam("singleViewField-wettbewerber_3").'><strong>'.$this->getFieldHeader('wettbewerber_3').':</strong> '.$this->getFieldContent('wettbewerber_3').'</p>
				<p'.$this->pi_classParam("singleViewField-bericht").'><strong>'.$this->getFieldHeader('bericht').':</strong> '.$this->getFieldContent('bericht').'</p>

				<p>'.$this->pi_list_linkSingle($this->pi_getLL('back','Back'),0).'</p></div>'.
		$this->pi_getEditPanel();
	
		return $content;
	}

passieren, da hier der Bericht gelesen wird. in der Übersicht benötige ich dann ein Feld mit Status, das in der Listenansicht dann offen / erledigt zeigt (aber das sollte kein Problem sein, mir gehts jetzt um das Feld zum ändern und eintragen).

Wer weiss weiter?

Gruß
Thorsten

brokemeister ·

Schau mir nicht deinen langen Quelltext an. Da hab ich auch besseres zu tun. 8-)
Existiert das Feld schon oder muss es noch angelegt werden?

Am einfachsten kannst du eine Tabelle etc. mit dem "Kickstarter" erweitern...

RT-Schwabe ·

Nein, das Feld exisitiert nur in der Tabelle. Ich will nun das Feld in meinen COde einbauen, damit ich das auf der Ausgabeseite bearbeiten kann.
Ein neues Feld in der Tabelle anlegen mach ich über phpmyadmin

Gruß
Thorsten

RT-Schwabe ·

Ok,

nochmals im Klartext.

Ich habe eine Tabelle mit Daten. Diese Daten lasse ich mir über die folgenden Zeilen anzeigen:

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').'>

<H5>Eintrag "'.$this->internal['currentRow']['uid'].'" der Besuchsberichte</H2>

<p'.$this->pi_classParam("singleViewField-datum").'><strong>'.$this->getFieldHeader('status').':</strong> '.$this->getFieldContent('status').'</p>

<p'.$this->pi_classParam("singleViewField-datum").'><strong>'.$this->getFieldHeader('datum').':</strong> '.$this->getFieldContent('datum').'</p>

<p'.$this->pi_classParam("singleViewField-kundenname").'><strong>'.$this->getFieldHeader('kundenname').':</strong> '.$this->getFieldContent('kundenname').'</p>



<p>'.$this->pi_list_linkSingle($this->pi_getLL('back','Back'),0).'</p></div>'.
		$this->pi_getEditPanel();
	
		return $content;
	}

Dann bekomm ich eine schöne Ausgabe im Frontend mit meinen eingetragenen Daten.

Jetzt möchte ich, dass in dieser Ausgabe ein Select-Feld erscheint, in dem der Status ausgewählt werden kann (erledigt/offen). Neben dem Select-Feld muss dann ein Button sein um das Feld in genau diesem Datensatz zu speichern (es muss also in die gleiche Zeile in der tabelle geschrieben werden, das Feld in der tabelle ist bereits vorhanden und wartet auf die Eingabe...)
Sollte das Feld nicht leer sein (also Status "offen) muss die Eingabe das Feld überschreiben auf Status "erledigt".

Mir fehlt jetzt der richtige Ansatz, wie ich den "Eintrags-Code" in diese Ausgabe einbauen kann.

Wer weiss rat?

Gruß
Thorsten