Zum Inhalt springen

Eigene EXT mit Kickstarter um Storage PID erweitern???

Erstellt am 4. November 2008 · 5 Antworten · letzte Antwort am 9. November 2008

Tags: Frage

liquidblue ·

Hallo Typo3 Freunde,

ich habe mir eine kleine EXT mit dem Kickstarter gebaut und möchte diese nun auch noch um die Storage PID erweitern, damit meine Datensätze nicht auf der Seite gespeichert werden wo das FE-Plugin angelegt ist sondern in einem Storagefolder hinterlegt werden.

Soweit so gut aber ich scheitere als Anfänger offensichtlich entweder an der DB-Query oder mein Wissen ist doch noch sehr begrenzt.

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
			
			// PID auslesen:  if datapid is not set via typoscript -> get data records from Storage
			if ( !isset($this->conf["dataPID"]) ) 
			{
			$this->conf["dataPID"] = $GLOBALS['TSFE']->getStorageSiterootPids();
			}
			$this->templateFileContent = $this->cObj->cObjGetSingle($lConf['altTemplateFile'], $lConf['altTemplateFile.']);

			 
			if ($this->piVars['showUid']) {
				// If a single element should be displayed:
				$this->internal['currentTable'] = 'tx_hsgbase_basisdaten';
				$this->internal['currentRow'] = $this->pi_getRecord('tx_hsgbase_basisdaten', $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'] = 'sorting';
				 
				// Initializing the query parameters:
				list($this->internal['orderBy'], $this->internal['ascFlag']) = explode(':', $this->piVars['sort']);
				$this->internal['results_at_a_time'] = t3lib_div::intInRange($lConf['results_at_a_time'], 0, 1000, 2);
				// Number of results to show in a listing.
				$this->internal['maxPages'] = t3lib_div::intInRange($lConf['maxPages'], 0, 1000, 2);
				;

				//.....//
				 
				 
				// Get number of records:
				$res = $this->pi_exec_query('tx_hsgbase_basisdaten', 1);
				list($this->internal['res_count']) = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);
				 
				// Make listing query, pass query to SQL database:
				
                // Ein paar Fehlversuche
				//$query = 'FROM tx_hsgbase_basisdaten WHERE NOT hidden AND NOT deleted AND pid='.$dataPID .$this->cObj->enableFields('tx_hsgbase_basisdaten');
				//$res = $this->pi_exec_query($query);			
				
                // Hier scheint auch noch der Wurm drin zu sein 
				$addWhere = ('AND pid='.$dataPID)	
				$res = $this->pi_exec_query('tx_hsgbase_basisdaten', $addWhere);
				$this->internal['currentTable'] = 'tx_hsgbase_basisdaten';
				 
				// 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 search box:
				$fullTable .= $this->pi_list_searchBox();
				 
				// Adds the result browser:
				$fullTable .= $this->pi_list_browseresults();
				 
				// Adds the whole list table
				$fullTable .= $this->pi_list_makelist($res);
				 				 				 
				// Returns the content from the plugin.
				return $fullTable;
			}
		}

Ich bin doch da noch schon wieder auf dem absoluten holzweg - oder??????

Danke

brokemeister ·

Hi!
Schau dir einfach mal eine Erweiterung an, die diese Funktion hat.
80 Zeilen Code sind schon viel zum Durchschauen...

Gruß

Malte

liquidblue ·

Hallo Malte,

vielen Dank für deinen Hinweis. Ich habe schon einige Extentions durchgesehen aber die sind alle anders aufgebaut gewesen!

Hast du da mal einen Tipp, welche ich mir mal näher anschauen sollte.

PS: Hab nur der Übersichtlichkeit die gesammte Funktion gepostet, im wesentlichen sollten die folgenen Zeilen interessant sein:

Zeile: 9-13
da hohle ich mir die Storage PID

Zeile: 50-60
da sind neben einigen Fehlversuchen
nach dem durchstöbern der Doku die Datenbankabfragen
die offensichtlich nicht laufen

steffenk ·

da pids eine Liste sein können immer
and pid IN(list)

Ein Blick in tt_news hätte Dir die Lösung gesagt

$storagePid = $GLOBALS['TSFE']->getStorageSiterootPids();
$this->SPaddWhere = ' AND tt_news_cat.pid IN (' . $storagePid['_STORAGE_PID'] . ')';
liquidblue ·

Leider hatte mir dein Hinweis nur zum Teil weiterhelfen können,

ich möchte ja eine Extention, die ich ursprünglich mit dem Kickstarter erstellt hatte, so erweitern dass ich einen Storagefolder hinterlegen kann und die Daten in der "listView" nach dem Feld "sorting" sortiert werden.

Ich habe mein Plugin auf der Seite ID:17 eingegeben

Die Daten liegen in einem SystemFolder mit der ID 55

liquidblue ·

Hallo Typo3 Freunde,

also nach langem hin und her nun ein kleiner Teilerfolg mit der Datenbankabfrage:

$storagePid = $GLOBALS['TSFE']->getStorageSiterootPids();		
$res = $this->pi_exec_query('tx_hsg_basisdaten','1','AND pid IN (' .  $storagePid['_STORAGE_PID'] . ')','','','');
list($this->internal['res_count']) = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);

Aber was wirklich komisch ist, ist die Tatsache das das ganze nur funktioniert wenn ich als Datensatzsammlung meine Seiten ID: 17 angebe, in der auch eine Kopie der Daten liegt und das Plugin eingefügt ist.

Gebe ich keine ID der Datensammlung an kommt nix, das ist ja logisch

aber wenn ich die ID 55 angebe, wo natürlich auch die Daten liegen (ist mein perspektivischer SysFolder), dann bleibt das ganze auch leer`????? #evil#

wer kann mir denn dieses verhalten bitte mal verständlich erläutern?

...und wenn wir schon gleich dabei sind ist das hier so richtig?

$d = $GLOBALS['TSFE']->getStorageSiterootPids();
$storagePID = intval($d['_STORAGE_PID']);
$currentPID= $GLOBALS['TSFE']->id;
$dataPID = $storagePID?$storagePID:$currentPID;