Zum Inhalt springen

Problem bei Constants Editor

Erstellt am 27. Juli 2004 · 13 Antworten · letzte Antwort am 20. Januar 2006

Tags: Frage

Zed412 ·

Hy Morden,

danke für den raschen Tipp, aber daran lag es leider auch nicht.

Wenn ich die Variable mittels Debug abfrage erhalte ich nur | debug |, wenn ich den Wert der Variable direkt in meine Funktion eintrage (also z.B. $maxFile=4500) erhalte ich den korrekten Wert.

Kann es sein, dass ich die Variable bereits in der Klasse und nicht erst in der Funktion deklarieren muss?

lg

Zed 8-)

Morden ·

Funktion reicht.

Aber versuchs mal mit zwei Variablen.

$maxFile1temp=$this->conf["maxFile1"];
$maxFile1=$maxFile1temp*8*1024;

Vielleicht nimmt er die Operation nicht?!

Hegi ·

wird wohl eher daran liegen, dass du generell nicht auf die Var in php zugreifen kannst.

versuch mal einzugrenzen:

iim Setup den wert nicht aus constants sondern hart reinschreiben
-wenn dann in php der wert ankommt liegt es an varbelegung vom constant zum setup.

Zed412 ·

Hy Leute,

vorab einmal großes Danke für Eure Tipps und Ratschläge!!!
Ich bin zwar danke Eurer Hilfe einen Schritt weiter, allerdings läuft es noch nicht so, wie es sollte. Um Fehlerquellen auszuschließen habe ich die Multiplikationen entfernt.

Dann habe ich den Vorschlag von maxhb versucht: $maxFileSize=intval($this->conf["maxFile1"]); - das Komische daran ist, dass ich vom Debug den Wert 0 zurück bekomme? Aus irgendeinem Grund wird der Wert der Variablen nicht übernommen (auch nicht, wenn der Wert hart im Setup steht - THX an Hegi).

Versuchsweise habe ich einmal $maxFile1 außerhalb der Funktion, sprich in der Klasse deklariert. Gab zwar eine Fehlermeldung, aber es hat Funktioniert.
Bin weiterhin für jeden Tipp sehr dankbar, da es anscheinend ein Ding der Unmöglichkeit ist in Typo3 eine dumme Variable zu übernehmen 🙁 ...

lg

Zed 8-)

boonkerz ·

Hallo

Probier mal follgendes:

ext_typoscript_constants.txt:

plugin.p2_formmail_maxuploadlimit >
plugin.p2_formmail_maxuploadlimit {
   # cat=plugin.p2_formmail_maxuploadlimit//; type=int+; label=Maximum upload limit: Here you can define the maximum upload limit in KB. 
maxFile1 = 500 
}

ext_typoscript_setup.txt:

plugin.tx_p2_formmail_maxuploadlimit_pi1 {
maxFile1 = {$plugin.p2_formmail_maxuploadlimit.maxFile1} 
}

der rest ist richtig.

Must mal schauen ob diese bezeichnung:plugin.tx_p2_formmail_maxuploadlimit_pi1 richtig ist.

MFG

Zed412 ·

Hy Leute,

leider läuft die Extension immer noch nicht und debug gibt immer noch 0 für meine Variable aus. Der Gedanke der Extension war folgender: Beim Mail Formular (formmail) gibt es eine KB Beschränkung. Diese Beschränkung wollte ich durch eine Variable ersetzen, die wiederum im Constants Editor gesetzt werden kann. Wie bereits beschrieben funktioniert es, wenn ich den Wert der Variablen direkt in die Extension eintrage - ansonsten nicht.

Hier (vorsichtshalber) der Code meiner formmail:
Ist alles gleich wie das Original, bis auf das Setzen der Variable und if (filesize($theFile) < $maxFile1).

<?php

class ux_t3lib_formmail extends t3lib_formmail {
    
