Mein Posting bezog sich auf
xtensionar schrieb
ich kann ja nicht einfach ein neues fenster per js oeffnen lassen und da html code reinschreiben, da ich ja so keinen db-zugriff habe (wenn ich richtig liege).
Damit du siehst wie man aus einem Popup heraus DB-Zugriff bekommt.
Das Popup kannst du wie du schon selbst rausgefunden hast, per typolink öffnen.
Ich weiß aber nicht, ob wir vom selben typolink sprechen: für das typolink, das ich meine braucht man kein Tutorial. Die Anwendung geht ganz klar aus der Doku (https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Functions/Typolink.html)raus, zumal auch ein Beispiel dabei ist.
Für deinen Anwendungszweck ist wohl der Parameter "JSwindow_params" relevant.
Also,
ich sehe da ja überhaupt kein Problem, da du ja deine Extension ja per JS-Befehl wieder aufrufen kannst. Die übermittelten Parameter lassen das Script dann die gewünschte Ausgabe tätigen. GGf. musst du den Linkbefehl so erweitern, dass er dir einen bestimmten Seitentyp öffnet, der bsp. keine Navigation oder ähnliches beinhaltet. Nur den reinen "Content"... Dies ist hier mit einem unschönen Workaround gemacht, da dies in diesem Falle leider nicht anders funktionierte... (Z.31 ff)
In einem meiner Projekte habe ich das so realisiert...
/**
* Returns JS Window A TAG (from tt_address)
*
* @access public
* @param int ID of User
* @return string Name of searched user
*/
function GetContactNameByIdinJsWindow($id) {
$name = $this->GetContactNameById($id);
if ($name != $this->pi_getLL('nodata')) {
/**
* Build link
*
* Attention:
* The used name is just one placeholder. This placeholder is replaced on line 157
*/
$link = $this->pi_linkToPage(
'###NAME###',
$GLOBALS["TSFE"]->id,
'',
array($this->prefixId . '[userdetails]' => $id)
);
// convert link into JS Window tag
$ret = $this->pi_openAtagHrefInJSwindow(
$link,
'',
'width=360, height=333, status=0, menubar=0, scrollbars=1, resizable=0'
);
// code to link to a special site type (naughty)
$link = str_replace(
$GLOBALS["TSFE"]->id,
$GLOBALS["TSFE"]->id . '.' . $this->onlyContentPageType,
$link
);
// not very nice nor valid, but the only way to make the popup open with correct interpreted vars
$ret = str_replace('&', '&', $ret);
$ret = str_replace('###NAME###', $name, $ret);
} else {
// just show the "no entry" string, without a link
$ret = $name;
}
return $ret;
}
In Zeile 39 musst du das erste "&" durch das entsprechende htmlentities ersetzen, da es sonst mit einigen Browsern zu Schwierigkeiten kommt und die Parameter nicht korrekt interpretiert werden.
HTH a lil' bit
Lukas
mm..ich bin in typo3 absoluter vollnoob ;-(, darum noch ein paar fragen:
- kann ich einen link auf eine php-file generieren (das sollte gehn)
- kann ich von der php-file dann auf die db zugreifen? (denke das ist ein problem)
- ich muss ja auf irgendetwas verlinken, ist das dann eine in typo3 angelegte seite mit einer ID?
- kann ich nicht einer funktion eine gefuellte $content-variable mitgeben, welche mir dann den inhalt in einem popup ausgibt?
das sind ziemlich grundsaetziche fragen, allerdings fehlt mir noch irgendwie das verstaendnis fuer typo3. die bisherige extension war eigentilch komplett php basiert...
waere dankbar fuer antworten!
- kann ich einen link auf eine php-file generieren (das sollte gehn)
ja, siehe Funktion typolink
xtensionar schrieb- kann ich von der php-file dann auf die db zugreifen? (denke das ist ein problem)
xtensionar schriebja, das php zeuch und der db zugriff ist nicht das problem.
Was jetzt? Problem oder nicht? wenn ja, siehe showpic.php
- ich muss ja auf irgendetwas verlinken, ist das dann eine in typo3 angelegte seite mit einer ID?
Ich habe keine Ahnung auf was du verlinken willst. Wenn du auf google.de verlinke willst, brauchst du keine id
- kann ich nicht einer funktion eine gefuellte $content-variable mitgeben, welche mir dann den inhalt in einem popup ausgibt?
ja, siehe Funktion printContent() in Zeile 223
oki, erst mal danke
d.h. ich koennte es folgendermassen loesen:
mache mit typolink ein popup, index ich auf die file popup.php verweise.
in der popup.php ist es kein problem einen db-zugriff zu haben?
dann den ganzen html-code in die content-variable schreiben und mit printContent raushauen.
ist das prinzip richtig?
thx!
..und noch ne frage:
warum muss ich denn typolink nehmen? ich koennte doch auch in meinem php file gleich javascript schreiben und damit mein popup aufrufen, oder nicht? macht das n unterschied beim db-zugriff?
danke!
hi nochmal,
mir ist noch eine andere loesung eingefallen
<script language="JavaScript1.2" type="text/javascript">
<!--
function popup(content) {
var w = 800;
var h = 100;
var x = 100;
var y = 100;
var popupWindow = window.open("", "", "width="+w+",height="+h+",left="+x+",top="+y+",screenX="+x+",screenY="+y);
popupWindow.document.write(content);
}
-->
</script>
dann kann ich in der datei (auf welche ich typo3 db zugriff habe) popup("<html>...</html>") aufrufen und dieses beschreiben. ganz ideal ist das aber leider auch nicht, da der titel je nach browser unterschiedlich aussieht (im FF: "about:").
ist es moeglich auch im popup db zugriff (d.h. zugriff auf die variable $GLOBALS['TYPO3_DB']) zu bekommen? das waere die sauberste loesung..?
danke!
ist es moeglich auch im popup db zugriff (d.h. zugriff auf die variable $GLOBALS['TYPO3_DB']) zu bekommen? das waere die sauberste loesung..?
Wie oft stellst du diese Frage noch????
Liest du eingentlich meine Antworten???
ja, ich geb mein bestes, ich sollte die showpic.php anschauen.
reicht es wenn ich
define('PATH_thisScript',str_replace('//','/', str_replace('\','/', (php_sapi_name()=='cgi'||php_sapi_name()=='isapi' ||php_sapi_name()=='cgi-fcgi')&&($_SERVER['ORIG_PATH_TRANSLATED']?$_SERVER['ORIG_PATH_TRANSLATED']:$_SERVER['PATH_TRANSLATED'])? ($_SERVER['ORIG_PATH_TRANSLATED']?$_SERVER['ORIG_PATH_TRANSLATED']:$_SERVER['PATH_TRANSLATED']):($_SERVER['ORIG_SCRIPT_FILENAME']?$_SERVER['ORIG_SCRIPT_FILENAME']:$_SERVER['SCRIPT_FILENAME']))));
define('PATH_site', dirname(PATH_thisScript).'/');
define('PATH_t3lib', PATH_site.'t3lib/');
require_once(PATH_t3lib.'class.t3lib_db.php');
$TYPO3_DB = t3lib_div::makeInstance('t3lib_DB');
im der popup.php inkludiere? ist dann $GLOBALS['TYPO3_DB']) bekannt?
danke!
Ja, das schaut gut aus.
Da ich es aber noch nicht ausprobiert habe, mußt du es halt testen obs geht.
bin dabei, wenns geht post ich nochmal alles.. thx!
soo, wie versprochen, fuer alle die das selbe problem haben.
es geht darum: wie kann ich auf die db zugreifen, wenn ich nicht mehr in der "typo3 umgebung" bin. das passiert, wenn man z.b. ein popup aufmacht (das geht einfach mit javascript, ohne typolink oder sonstigen schnickschnack).
der code, der inkludiert werden muss:
error_reporting (E_ALL ^ E_NOTICE);
// ***********************
// Paths are setup
// ***********************
define('PATH_thisScript',str_replace('//','/', str_replace('\\','/', php_sapi_name()=='xcgi'||php_sapi_name()=='isapi'||php_sapi_name()=='cgi-fcgi' ? $HTTP_SERVER_VARS['PATH_TRANSLATED']:$HTTP_SERVER_VARS['SCRIPT_FILENAME'])));
define('PATH_typo3', dirname(dirname(dirname(dirname(dirname(PATH_thisScript))))).'/typo3/');
define('PATH_site', dirname(PATH_typo3).'/');
define('PATH_tslib', PATH_site.'tslib/');
define('PATH_t3lib', PATH_typo3.'t3lib/');
define('PATH_typo3conf', PATH_site.'typo3conf/');
define('TYPO3_MODE','BE');
require(PATH_t3lib.'class.t3lib_div.php');
require(PATH_t3lib.'class.t3lib_extmgm.php');
require(PATH_t3lib.'config_default.php');
require(PATH_typo3conf.'localconf.php');
require_once(PATH_tslib.'class.tslib_fe.php');
require_once(PATH_t3lib.'class.t3lib_userauth.php');
require_once(PATH_tslib.'class.tslib_feuserauth.php');
require_once(PATH_t3lib.'class.t3lib_tstemplate.php');
require_once(PATH_t3lib.'class.t3lib_page.php');
require_once(PATH_tslib.'class.tslib_content.php');
$typoVersion = t3lib_div::int_from_ver($GLOBALS['TYPO_VERSION']);
if($typoVersion >= 3006000) require_once(PATH_t3lib.'class.t3lib_cs.php'); // are we are with Typo3 3.6.0?
if (!defined ('TYPO3_db')) die ('The configuration file was not included.');
if($typoVersion >= 3006000) { // are we are with Typo3 3.6.0?
require_once(PATH_t3lib.'class.t3lib_db.php');
$TYPO3_DB = t3lib_div::makeInstance('t3lib_DB');
}
require_once(PATH_t3lib.'class.t3lib_timetrack.php');
$GLOBALS['TT'] = new t3lib_timeTrack;
// ***********************************
// Creating a fake $TSFE object
// ***********************************
$TSFEclassName = t3lib_div::makeInstanceClassName('tslib_fe');
$id = isset($HTTP_GET_VARS['id'])?$HTTP_GET_VARS['id']:0;
$GLOBALS['TSFE'] = new $TSFEclassName($TYPO3_CONF_VARS, $id, '0', 1, '', '','','');
$GLOBALS['TSFE']->connectToMySQL();
$GLOBALS['TSFE']->initFEuser();
$GLOBALS['TSFE']->fetch_the_id();
$GLOBALS['TSFE']->getPageAndRootline();
$GLOBALS['TSFE']->initTemplate();
$GLOBALS['TSFE']->tmpl->getFileName_backPath = PATH_site;
$GLOBALS['TSFE']->forceTemplateParsing = 1;
$GLOBALS['TSFE']->getConfigArray();
moeglicherweise sind paar zeilen ueberfluessig, aber es funktioniert ;-)
thx an alle fuer die hilfe...
Hallo xtensionar,
ich stehe vor dem selben Problem und habe deine Lösung ausprobiert.
Ich erhalte allerdings die Meldung
localconf.php is not found!
Woran kann das liegen?
Grüße
Jehu