Zum Inhalt springen

Front End User Registration Stop: setzen

Erstellt am 12. September 2005 · 28 Antworten · letzte Antwort am 28. September 2005 · Seite 1 von 2

Tags: Frontend-Benutzer, Frage

dfluess ·

Super! Das nenne ich Hilfe! 😃
Das mit der Endzeit klappt ja jetzt schon, werde aber mir Deine letzte Idee später noch einmal ansehen.

Mich plagt seit Tagen nämlich noch ein ganz anderes Problem.

Ich möchte für diese Extension einen eigenen Marker einbauen, der mir auf der Website den Bild-Dateinamen des eingelogten Users anzeigt. Dies hat er ja selbst hochgeladen.

Der Name wird schon im Formular ausgegeben, nur eben nicht in einem für mich verwendbaren Format .
Hier mal die betreffende Funktion

		function buildFileUploader($fName, $config, $filenames = array(), $prefix, $markerArray) {
			$HTMLContent = '';
			$size = $config['maxitems'];
			$cmdParts = split('\[|\]', $this->conf[$this->cmdKey.'.']['evalValues.'][$fName]);

			if(!empty($cmdParts[1])) $size = min($size, intval($cmdParts[1]));
			$size = $size ? $size : 1;
			$number = $size - sizeof($filenames);
			$dir = $config['uploadfolder'];
			 
			if ($this->previewLabel ) {
				for($i = 0; $i < sizeof($filenames); $i++) {
					$HTMLContent .= $filenames[$i] . '  <small><a href="' . $dir.'/' . $filenames[$i] . '" target="_blank">' . $this->pi_getLL('file_view') . '</a></small><br />';
				}
			} else {

				for($i = 0; $i < sizeof($filenames); $i++) {


// hier wird der Name eingebaut .. hatte zunächst für meine Zwecke geändert aber dann kann der Benutzer das Bild nicht mehr bearbeiten..				
  					$HTMLContent .= $filenames[$i] . '  <input type="image" src="' . $GLOBALS['TSFE']-" />tmpl->getFileName($this->conf['icon_delete']) . '" name="'.$prefix.'['.$fName.']['.$i.'][submit_delete]" value="1" title="'.$this->pi_getLL('icon_delete').'" alt="' . $this->pi_getLL('icon_delete'). '"' . $this->pi_classParam('icon') . ' onclick=\'if(confirm("' . $this->pi_getLL('confirm_file_delete') . '")) return true; else return false;\' />  <small><a href="' . $dir.'/' . $filenames[$i] . '" target="_blank">' . $this->pi_getLL('file_view') . '</a></small><br />';
					$HTMLContent .= '<input type="hidden" name="' . $prefix . '[' . $fName . '][' . $i . '][name]' . '" value="' . $filenames[$i] . '" />';
				}
				for($i = sizeof($filenames); $i < $number + sizeof($filenames); $i++) {


					$HTMLContent .= '<input name="'.$prefix.'['.$fName.']['.$i.']'.'" type="file" this-="" />pi_classParam('uploader').' /><br />';
				}
			}
			 

			return $HTMLContent;
		}

Ich brauche einfach nur und ohne das ganze drumherum eine nackte Ausgabe des Dateinames der Bilddatei. Ich möchte diesen dann über einen Marker ins Template setzen und zwar so:

<img src="http://meineadresse.de/uploads/tx_srfeuserregister/###USERBILD###" alt="" />