	function start($V,$base64=1)	{

        //$maxFileSize="4096000";
        //$maxFile1=$this->conf['maxFile1'];
        $maxFile1=intval($this->conf["maxFile1"])*8*1024;

		if ($base64 && !$V['quoted_printable'])	{$this->useBase64();}

		if (isset($V['recipient']))	{
				// Sets the message id
			$this->messageid = '<'.md5(microtime()).'@domain.tld>';

			$this->subject = ($V['subject']) ? $V['subject'] : 'Formmail on '.t3lib_div::getIndpEnv('HTTP_HOST');
			$this->from_email = ($V['from_email']) ? $V['from_email'] : (($V['email'])?$V['email']:'');
			$this->from_name = ($V['from_name']) ? $V['from_name'] : (($V['name'])?$V['name']:'');
			$this->replyto_email = ($V['replyto_email']) ? $V['replyto_email'] : $this->from_email;
			$this->replyto_name = ($V['replyto_name']) ? $V['replyto_name'] : $this->from_name;
			$this->organisation = ($V['organisation']) ? $V['organisation'] : '';
			$this->priority = ($V['priority']) ? t3lib_div::intInRange($V['priority'],1,5) : 3;

				// Auto responder.
			$this->auto_respond_msg = (trim($V['auto_respond_msg']) && $this->from_email) ? trim($V['auto_respond_msg']) : '';

			$Plain_content = '';
			$HTML_content = '<table border="0" cellpadding="2" cellspacing="2">';

				// Runs through $V and generates the mail
			if (is_array($V))	{
				reset($V);
				while (list($key,$val)=each($V))	{
					if (!t3lib_div::inList($this->reserved_names,$key))	{
 						$space = (strlen($val)>60)?chr(10):'';
						$val = (is_array($val) ? implode($val,chr(10)) : $val);
						$Plain_content.= strtoupper($key).':  '.$space.$val."
".$space;
						$HTML_content.='<tr><td bgcolor="#eeeeee"><font face="Verdana" size="1"><b>'.strtoupper($key).'</b></font></td><td bgcolor="#eeeeee"><font face="Verdana" size="1">'.nl2br(HTMLSpecialChars($val)).'&nbsp</font></td></tr>';
					}
				}
			}
			$HTML_content.= '</table>';


			if ($V['html_enabled'])	{
				$this->setHTML($this->encodeMsg($HTML_content));
			}
			$this->addPlain($Plain_content);

			for ($a=0;$a<10;$a++)	{
				$varname = 'attachment'.(($a)?$a:'');
				$theFile = t3lib_div::upload_to_tempfile($GLOBALS['HTTP_POST_FILES'][$varname]['tmp_name']);
				$theName = $GLOBALS['HTTP_POST_FILES'][$varname]['name'];

				if ($theFile && @file_exists($theFile))	{
					if (filesize($theFile) < $maxFile1)	{
						$this->addAttachment($theFile, $theName);
					}
				}
				t3lib_div::unlink_tempfile($theFile);
			}

			$this->setHeaders();
			$this->setContent();
			$this->setRecipient($V['recipient']);
			if ($V['recipient_copy'])	{
				$this->recipient_copy = trim($V['recipient_copy']);
        
        t3lib_div::debug($maxFile1);
			}
		}
	}


  
	/**
	 * Adds an attachment to the mail
	 *
	 * @param	string		The absolute path to the file to add as attachment
	 * @param	string		The files original filename (not necessarily the same as the current since this could be uploaded files...)
	 * @return	boolean	        True if the file existed and was added.
	 * @access private
	 */
	function addAttachment($file, $filename)	{
		$content = $this->getURL($file);		// We fetch the content and the mime-type
		$fileInfo = $this->split_fileref($filename);
		if ($fileInfo['fileext'] == 'gif')	{$content_type = 'image/gif';}
		if ($fileInfo['fileext'] == 'bmp')	{$content_type = 'image/bmp';}
		if ($fileInfo['fileext'] == 'jpg' || $fileInfo['fileext'] == 'jpeg')	{$content_type = 'image/jpeg';}
		if ($fileInfo['fileext'] == 'html' || $fileInfo['fileext'] == 'htm')	{$content_type = 'text/html';}
		if (!$content_type) {$content_type = 'application/octet-stream';}

		if ($content)	{
			$theArr['content_type']= $content_type;
			$theArr['content']= $content;
			$theArr['filename']= $filename;

			$this->theParts['attach'][]=$theArr;
			return true;
		} else { return false;}
	}
}


?>

Großes THX für Eure Tipps!!!

lg

