Zum Inhalt springen

mit Jquery get variable an extension schicken

Erstellt am 25. November 2010 · 6 Antworten · letzte Antwort am 9. Dezember 2010

Tags: Frage

Rey ·

Hi,
ich spiele mit Jquery rum, der JS code ist in einem template eingebunden.
im JS schicke ich eine get Variable an ein php file.
Nun möchte ich diese get variable nicht mehr an ein php file im root ordner senden sondern an eine extension
der code sah so aus
Eingabe.Eingeben({url: './meinePHPdatei.php?q='});
Also dachte ich mir ich schreibe es so
Eingabe.Eingeben({url: './typo3conf/ext/meine_ext/pi1/class.tx_meineext_pi1.php?q='});
das funktioniert jedoch nicht.
Meine Frage ist nun gibt es überhaupt eine möglichkeit das so umzusetzen?

vince ·

Hallo,

Also prinzipiell würde ich kein Skript so direkt einbinden...

Für Typo3 gibt's da den eID Mechanismus.

gibt mal sowas in die ext_localconf ein:

$TYPO3_CONF_VARS['FE']['eID_include']['irgendeinname_eID'] = 'deinpfad/deinskript.php';

dann kannst du über deinewebseite.de/?eID=irgendeinname_eID
das Skript ausgeben.
Entsprechend im js code als url ?eID=irgendeinname_eID
Damit kannst du dann auch in deinem php skript Instanzen von der Extension Klasse erzeugen und die funktionen nutzen.
(auch Datebbankverbindung usw.)

Hier mal ein Paar Links:

http://www.sk-typo3.de/Ajax-mit-prototype-und-eID.328.0.html

http://www.typo3-tutorials.org/tutorials/extensions/eid-mechanismus.html

Gruß,

Vince.

Rey ·

danke erstmal.

Ich habe es so umgesetzt wie du es mir gesagt hast. Allerdings bekomme ich nichts
?eID=eID_meineEXT&q=

in der pi1 greife ich mit echo $_get['q'] auf die variable zu bekomme jedoch nichts

die conf schaut so aus

$TYPO3_CONF_VARS['FE']['eID_include']['eID_MeineEXT'] = 'typo3conf/ext/meine_ext/pi1/class.tx_meineext_pi1.php';
Technisch ist es doch so richtig umgesetzt oder nicht?

vince ·

Hallo,

Direkt auf die pi Klasse verweisen klappt glaub ich nicht.

Am besten, Du schreibst ein extra php skript.

z.B.

<?php
if (!defined ('PATH_typo3conf')) die ('Could not access this script directly!');
require_once('typo3conf/ext/meine_ext/pi1/class.tx_meineext_pi1.php');

class deinskript {

    public function main() {
		$feUserObj = tslib_eidtools::initFeUser();
		$pi_object = new tx_meineext_pi1();
		$result = $pi_object-> deineFunktion($_GET['q']):	
                return $result;
    }

}

$output = t3lib_div::makeInstance('deinskript');
echo $output->main();

?>

Die erste Zeile ist da, damit das Skript nicht direkt angesteuert werden kann (aus Sicherheitsgründen).
das require lädt die pi Klasse von deiner extension
entsprechend auch:
$TYPO3_CONF_VARS['FE']['eID_include']['eID_MeineEXT'] = 'typo3conf/ext/meine_ext/deinskript.php';
(der Pfad muss eventuell angepasst werden)

Jetzt musst du noch in der pi Klasse die Methode deineFunktion() implementieren, die einen Parameter bekommt, nämlich deinen get-parameter.

In tx_meineext_pi1.php schreibst du dann z.B.

class tx_meineext_pi1 extends tslib_pibase { 
/*...........
...........
  <dein sonstiger code, main-methode usw. >
........
......
*/
function deineFunktion($q)
{
    //irgendwas
   // in der Variable $q steht dann der in dem skript übergebene Wert drinn
}
}

Andere Möglichkeit:
du kannst die Methode deineFunktion() auch in dem Skript implementieren.
mit den Aufrufen
$feUserObj = tslib_eidtools::initFeUser();
und
tslib_eidtools::connectDB();
kannst du dich mit der DB verbinden.

gruß,
vince.

Rey ·

Hi,
habe es erfolgreich umgesetzt allerdings geht es bei mir nicht auf die XML für die sprachdateien zuzugreifen.
Fatal error: Call to a member function csConv() on a non-object in /srv/www/vhosts/httpdocs/typo3/sysext/cms/tslib/class.tslib_pibase.php on line 957

require_once(PATH_tslib.'class.tslib_pibase.php');
require_once('typo3conf/ext/suche_search/pi1/class.tx_suchesearch_pi1.php');
 
class liveSearchHelper {
 
    public function main() {
		
		$feUserObj = tslib_eidtools::initFeUser();
		$pi_object = new tx_suchesearch_pi1();
		
		$result .= $pi_object-> getResultsOfSearch($getQ);	
		
                return $result;
		}
	}
 
}

Der Jquery Aufruf schaut so aus

?eID=livesearch_eID&L='+qs["L"]+'&q=

Rey ·

Hi,
ich habe nun diesen Codeschnippsel in meine Funktion eingebunden

							$this->LLkey = t3lib_div::GPvar('L');
							
							if($this->LLkey == '') { // Standard
								$this->LLkey = 'default';
							}
							$this->LOCAL_LANG = t3lib_div::readLLfile('EXT:'.$this->extKey.'/pi1/locallang.xml', $this->LLkey);
							$this->LOCAL_LANG_loaded = 1;
							$this->pi_loadLL();

In der Language habe ich

<languageKey index="en" type="array">
			<label index="pi1_title">search</label>
			<label index="pi1_result">Results</label>
		</languageKey>

in der TS für die komplette seoite habe ich en definiert für den Fall das L = 1 ist.
die 1 von L wird auch ausgelesen aber ich bekomme dennoch immer nur die Default ausgaben -.- und nicht die wo in en stehen jemand einen Tipp?

sorry für Doppelpost!

laser ·

Dir fehlt die Zuweisung des Benutzers in der LANG. Ich persönlich habe mich erst vor kurzem gegen eID entschieden und lieber ein eigenen Seiten-Typ definiert, wo ich dann in meiner FE-Datei (piX) die Ajax-Calls steuern kann.

Ich kann dir jetzt nur mein Beispiel für das BE geben, da läuft es ähnlich ab.

// init be user
$BE_USER 	= t3lib_div::makeInstance('t3lib_tsfeBeUserAuth');
$BE_USER->start();			// Object is initialized
$BE_USER->unpack_uc('');


$LANG	= t3lib_div::makeInstance('language');
$LANG->init($BE_USER->uc['lang']);
$LANG->includeLLFile('EXT:deine_extension/mod1/locallang.xml');
$this->LANG = $LANG;

An die Pfade denken