Seite 1 von 1

FrontendUser Plugin (Bild hochladen)

Verfasst: Do 25. Feb 2010, 09:46
von _wiewo_
Guten Morgen Community,

ich habe schon einige FrontendUser Plugins geschrieben wo man dann den Nachnamen, Vornamen etc eintragen kann, ist ja auch keine große Hürde.

Nun möchte ich ein FrontendUser Plugin schreiben wo man ein Logo hochladen kann.
Das Feld "durchsuchen" bekomme ich hin, nun möchte ich das aber nun auch speichern nachdem ich auf den grünen Pfeil gedrückt habe.
Hier haperts bei mir

Code: Alles auswählen

function frontendusers_logo_display()
{
    global $feuser;

    $oLogo = new cHTMLUpload('logo', 40);
    return $oLogo->render();
}

function frontendusers_logo_store($aVariables)
{
    global $feuser;

    if (!array_key_exists('logo', $aVariables))
    {
        return false;
    }
    else
    {
        $feuser->setProperty('stammdaten', 'logo', $aVariables['logo']);
        return true;
    }
}
wie mache ich nur die "frontendusers_logo_store"?

Möchte gerne das die Datei welche ausgewählt wurde in der Dateiverwaltung auftaucht.

Ordnerstruktur => Logos -> (frontenduserid) -> logo.(dateiendung)

den ordner anlegen, okay, machbar, aber... das bild, da steh ich irgendwie echt aufem schlauch.

kann mir da bitte jemand nen tipp geben?

Re: FrontendUser Plugin (Bild hochladen)

Verfasst: Do 25. Feb 2010, 10:45
von conradius
Hm.., vielleicht nicht ganz der gleiche Ansatz vielleicht, aber probier's mal so:

Code: Alles auswählen

// upload new photo to profile
if (isset($_FILES['photo'])) {
	if (in_array(strtolower($_FILES['photo']['type']), $aAllowedFileExtensions) && $_FILES['photo']['size'] <= $iMaxUplFileSize) {
		// check and create friendly filename using the CAPI-function
		cInclude("includes", "functions.upl.php");
		$sFriendlyFileName = uplCreateFriendlyName(basename($_FILES['photo']['name']));					
		$sTargetPath = $sFEUserPhotoDir.$sFriendlyFileName;					
		if (move_uploaded_file($_FILES['photo']['tmp_name'], $sTargetPath)) {
			$sRelativeDestImagePath = str_replace($cfgClient[$client]['upl']['path'], '', $sTargetPath);
			$oFEUser->setProperty("photo", "address", $sRelativeDestImagePath);
			$_REQUEST['photo'] = $sRelativeDestImagePath;
			$aMessages['success'][] = str_replace('{FILENAME}', '<strong>'.$sFriendlyFileName.'</strong>', mi18n("The file {FILENAME} has been saved as your new profile-photo."));
		} else {
			$aMessages['error'][] = mi18n("There was an error uploading the photo. Please check its filesize and filetype and try again.");
		}
	}
}
Ich meine damit: liegt es evtl. nur am Upload- und Kopiervorgang? Aber ich muss gestehen, dass ich sehr selten die Contenido-Api verwende und weiss gerade nicht, ohne zu schauen, was cHTMLUpload bereits alles macht.
Möchte gerne, dass die Datei, welche ausgewählt wurde, in der Dateiverwaltung auftaucht.
Meinst du, ohne dass man die Dateiverwaltung aufrufen muss, die Datei aber trotzdem in con_upl kommt? Hierzu müsstest du vermutlich die contenido/includes/functions.upl.php und daraus die Funktion uplSyncDirectory() benutzen. Schätze ich mal.

Gruss
Conradius

Re: FrontendUser Plugin (Bild hochladen)

Verfasst: Do 25. Feb 2010, 10:46
von xmurrix
Morgen,

an die hochgeladenen Dateien kommst du über die Superglobale $_FILES ran, schau dir mal die contenido/includes/include.upl_files_overview.php ab Zeile 95 an. Die Logik darin kannst du ansatzweise übernehmen. Das Formular sollte das Attribut enctype="multipart/form-data" haben.

Gruß
xmurrix

Re: FrontendUser Plugin (Bild hochladen)

Verfasst: Do 25. Feb 2010, 10:47
von _wiewo_
das Formular sollte... jaha