Zed 8-)

Hegi ·

class myclass{

var $conf;

function start($v,$base64=1,$conf){
$this->conf = $conf;

...
$test=$this->conf['maxfile'] *y;
....
}

........und........

function start($V,$base64=1,$conf){

...
$test= $conf['maxfile'] *x;
....
}

...funktioniert auch......dann ist aber in anderen function
der Class $conf nicht sichtbar

[/b]

Zed412 ·

Hy Hegi,

danke für Deine Lösungsvorschläge, aber leider ergibt sich daraus ein weiteres Problem o.O Wenn ich nämlich $conf in die function einbaue, dann muss ich der function jedesmal einen dritten Wert übergeben. Ich weiß allerdings nicht wo und wie die function (noch) verwendet wird und so erhalte ich nur

Warning: Missing argument 3 for start() in

Hast Du evtl. einen Vorschlag, wie ich das Problem lösen könnte?

THX and lg

Zed 8-)

Hegi ·

also dann mal ganz von vorn....

das PHPscript wird mit einem Object von typ 'USER' ins TS eingebunden.

-----------------------------------------------------
tmp.cont=USER
tmp.cont {
userFunc=tx_tplogin_pi1->main
SoapCl=https://xxx.tpip.net/soap/server.php
Monitoring=0
Alternatetemp={$plugin.tp_Login.TempAlternate}

}

#content laden
page.50 < tmp.cont
---------------------------------------------------------

wichtig ist, PHP_funktion über das USER objekt im TS
auzurufen

in obigen fall wird ein temp benutzt, es funtioniert aber auch direkt mit einem Pageobj. also

page.20=USER
page.20.userFunc=tx_tplogin_pi1->main
page.20.SoapCl=https://xxx.tpip.net/soap/server.php
page.20.Monitoring=0
page.20.Alternatetemp={$plugin.tp_Login.TempAlternate}

=

page.20=USER
page.20{
userFunc=tx_tplogin_pi1->main
SoapCl=https://xxx.tpip.net/soap/server.php
Monitoring=0
Alternatetemp={$plugin.tp_Login.TempAlternate}

}

die ....SoapCl, Monitoring, Alternatetemp sind variablen die ich dann in in meiner funktion über $conf['SoapCl'] usw.
auslesen kann.
da kannst du auch die anderen übergabe werte mit reinschreiben (V, Base_64)

deine Klasse sieht dann so aus:

<?php

class tx_tplogin_pi1 {

function main($content,$conf) {

$erg = $conf['SoapCl']);

..........

return;

}

}//end class

?>

Zed412 ·

Hy Hegi,

großes THX für Deine ausführliche Anleitung - ich hab's zwar immer noch nicht zum Laufen gebracht, aber ich denke, dass ich es anhand Deiner Anleitung schon noch schaffen werde.
Wenn nicht wird's ein Punkt für die Typo3 Tour 😃

lg

Zed 8-)

Solander ·

Gut, das Thema ist bereits was älter, aber da es nicht abschließend gelöst wurde, packe ich meinen Lösungsansatz mal hinten dran.

Wollte ebenfalls eine Variable aus dem TS in meiner eigenen Extension auslesen, was in keinster Weise geklappt hat bei folgendem TS:

plugin.tx_uploadset_pi1 {
                        Category = 1
                        ......
}

Egal was ich gemacht habe, bei Aufruf von $variable = $conf["Category"] habe ich nie einen Wert erhalten.

Meine Lösung:

plugin.tx_uploadset_pi1.Category = 1
plugin.tx_uploadset_pi1 {
                        ......
}

Zieht man die Definition des Wertes aus dem geklammerten Block raus und setzt sie vor den Rest des Skripts, dann läuft es einwandfrei und jegliche Variable wird ohne zicken gelesen. Der Grund hierfür ist mir zwar schleierhaft, weil es ja auf das selbe hinausläuft, aber bei mir geht es ausschließlich auf diese Tour. Ich denke, dass dann auch die Definition über Constants Editor ginge mit Abfrage im TypoScript, habe das aber noch nicht getestet.

Vielleicht hilft das ja wem, der genauso in eigenen Extensions rumstochert und das halbe Internet nach "Constants, extension, php ..." abgesucht hat 🙂