eigene Extension sort FE
| Autor | Nachricht |
|---|---|
|
Verfasst am: 12. 03. 2009 [14:20]
|
|
|
DAAfH
Themenersteller
Dabei seit: 31.01.2008
Beiträge: 73
|
Hallo liebes Forum, ich habe vor kurzem eine eigene Extension gebaut (mit Kickstarter) und würde gerne die die Ergebnisse im Frontend nach crdate sortieren! Die aktuellsten ganz ob die anderen da hinter. Leider bekomme ich dies nicht hin Hier mal der Code : PHP class tx_adhocmessage_pi1 extends tslib_pibase {
var $prefixId = 'tx_adhocmessage_pi1'; // Same as class name
var $scriptRelPath = 'pi1/class.tx_adhocmessage_pi1.php'; // Path to this script relative to the extension dir.
var $extKey = 'adhocmessage'; // 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_adhocmessage_data';
$this->internal['currentRow'] = $this->pi_getRecord('tx_adhocmessage_data',$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'] = 'crdate:0'; // 1== Descending, 0 == ascending
}
// 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']='date,message';
$this->internal['orderByList']='uid,crdate,message';
// Get number of records:
$res = $this->pi_exec_query('tx_adhocmessage_data',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_adhocmessage_data');
$this->internal['currentTable'] = 'tx_adhocmessage_data';
// 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->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;
}
}
/**
* Creates a list from a database query
*
* @param ressource $res: A database result ressource
* @return A HTML list if result items
*/
function makelist($res) {
$items=array();
// Make list table rows
while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
$items[]=$this->makeListItem();
}
$out = '<div'.$this->pi_classParam('listrow').'>
'.implode(chr(10),$items).'
</div>';
return $out;
}
/**
* Implodes a single row from a database to a single line
*
* @return Imploded column values
*/
function makeListItem() {
$out='
<p'.$this->pi_classParam('listrowField-date').'>'.$this->getFieldContent('date').'</p>
<p'.$this->pi_classParam('listrowField-message').'>'.$this->getFieldContent('message').'</p>
<p'.$this->pi_classParam('listrowField-download').'>'.$this->getFieldContent('download').'</p>
<p'.$this->pi_classParam('listrowField-file-header-name').'>'.$this->getFieldContent('file_header_name').'</p>
';
return $out;
}
/**
* 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>
<p'.$this->pi_classParam("singleViewField-date"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" />.'><strong>'.$this->getFieldHeader('date').':</strong> '.$this->getFieldContent('date').'</p>
<p'.$this->pi_classParam("singleViewField-message"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" />.'><strong>'.$this->getFieldHeader('message').':</strong> '.$this->getFieldContent('message').'</p>
<p'.$this->pi_classParam("singleViewField-download"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" />.'><strong>'.$this->getFieldHeader('download').':</strong> '.$this->getFieldContent('download').'</p>
<p'.$this->pi_classParam("singleViewField-file-header-name"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" />.'><strong>'.$this->getFieldHeader('file_header_name').':</strong> '.$this->getFieldContent('file_header_name').'</p>
<p>'.$this->pi_list_linkSingle($this->pi_getLL('back','Back'),0).'</p></div>'.
$this->pi_getEditPanel();
return $content;
}
/**
* 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/adhocmessage/pi1/class.tx_adhocmessage_pi1.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/adhocmessage/pi1/class.tx_adhocmessage_pi1.php']);
}
?>Was habe ich übersehen? Bin für jeden Tip oder Anregung dankbar! Mfg DAAfH [/HTML] |
|
Verfasst am: 12. 03. 2009 [15:55]
|
|
|
matin
Dabei seit: 09.08.2008
Beiträge: 90
|
$this->internal["orderBy"]="name"; |
|
Verfasst am: 28. 07. 2009 [14:25]
|
|
|
lassmiranda
Dabei seit: 24.07.2009
Beiträge: 1
|
Hallo, ich habe ein ähnliches Problem: Die Ergebnisse werden bei mir jetzt nach einer Spalte 'supplier' sortiert, diese referenziert bei mir aber auf eine andere Tabelle und enthählt daher nur die 'uid' der Referenztabelle (ähnlich den Kategorien in dem CD-Listen-Tutorial). Wie kann man die Ergebnisse der Listview (pi_list_makelist) alphabetisch nach der Spalte der Referentabelle sortieren? Viele Grüße Lassmiranda |
|
Verfasst am: 04. 03. 2010 [11:47]
|
|
|
DJ-Mingo
Dabei seit: 25.02.2010
Beiträge: 34
|
Hallo Foristi, genau vor diesem Problem stehe ich gerade. Habe eine Tabelle <Namen>, die Element1, Element2,...ElementX enthält In meiner Stammtabelle, wo <Namen> referenziert wird, möchte ich nach diesem Feld sortieren. Schön und gut, doch das System sortiert es nach dem internen Sortierschlüssel der Tabelle - UID?? Scheinbar nicht, denn wenn ich (z.B. Mit phPMyAdmin die Tabelle öffne, dann ist sie nicht nach UID sortiert sondern nach...ja, wonach denn??) Hatte so schön die Elemente1-X gemäß UID in die Tabelle eingefügt, damit dann die Sortierung entsprechend in der Stammtabelle klappt. Wo kann ich den Hebel ansetzen, dass "wirklich" nach der UID der Tabelle <Namen> sortiert werden kann? VG Christian |
|
Verfasst am: 04. 03. 2010 [20:27]
|
|
|
DJ-Mingo
Dabei seit: 25.02.2010
Beiträge: 34
|
Keiner eine Idee? |
|
Verfasst am: 05. 03. 2010 [07:42]
|
|
|
ammannd
Dabei seit: 29.01.2006
Beiträge: 149
|
ich habe mich nicht durch deinen code gearbeitet, aber mit untenstehendem gehts nicht ("name" durch "uid" ersetzen...)? matin schrieb: $this->internal["orderBy"]="name"; |
|
Verfasst am: 05. 03. 2010 [08:28]
|
|
|
DJ-Mingo
Dabei seit: 25.02.2010
Beiträge: 34
|
Hatte mich auf lassmiranda bezogen Nein, damit klappt es nicht. Vielleicht hilft ein Bilck in die Datenbank. Dort sind die Elemente in der Tabelle <Namen>, wenn ich die Ansicht öffne so sortiert: uid: 1 10 2 5 3 ... d.h. die sind nicht geordnet....folglich wird im Frontend bei Nutzung von $this->internal["orderBy"]="name" in der Tabelle <Haupttabelle> zwar nach <Namen> sortiert, aber der Output entspricht nicht der uid in der Datenbank. Ich vermute, die Datensätze sind nach crdate sortiert... Wie kann ich das beeinflussen, dass nach uid sortiert wird? (hatte nämlich nachträglich die uids neu vergeben, so dass sich cerdate nicht chronologisch verhält) [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 05.03.2010 um 08:35.] |
|
Verfasst am: 05. 03. 2010 [14:04]
|
|
|
DJ-Mingo
Dabei seit: 25.02.2010
Beiträge: 34
|
Einen habe ich noch: In der mySQL Datenbank habe ich mal die <Haupttabelle> geöffnet und nach <name> sortieren lassen: 1 10 11 12 ... 19 2 3 4 ... 9 Und so werden dann auch meine Datensätze natürlich angezeigt...Die eingetragenen uid werden zu Strings umgewandelt und in dem jeweiligen Feld steht dann dieser Eintrag... na toll. Jetzt muss ich nen neuen Weg finden, wie ich das Feld sortiere (Kasper hat ja in seinme Videotutorial darauf hingewiesen, dass da mehr Hirnschmalz von Nöten ist...heul.) Wenn also jemand einen Tipp geben kann, wie ich eine Tabelle nach einem Feld sortieren kann, das seine Werte aus einer anderen Tabelle bezieht, die wiederum nur ihre uid als String einträgt...dann wäre ich sehr glücklich [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 05.03.2010 um 14:06.] |
|
Verfasst am: 09. 03. 2010 [17:41]
|
|
|
DJ-Mingo
Dabei seit: 25.02.2010
Beiträge: 34
|
Bin nun etwas weiter gekommen und habe hier Habe es prompt ausprobiert, und da wird was sortiert. Nur nicht so, wie ich das möchte. Mit PHP $queryParts['SELECT'] = '
a.*,
b.cat';
$queryParts['FROM'] = '
tx_anweisungen_basis a,
tx_anweisungen_category b';
$queryParts['WHERE'] = sprintf('
a.category=b.uid ',
str_replace('tx_anweisungen_basis', 'a', $this->cObj->enableFields('tx_anweisungen_basis'))
);
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
$queryParts['SELECT'],
$queryParts['FROM'],
$queryParts['WHERE']
);Hiermit wird nach uid sortiert, aber ich möchte gerne das gemäß alphabetischer Sortierung in der Tabelle tx_anweisungen_category sortiert wird. Weiss jemand Rat? Gruss Christian |
|
Verfasst am: 12. 03. 2010 [09:04]
|
|
|
DJ-Mingo
Dabei seit: 25.02.2010
Beiträge: 34
|
Guten Morgen, einmal noch frage ich in die Runde, ob jemand weiss, wie ich es hinbekomme, nach dem Alphabet geordnet den Inhalt einer (Haupt)Tabelle zu sortieren, die ein Feld mit durch Komma getrennte Einträge der UID einer zweiten Tabelle enthält? (also nach diesen Inhalten soll dann sortiert werden. Beispiel [Hautptabelle] Anweisung Nr. | Titel | Category | .... [Tabelle 2: Category] Dokumentation,uid=10 | Hygiene,uid=1 | Validierung,uid=12 |..... Die Haupttabelle soll nach dem Feld Category sortiert werden, und zwar alphabetisch... Gruss Christian |



