eID will nicht so richtig- Werte können nicht gelesen werden

  • Rey Rey
    Padawan
    0 x
    43 Beiträge
    0 Hilfreiche Beiträge
    31. 05. 2013, 13:57

    hi,
    ich möchte mit eID die Ajax Funktionalität verwenden, jedoch bekomme ich nicht den Wert ausgelesen den ich über die eID liefer.
    mein JS code

    1. function getCatID(url,id)
    2. {
    3. var params= { "catID" : id};
    4. $.ajax({
    5. url: url+'?eID=category_eID',
    6. data: params,
    7. success: function(data) {
    8. // alert(data);
    9. }//success
    10. });//ajax
    11. }

    PHP
    1. <?php
    2. if (!defined ('PATH_typo3conf')) die ('Could not access this script directly!');
    3. require_once('typo3conf/ext/abc/pi1/class.tx_abc_pi1.php');
    4. class myExtHelper{
    5.  
    6. public function main() {
    7. $pi_object = new tx_abc_pi1();
    8. // echo "<pre>";
    9. //
    10. // var_dump($_GET);
    11. // echo "</pre>";
    12. $pi_object->crArr(t3lib_div::_GP("catID"));
    13. }
    14. }
    15. $output = t3lib_div::makeInstance('myExtHelper');
    16. echo $output->main();
    17.  
    18. ?>

    In der ext_localconf.php habe ich diese Zeile am ende Hinzugefügt
    1. $TYPO3_CONF_VARS['FE']['eID_include']['category'] = 'EXT:abc/myExtHelper.php';

    Jemand eine Idee was ich falsch mache?


  • SomehowLost SomehowLo...
    Jedi-Meister
    0 x
    278 Beiträge
    0 Hilfreiche Beiträge
    31. 05. 2013, 17:22

    Hallo,

    müsste es nicht heißen:

    1. $TYPO3_CONF_VARS['FE']['eID_include']['category_eID'] = 'EXT:abc/myExtHelper.php';

    Viele Grüße

    [url=http://www.andreas-hoffmeyer.de/]Andreas Hoffmeyer - Websites & mehr...[/url]
    [url=http://typo3-4-newbies.blogspot.de/]TYPO3 für Einsteiger: typo3-4-newbies.blogspot.de[/url]

  • Rey Rey
    Padawan
    0 x
    43 Beiträge
    0 Hilfreiche Beiträge
    31. 05. 2013, 18:23

    Doch, das war ein Leichtsinnsfehler beim Tippen im Forum habe kein Copy&Paste gemacht gehabt.
    wenn ich mir die dump von

    1. var_dump($pi_object->crArr);
    ausgeben lasse ist diese auch mit den Datensätzen gefüllt, die Ausgabe ändert sich jedoch nicht.
    bzw es wird nicht ausgegeben.
    was oben im Code noch fehlerhaft ist ist das
    1. $pi_object->crArr(t3lib_div::_GP( "catID" ) ) ;

    es heißt
    1. return $pi_object->crArr(t3lib_div::_GP( "catID" ) ) ;

    Aber wie gesagt es wird nicht ausgegeben.

  • Rey Rey
    Padawan
    0 x
    43 Beiträge
    0 Hilfreiche Beiträge
    01. 06. 2013, 13:34

    Ich habe mal noch versucht die pi2 anzusprechen in der Hoffnung das ich dort was zurück bekomme aber da bekomme ich sogar einen Fehler zurück

    1. GET http://domain.de/x/y.html?eID=category_eID&catID=6
    2.  
    3. 500 Internal Server Error
    4. 201ms

    1. function getFiles()
    2. {
    3.  
    4.  
    5. $page = max(0, intval($this->piVars['page']));
    6.  
    7. $rpp = $this->conf['advanced.']['filesPerPage'];
    8.  
    9. $start = $rpp * $page;
    10. $sorting = $this->conf['advanced.']['sorting'];
    11. if(t3lib_div::_GP('catID')==0 || t3lib_div::_GP('catID')==NULL || t3lib_div::_GP('catID')=='' )
    12. {
    13.  
    14. $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows($this->conf['advanced.']['damColumns'], 'dlc', $this->where,'', $sorting, $start . ',' . $rpp);
    15. }
    16. else{
    17. $subCats = $this->getFilesCats(t3lib_div::_GP('catID'));
    18. $subWhere='';
    19. if(count($subCats)>0)
    20. {
    21. $subCatWhere = implode(' OR catUid=',$subCats);
    22. $subWhere = 'catUid='.t3lib_div::_GP('catID')." OR catUid=".$subCatWhere;
    23. }
    24. else{
    25. $subCatWhere='';
    26. $subWhere = 'catUid='.t3lib_div::_GP('catID');
    27. }
    28.  
    29. //echo $subWhere;
    30. $this->recDataWhere=$subWhere;
    31. //die("ende");
    32. //die(var_dump($rows));
    33.  
    34. $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows($this->conf['advanced.']['damColumns'], 'dlc', "(".$this->where .") AND (".$subWhere.")",'', $sorting, $start . ',' . $rpp);
    35. }
    36.  
    37. //$rowsClean = $this->checkFilePath($rows);
    38.  
    39. //$subParts = array('###SINGLE_FILE###'=>$this->files_getFiles($rowsClean),);
    40. $subParts = array('###SINGLE_FILE###'=>$this->files_getFiles($rows),);
    41. $markers = array( '###UID###' => $this->externalUid,'###BREADCRUMB###'=>$this->renderBreadcrumb(), );
    42.  
    43. $template = $this->cObj->getSubpart($this->templateCode, '###FILE_LIST###');
    44.  
    45. if ($this->cObj->getSubpart($template, '###PAGE_BROWSER###') != '') {
    46. // Old template have page browser as subpart. We replace that completely
    47.  
    48. $subParts['###PAGE_BROWSER###'] = $this->getPageBrowser($rpp);
    49.  
    50. }
    51. else {
    52.  
    53. // New template have only a marker
    54.  
    55. $markers['###PAGE_BROWSER###'] = $this->getPageBrowser($rpp);
    56.  
    57. }
    58.  
    59.  
    60. return $this->substituteMarkersAndSubparts($template, $markers, $subParts);
    61.  
    62. }

    Also zum einen verstehe ich nicht wieso ich bei der pi1 nichts ausgegeben bekomme, da mir die "alert(data);" im JS-Code die Ausgabe anzeigt. Und zum anderen wieso ich einen Internal Fehler bekomme wenn ich die pi2 anspreche. Ich mein es könnte zwar an den Markern liegen aber ist es nicht so:
    -eID-Helper.php ermöglicht mir ajax
    -greife auf Funktion zu deren Daten ich ausgeben bzw. dynamisch verändern möchte
    -Für die Funktion sieht es aus als ob ganz normal die Extension aufgerufen wird und ihr stehen alle Mittel zur Verfügung

    Ich habe herausgefunden, dass es an diesem Code-Block liegt zumindest bekomme ich keinen Internal Error sobald der teil auskommentiert ist.

    1. $subParts = array('###SINGLE_FILE###'=>$this->files_getFiles($rows),);
    2. $markers = array( '###UID###' => $this->externalUid,'###BREADCRUMB###'=>$this->renderBreadcrumb(), );
    3.  
    4. $template = $this->cObj->getSubpart($this->templateCode, '###FILE_LIST###');
    5.  
    6. if ($this->cObj->getSubpart($template, '###PAGE_BROWSER###') != '') {
    7. // Old template have page browser as subpart. We replace that completely
    8.  
    9. $subParts['###PAGE_BROWSER###'] = $this->getPageBrowser($rpp);
    10.  
    11. }
    12. else {
    13.  
    14. // New template have only a marker
    15.  
    16. $markers['###PAGE_BROWSER###'] = $this->getPageBrowser($rpp);
    17.  
    18. }
    19.  
    20. return $this->substituteMarkersAndSubparts($template, $markers, $subParts);

    Abgesehen von diesem Problem besteht auch immernoch das andere. Die daten werden nicht ausgegeben bzw. verändert aus der pi1

  • Rey Rey
    Padawan
    0 x
    43 Beiträge
    0 Hilfreiche Beiträge
    16. 07. 2013, 23:52

    Ich wollte nur nochmal auf dieses Thema aufmerksam machen, leider konnte ich es bisher immer noch nicht lösen

  • infastra infastra
    Padawan
    0 x
    46 Beiträge
    0 Hilfreiche Beiträge
    17. 07. 2013, 08:16

    Hi,

    ich gehe davon aus, dass der Ajax-Request auch richtig im Typoscript "angemeldet" wurde. Also mit eigener TypeNum etc., denn das ist ja eine zwingende Voraussetzung, damit Deine Anfrage bearbeitet werden kann.

    Da Dein Script gar nicht aufgerufen wird, vermute ich, dass dort noch etwas fehlt. Was wird den bei dem 500er Fehler für eine Meldung ausgegeben?

    Folgender Link hat mir weitergeholfen: [url=http://daniel.lienert.cc/blog/blog-post/2011/04/23/typo3-extbase-und-ajax/]Typo3 und Ajax[/url] (Der Aufruf aus dem FE befindet sich im unteren Bereich des Artikels)

    Desweiteren würde ich - meine ganz persönliche Meinung - die eID im Javascript-Code nicht als Get-Parameter an die URL hängen sondern in den Parameter-Container verschieben.

    Grüße
    Mathias

  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    17. 07. 2013, 09:23

    In eID-Scripts steht dir das TYPO3-Frontend standardmäßig überhaupt nicht zur Verfügung,
    die sind ja eher für einfache Datenbankabfragen etc. gedacht.
    Ohne Frontend laufen deine piBase-Plugins nicht und führen zu unterschiedlichsten Fehlermeldungen.
    In so einem Fall mußt du das Frontend im eID-Script erst mal selbst initialiseren:

    1. if (!defined ('PATH_typo3conf')) die ('Could not access this script directly!');
    2. $TYPO3_AJAX = true;
    3.  
    4. $L = intval(t3lib_div::_GP('L'));
    5.  
    6. require_once(PATH_tslib.'class.tslib_fe.php');
    7. require_once(PATH_t3lib.'class.t3lib_page.php');
    8. require_once(PATH_t3lib.'class.t3lib_tstemplate.php');
    9. require_once(PATH_t3lib.'class.t3lib_cs.php');
    10. require_once(PATH_t3lib.'class.t3lib_userauth.php');
    11. require_once(PATH_tslib.'class.tslib_feuserauth.php');
    12. require_once(PATH_tslib.'class.tslib_content.php');
    13. // get Page ID from form:
    14. $id = $cObjUid = $GLOBALS["_GET"]["pid"];
    15.  
    16. $TSFE = new tslib_fe (
    17. $GLOBALS['TYPO3_CONF_VARS'],
    18. $id,
    19. t3lib_div::_GP('type'),
    20. t3lib_div::_GP('no_cache'),
    21. t3lib_div::_GP('cHash'),
    22. t3lib_div::_GP('jumpurl'),
    23. t3lib_div::_GP('MP'),
    24. t3lib_div::_GP('RDCT')
    25. );
    26. // don't cache ajax responses
    27. $TSFE->no_cache = true;
    28.  
    29. $TSFE->connectToDB();
    30. $TSFE->initFEuser();
    31. $TSFE->checkAlternativeIdMethods();
    32. $TSFE->clear_preview();
    33. $TSFE->determineId();
    34. $TSFE->getCompressedTCarray();
    35. $TSFE->initTemplate();
    36. $TSFE->getConfigArray();
    37.  
    38. if ($L > 0) {
    39. $TSFE->settingLanguage();
    40. $TSFE->settingLocale();
    41. }
    42.  
    43. //echo "<pre>", print_r( $TSFE ), "</pre>";
    44.  
    45. require_once('typo3conf/ext/abc/pi1/class.tx_abc_pi1.php');
    46.  
    47. $pi1_cObj = t3lib_div::makeInstance("tx_abc_pi1");
    48. $pi1_cObj->cObj = t3lib_div::makeInstance('tslib_cObj');
    49. ...
    50. usw.usf.
    51. ...

  • infastra infastra
    Padawan
    0 x
    46 Beiträge
    0 Hilfreiche Beiträge
    17. 07. 2013, 12:13

    @jenses
    Stimmt daran könnte es auch liegen. Muss ich für die Abarbeitung von Ajax-Anfragen im Frontend nicht auch noch die Definition für die Seitentypen im TypoScript vornehmen?

    Grüße

  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    17. 07. 2013, 19:20

    Mal ganz abgesehen davon, dass im Codebespiel überhaupt nichts ausgegeben wird...

    Da wird ein
    echo $output->main(); gemacht. Schaut man aber auf die main Methode darüber, sieht man, dass zwar eine pi1 aufgerufen wird, aber der return Wert davon nicht benutzt wird. D.h. die main Methode gibt sowieso schon nichts zurück.

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • Rey Rey
    Padawan
    0 x
    43 Beiträge
    0 Hilfreiche Beiträge
    17. 07. 2013, 23:08

    [quote="kitsunet"]
    Mal ganz abgesehen davon, dass im Codebespiel überhaupt nichts ausgegeben wird...
    [/quote]
    Ja das ist mir bewusst. Das habe ich seit langem schon drinnen aber was nutzt mit ein return von irgendwas wenn es nicht einmal bis zum return kommt.
    Die Fehlermeldung lautet

    Invalid URI in request OPTIONS * HTTP/1.0
    (500 Internal Server Error 569ms)
    @jenses
    dein usw. usf. bedeutet das ich nun auf die Funktion der pi1 zugreifen kann in der mit Templates gearbeitet wird? also mit dem ganzen getsubstitutemarker etc?
    Falls ja dann muss ich leider sagen Nein es geht immer noch nicht da ich den Fehler bekomme den ich eben nannte.
    mein Js sieht so aus
    1. var http =new XMLHttpRequest();
    2. var params = "?eID=category_eID&catID="+id;
    3. var uri = url+params; //so lange eId nicht geht Alternative
    4. /*var url = "index.php?id=5";*/
    5. http.open("POST", uri, true);
    6. http.send();

    Die helper Datei so
    1. class catSelectionHelper {
    2.  
    3. public function main() {
    4. $TYPO3_AJAX = true;
    5.  
    6. $L = intval(t3lib_div::_GP('L'));
    7. require_once(PATH_tslib.'class.tslib_fe.php');
    8. require_once(PATH_t3lib.'class.t3lib_page.php');
    9. require_once(PATH_t3lib.'class.t3lib_tstemplate.php');
    10. require_once(PATH_t3lib.'class.t3lib_cs.php');
    11. require_once(PATH_t3lib.'class.t3lib_userauth.php');
    12. require_once(PATH_tslib.'class.tslib_feuserauth.php');
    13. require_once(PATH_tslib.'class.tslib_content.php');
    14. // get Page ID from form:
    15. $id = $cObjUid = $GLOBALS["_GET"]["pid"];
    16.  
    17. $TSFE = new tslib_fe (
    18. $GLOBALS['TYPO3_CONF_VARS'],
    19. $id,
    20. t3lib_div::_GP('type'),
    21. t3lib_div::_GP('no_cache'),
    22. t3lib_div::_GP('cHash'),
    23. t3lib_div::_GP('jumpurl'),
    24. t3lib_div::_GP('MP'),
    25. t3lib_div::_GP('RDCT')
    26. );
    27. // don't cache ajax responses
    28. $TSFE->no_cache = true;
    29.  
    30. $TSFE->connectToDB();
    31. $TSFE->initFEuser();
    32. $TSFE->checkAlternativeIdMethods();
    33. $TSFE->clear_preview();
    34. $TSFE->determineId();
    35. $TSFE->getCompressedTCarray();
    36. $TSFE->initTemplate();
    37. $TSFE->getConfigArray();
    38.  
    39. if ($L > 0) {
    40. $TSFE->settingLanguage();
    41. $TSFE->settingLocale();
    42. }
    43.  
    44. echo "<pre>".var_dump( $TSFE ) ."</pre>";
    45.  
    46. require_once('typo3conf/ext/hfu_dlc/pi1/class.tx_hfudlc_pi1.php');
    47. $pi1_cObj = t3lib_div::makeInstance("tx_hfudlc_pi1");
    48. $pi1_cObj->cObj = t3lib_div::makeInstance('tslib_cObj');
    49. return $pi1_cObj->getFiles();
    50. }
    51.  
    52. }
    53. $output = t3lib_div::makeInstance('catSelectionHelper');
    54. echo $output->main();

    @infastra hm ich werde mir das mal durchlesen aber auf den ersten blick ist da eine extension im MVC stil Voraussetzung und so wurde diese noch nicht programmiert.
    "Definition für die Seitentypen im TypoScript vornehmen?" wie wo was warum?