Ich finde einfach keinen Weg :-(
Du hast bestimmt sofort eine Antwort, nach der ich nun schon seit Tagen vergeblich suche...

typotree ·

Hallo Detlef,

ich habe mal folgendes gemacht und es klappte auf Anhieb.
In der Funktion 'buildFileUploader'

if ($this->previewLabel ) {
				for($i = 0; $i < sizeof($filenames); $i++) {
					$HTMLContent .= $filenames[$i] . '  <small><a href="' . $dir.'/' . $filenames[$i] . '" target="_blank">' . $this->pi_getLL('file_view') . '</a></small>><br />';
				}

habe ich in Zeile 3 folgendes eingebaut.

<img src="' . $dir.'/' . $filenames[$i] . '" alt="" height="80" width="80" />

Sieht nun so aus:

if="" this-="" />previewLabel ) {
				for($i = 0; $i < sizeof($filenames); $i++) {
					$HTMLContent .= $filenames[$i] . '  <small><a href="' . $dir.'/' . $filenames[$i] . '" target="_blank">' . $this->pi_getLL('file_view') . '</a></small><img src="' . $dir.'/' . $filenames[$i] . '" alt="" height="80" width="80" /><br />';
				}

Nun wird bei jeder Vorschau, dass Bild angezeigt. ich habe es mal verkleinert (80x80). Willst Du die Vorschau 'View' nicht mehr haben musst Du den <a>-Tag entfernen. Er unterscheidet in der 'Preview' nicht zwischen 'Create', 'Edit' und 'Invite'. Das kannst Du mit den Variablen '$this->cmd' und '$this->cmdKey' abfragen. Die Werte sind 'create', 'edit' und 'invite'.
Ich hoffe das hilft Dir weiter, sonst nochmal posten.

Gruß
Martin

dfluess ·

Das gibts ja garnicht! :o
Ich zerbreche mir Tage lang den Kopf und Du hast die Antwort in ein Paar minuten 😢

Ach wenn ich doch mehr Zeit hätte, dann wäre PHP schon sehr interessant!

Kann ich das denn auch für einen eigenen Marker (###USERBILD###) verwenden?

typotree ·

Hallo Detlef,

ich denke das mit dem Marker geht auch.

$this->markerArray['###Mein_Marker###'] = '<img src="..." alt="" />';

Die Frage ist nur an welcher Stelle Du dies setzt. Probiere es mal innerhalb dieser Funktion aus und schaue ob er Dir diesen Marker im Template ersetzt. Ich habe mal kurz rüber geschaut, die Marker-Ersetzung findet eigentlich nach diesem Funktionsaufruf statt. Sonst noch mal posten.

Gruß
Martin

dfluess ·

Naja, die Marker-Ersetzung findet eigentlich nicht in diesem Funktionsaufruf statt. Ich hatte dies zum Test da rein gesetzt.

heisst original so

function buildFileUploader($fName, $config, $filenames = array(), $prefix) {

Trotzem hab ichs eben mal mit dem Eintrag versucht. Der Marker wird aber leider nicht ersetzt.

typotree ·

Hallo Detlef,

die Funktionen-Reihenfolge ist 'displayEditScreen'->'displayEditForm'->'addFileUploadMarkers'->'buildFileUploader'. Der Marker für alles ist ###UPLOAD_image### oder ###UPLOAD_PREVIEW_image###. In der Funktion 'displayEditForm' wird

$markerArray = $this->cObj->fillInMarkerArray($this->markerArray, $currentArr);

noch vor

$markerArray = $this->addFileUploadMarkers('image', $markerArray, $currentArr);

aufgerufen. deshalb wird Dein Marker wohl nich erkannt. Schau mal was passiert wenn Du die erste Zeile nochmal nach der zweiten einbaust? Dann müsste er erneut die globalen Marker '$this->markerArray' einbauen, vielleicht macht er es aber auch doppelt (oder andere Nebenwirkungen :o )? Ich habe gerade nicht so viel Zeit zum Testen. Musst Du mal ausprobieren. An anderen Stellen in dieser Datei habe ich mit '$this->markerArray' meine Marker gesetzt und eine Ausgabe im Template an verschiedenen Stellen erreicht.

Gruß
Martin

dfluess ·

Das ist erstmal genug Futter, obwohl ich zugeben muss beim ersten Lesen, nicht viel verstanden zu haben.. o.O

Ich werde versuchen mich da rein zu lesen und probieren....

Hab vielen Dank für Deine breitwillige Hilfe!

Viele Grüße, Detlef

dfluess ·

Bin schon wieder da..
hoffentlich fange ich nicht an zu nerven 😉

Ich hab das nach dem zweiten lesen geschnallt und die Zeile kopiert.
Das Ergebnis ist: Siehe Da, der Marker wird richtig ersetzt ABER alle anderen Marker werden nun nicht mehr erkannt.

Vielleicht hast Du ja später noch einmal Zeit.
DANKE

dfluess ·

HALT..

Habe es ander herum gemacht und

	$markerArray = $this->addFileUploadMarkers('image', $markerArray, $currentArr);

ganz nach oben gesetzt.

Jetzt funktioniert es 😃 .. Nebenwirkungen habe ich NOCH nicht gefunden..

typotree ·

Hallo Detlef,

zum Testen, setze Deinen Marker mal direkt vor der ersten Zeile, also mit absoluter src="...". Ungefähr so

$this->markerArray['###USERBILD##'] = '<img src="..." alt="" />;
$markerArray = $this->cObj->fillInMarkerArray($this->markerArray, $currentArr);

Schaue mal ob dann alle wieder angezeigt werden. Die kopierte Zeile natürlich wieder entfernen.

Gruß
Martin

dfluess ·

Das funktioniert auch, will heißen, der Marker wird ersetzt.

Das Bild wird aber nur mit absoluter src angezeigt $filenames[$i] funktioniert nicht.

typotree ·

Hallo Detlef,

so hatte ich vermutet. Die eine Möglichkeit wäre über '$this->dataARR['fieldname'] heranzukommen. Ich weiss gerade nicht wie das in der 'fe_users' heißt. Ansonsten musst Du mal suchen wann und wo er die anderen Variablen setzt #paralyzed#
Ich weiß es ist mühsam. Wenn es gar nicht klappt noch mal posten. Ich kann aber wohl erst am Montag wieder drüber schauen.

Gruß
Martin

dfluess ·

Hallo Martin,

dank Deiner Hilfe funktioniert nun fast alles. Vielen Dank nochmals!!
Aber schließlich taucht nun ein unvorhergesehenes Problem auf das - wenn ich es nicht lösen kann - das ganze Projekt gegen den Baum fahren lässt :-(

Es ist für mich unumgänglich, dass innerhalb des Templates "tx_srfeuserregister_pi1_tmpl" auch normale Typo3-Marker, die Im TSetup definiert sind funktionieren.

Ich habe es bisher zwar fertig gebracht, zusätzliche Marker für statische Einträge in die Class „class.tx_srfeuserregister_pi1.php“ einzubauen. Aber wie ich z.B. Content aus tt_content über einen Marker verwenden kann weis ich nicht.

Kannst Du mir sagen, ob das überhaupt mit relativ wenig Aufwand möglich ist?

Hintergrund ist der:
Ich lasse per PDF-Generator einen persönlichen Flyer des angemeldeten Benutzers erstellen.

Das geschieht über ein entsprechend gestaltetes Design-Template.
Dieses Template soll zum einen über normale Marker mit Typo3-Content gefüllt werden.
Zum anderen aber auch mit den persönlichen Daten des angemeldeten Web-Benutzers.

Das klappt wunderbar, wenn ich die Daten nur an einer Stelle per Plugin einfügen lasse. Denn dies mache ich über mit dem Parameter EDIT. Ich benutze einfach ein entsprechend modifiziertes Template (tx_srfeuserregister_pi1_tmpl) das mir nur die benötigten Informationen anzeigt.

Nun ist es aber so, dass die Angaben kreuz und quer ausgegeben werden müssen.

Ich bin ratlos :-(

typotree ·

Hallo Detlef,

ich habe die Problematik aus Deinem letzten Post nicht völlig verstanden. Kannst Du eventuell ein Beispiel posten? Wenn ich es richtig verstehe dann generierst Du aus einer Seite ein PDF, welches Content und die Userdaten darstellen soll? Vielleicht über ein php_content die Daten des User zum normalen Inhalt ausgeben lassen? Ich warte mal Deine Antwort ab.

Gruß
Martin

P.S
Du findest mich auch direkt per Email unter meinem www.

dfluess ·

Wenn ich es richtig verstehe dann generierst Du aus einer Seite ein PDF, welches Content und die Userdaten darstellen soll?

Richtig :-)

Vielleicht über ein php_content die Daten des User zum normalen Inhalt ausgeben lassen?

Weiß nicht wie das gehen soll. Ich müsste jede Angabe wie Namen, eMail, Userbild usw. an eine bestimmte Stelle im Template platzieren. Dazwischen ist halt immer wieder Content von der Seite..

typotree ·

Hallo Detlef,

mal auf die Schnelle. "page_php_content"-Extension installieren. Text-Content einfügen, danach von "Text" auf "PHP-Script" ändern. Hier PHP-Kode einfügen.
Ein Beispiel zum Testen:

<?php
// Abfrage ob der User eingelogt ist
if($GLOBALS['TSFE']->loginUser) {
  echo 'Dein Name: '.$GLOBALS['TSFE']->fe_user->user['name'];
  echo 'Deine ID: '.$GLOBALS['TSFE']->fe_user->user['uid'];
} else {
  echo 'Niemand eingelogt';
}
?>

Probiere das mal aus. Wenn es klappt kannst Du ja alle anderen Felder auch ansprechen (user['DB-Feld aus fe_users']), Bilder natürlich selbst in img-Tags hüllen.

Gruß
Martin

dfluess ·

mir raucht der Schädel, sitze das Problem nun mind. 10 Stunden aus.. Ich mache für heute Feierabend o.O

Vielen lieben Dank für Deine Mühe, mal sehen was ich morgen auf die Reihe bekomme.

Detlef

dfluess ·

Ich komme doch nicht herum das wenigstens zu probieren..
Und das funktioniert wunderbar! 😉

Ich kann es aber wahrscheilich so leider nicht verwenden, da ich die Ext "PHP Script" nicht als Content-Element nutzen kann, sondern die einzelnen fe_User DB Inhalte des eingeloggten Benutzers per Marker in die Designvorlage einfügen muss.

Gab es da nicht eine Möglichkeit PHP direkt im TSetup zu wrappem?

dfluess ·

Guten Morgen..

Ich bin fündig geworden. DAS hat mir hier sehr geholfen:

page.10.marks {
LOGIN_ADRESSE = RECORDS
LOGIN_ADRESSE.tables = tt_content 
LOGIN_ADRESSE.source = 544
}

Ich habe den Code in einen Systemordner als PHP-Contentelement angelegt und kann dieses nun an jeder beliebigen Stelle über Marker ausgeben lassen. Somit ist mein Problem gelöst. Vielen Dank nochmals für Deine Hilfe :-)