ich befinde mich im Backend :) Frontend -> User auswählen -> Benutzernamen etc sehen :)

Im Frontend ein Logo hochladen, das ist kein Ding, aber das Backend, wie bekomme ich das dazu? :)

Re: FrontendUser Plugin (Bild hochladen)

Verfasst: Do 25. Feb 2010, 11:41
von conradius
klingt spannend.., kannst du noch etwas mehr beschreiben, wo du anstehst?

Re: FrontendUser Plugin (Bild hochladen)

Verfasst: Do 25. Feb 2010, 12:31
von _wiewo_
Hab mal nen Screenshot gemacht

das Plugin :

Code: Alles auswählen

<?php
function frontendusers_logo_getTitle()
{
    return i18n('Logo', 'frontendusers_logo');
}

function frontendusers_logo_display()
{
    global $feuser;

    $oLogo = new cHTMLUpload('logo', 40);
    return $oLogo->render();
}

function frontendusers_logo_wantedVariables()
{
    return (array('logo'));
}

function frontendusers_logo_canonicalVariables()
{
    return array('logo' => i18n('Logo', 'frontendusers_logo'));
}

function frontendusers_logo_getvalue($sField)
{
    global $feuser;

    if ($sField === 'logo')
    {
        return $feuser->getProperty('stammdaten', 'logo');
    }
}

function frontendusers_logo_store($aVariables)
{
    global $feuser;

    if (!array_key_exists('logo', $aVariables))
    {
        return false;
    }
    else
    {
        $feuser->setProperty('stammdaten', 'logo', $aVariables['logo']);
        return true;
    }
}
?>
hier weiß ich nicht so wirklich wie ich den "frontendusers_logo_store" bereich entwickeln muss (hab da noch nix angepackt, ist so wie wenn ich text speicher)
will soviel boardmittel wie möglich nutzen

das hauptproblem liegt denke ich mal an dem "multipart/form-data",
muss ich hier das form suchen im core und abändern?

in nem frontend hochladen krieg ich ohne probleme hin

Re: FrontendUser Plugin (Bild hochladen)

Verfasst: Do 25. Feb 2010, 12:32
von _wiewo_
huuch, ups, das form steht ja auf "multipart/form-data"

*wand*

ja ich werd mal basteln, man bin ich doof ><

Re: FrontendUser Plugin (Bild hochladen)

Verfasst: Do 25. Feb 2010, 16:29
von _wiewo_
so habe die Speicherung nun fertig

Code: Alles auswählen

function frontendusers_logo_store($aVariables)
{
    global $feuser;
    
    if (!array_key_exists('logo', $aVariables))
    {
        return false;
    }
    else
    {
        $sUploadDir = '../' . $cfg['path']['frontend'] . '/cms/upload/Logos/';
        $sFile = $feuser->getField('idfrontenduser') . '_' . $_FILES['logo']['name'];
        $sUploadFile = $sUploadDir . $sFile;
        
        move_uploaded_file($_FILES['logo']['tmp_name'], $sUploadFile);
        $oUmask = umask(0);
        chmod($sUploadFile, 0777);
        umask($oUmask);
        
        $feuser->setProperty('stammdaten', 'logo', $sFile);
        return true;
    }
}
habe nun das Problem, das ich das Bild nicht öffnen kann "404 Not Found" (daher hab ich die Rechte mal testweise auf 777 gestellt)

in der dateiverwaltung wird sie aufgelistet, aber die vorschau geht nicht,
zieh ich mir die datei per ftp kann ich sie ohne probleme öffnen, jemand ne idee?

Re: FrontendUser Plugin (Bild hochladen)

Verfasst: Do 25. Feb 2010, 17:31
von conradius
Also du hast die Datei mit dem PHP-Skript hochgeladen/geschrieben, PHP kann sie aber nicht auslesen?
Mit dem FTP-Benutzer kannst du die Datei aber lesen...

Klingt irgendwie nicht nach einem Problem bei der Gruppenzugehörigkeit und auf 777 hast du die Datei schon. hm...

Ist es ein Problem mit dem Dateinamen (Sonderzeichen)?

Re: FrontendUser Plugin (Bild hochladen)

Verfasst: Do 25. Feb 2010, 17:34
von _wiewo_
heißt logo.png :)

per ftp ziehen geht ja, ist heile
und liegt mit 777 aufem server

vom server aus kein draufkommen