content mit eigener Extension rendern [Gelöst]

  • Mr.TRTD Mr.TRTD
    Padawan
    0 x
    58 Beiträge
    0 Hilfreiche Beiträge
    27. 02. 2008, 09:09

    Ich habe mit dem Kickstarter ein Frontendplugin erstellt,
    dass mir aus einem Storage Folder bestimmte Datensätze anzeigt.
    Nun möchte ich anhand eines GET Parameters lediglich einen Datensatz auslesen und gerendert zwischen anderen tt_content Objekten anzeigen.

    Ich habe also zusätzlich die Extension lumophpinclude installiert und dort eingebunden, wo ich den Inhalt anzeigen will.
    Das Plugin holt sich also eine Datei aus fileadmin, die folgenden Inhalt hat:

    1. //mein GET Parameter
    2. if(isset($_GET['cid'])){
    3. $cid = $_GET['cid'];
    4.  
    5. // Abfrage an die Datenbank
    6. $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','tx_ozauthors_table','cid='. $cid);
    7. // Nur ein Treffer erwünscht
    8. if($GLOBALS['TYPO3_DB']->sql_num_rows($res) == 1){
    9. // da sind meine Daten
    10. $data = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
    11. }
    12. }

    Und nun?

    wie kann ich meine Daten nun anhand meiner Extension gerendert anzeigen ?

    PS.: Freu mich schon darauf, wieder etwas dazu zu lernen ;-)


  • 1
  • Desmond Desmond
    R2-D2
    0 x
    105 Beiträge
    0 Hilfreiche Beiträge
    29. 02. 2008, 15:51

    ähmm.... was meinst du genau?

    In Plugins wird Content mit return ausgeben.

    In der Extension lumophpinclude reicht schon ein normales echo.

  • Mr.TRTD Mr.TRTD
    Padawan
    0 x
    58 Beiträge
    0 Hilfreiche Beiträge
    03. 03. 2008, 07:49

    Nach langem Lesen und vielen Tutorials / Videos habe ich es nun selber geschafft, das Problem zu lösen.
    Ich musste mein eigenes Plugin erweitern und dort die Abfrage auf meine cid einbauen.

    Nun brauche ich nur an beliebiger Stelle mein Plugin aufzurufen und anhand des Get Parameters kann ich nun meinen Datensatz anzeigen.

    Für alle interessierten hier meine Script:
    vorher gem. Kickstarter:

    1. function main($content,$conf) {
    2. switch((string)$conf['CMD']) {
    3. case 'singleView':
    4. list($t) = explode(':',$this->cObj->currentRecord);
    5. $this->internal['currentTable']=$t;
    6. $this->internal['currentRow']=$this->cObj->data;
    7. return $this->pi_wrapInBaseClass($this->singleView($content,$conf));
    8. break;
    9. default:
    10. if (strstr($this->cObj->currentRecord,'tt_content')) {
    11. $conf['pidList'] = $this->cObj->data['pages'];
    12. $conf['recursive'] = $this->cObj->data['recursive'];
    13. }
    14. return $this->pi_wrapInBaseClass($this->listView($content,$conf));
    15. break;
    16. }
    17. }

    Nacher:

    1. function main($content,$conf){
    2. $this->conf = $conf;
    3. $content="";
    4. $GLOBALS["TSFE"]->set_no_cache();
    5. if(t3lib_div::GPvar("cid")){
    6. $this->internal['currentRow'] = $this->getSingle(t3lib_div::GPvar("cid"));
    7.  
    8. if (strstr($this->cObj->currentRecord,'tt_content')) {
    9. $conf['pidList'] = $this->cObj->data['pages'];
    10. $conf['recursive'] = $this->cObj->data['recursive'];
    11. }
    12. return $this->pi_wrapInBaseClass($this->singleView($content,$conf));
    13.  
    14. } else {
    15. switch((string)$conf['CMD']) {
    16. case 'singleView':
    17. list($t) = explode(':',$this->cObj->currentRecord);
    18. $this->internal['currentTable']=$t;
    19. $this->internal['currentRow']=$this->cObj->data;
    20. return $this->pi_wrapInBaseClass($this->singleView($content,$conf));
    21. break;
    22. default:
    23. if (strstr($this->cObj->currentRecord,'tt_content')) {
    24. $conf['pidList'] = $this->cObj->data['pages'];
    25. $conf['recursive'] = $this->cObj->data['recursive'];
    26. }
    27. return $this->pi_wrapInBaseClass($this->listView($content,$conf));
    28. break;
    29. }
    30. }
    31. #t3lib_div::debug($conf);
    32. return $content;
    33. }
    34.  
    35. /**
    36.   * function.
    37.   */
    38. function getSingle($cid){
    39. $query = "SELECT * FROM tx_ozauthors_table WHERE cid = ".$cid." ORDER BY sorting";
    40.  
    41. $res = mysql(TYPO3_db,$query);
    42. $row = array();
    43. $row = mysql_fetch_assoc($res);
    44. return $row;
    45.  
    46. }
    [/TS]

    Der Rest ist überwiegend identisch mit dem Source des Kickstarters.

    Also doch wieder etwas gelernt ;-)

  • lisardo lisardo
    Jedi-Meister
    0 x
    306 Beiträge
    0 Hilfreiche Beiträge
    11. 09. 2011, 15:12

    Ist ja schon ein Weilchen alt ... trotzdem, weil ich gerade drüberstolper: bitte nicht nachmachen, der Code enthält schwerwiegende Sicherheitslücken: der GET-Parameter cid wird völlig ungeprüft an eine SQL-Abfrage übergeben, womit einer SQL-Injection Tür und Tor geöffnet wird. Ein Angreifer kann mit wenig Mühe die TYPO3-Instanz komplett übernehmen. Das ist geradezu klassisch hier ...

    Ansonsten: die IDs für Datensätze lauten in TYPO3 grundsätzlich uid und nicht cid. Übergeben wird für den Aufruf der Single-Darstellung dieser GET-Parameter: tx_myExt_pi1[uid]=xyz . Wenn man sich daran hält, funktioniert der Beispielcode des Kickstarters.

    Ach ja: $GLOBALS["TSFE"]->set_no_cache(); schaltet den Cache für immer und für die gesamte TYPO3-Installation aus, das geht gar nicht.

    Peter, [url=http://www.typo3-lisardo.de]TYPO3 @ lisardo (Augsburg)[/url]

  • Mr.TRTD Mr.TRTD
    Padawan
    0 x
    58 Beiträge
    0 Hilfreiche Beiträge
    13. 09. 2011, 12:06

    Wenn ich mir den Code jetzt angucke kommt mir auch das Grauen. Bitte nicht nachmachen.

    Danke für den Hinweis.

  • 1