Seite 1 von 1

Frontendbenutzer mit eigenem Artikel und Datenspeicherung

Verfasst: Mi 4. Feb 2009, 09:32
von _wiewo_
Morgen Community,

komischer Titel, sorry, aber ne bessere, genauere Headline fiel mir gerade nicht ein, wie auch so manch anderes mir nicht einfällt, daher dieser Thread.

Also was ich brauche ist folgendes:
  • Frontendbenutzer (erledigt, ist ja in Conti schon eingebaut :))
    Frontendbenutzer einer bestimmten Gruppe zuweisen (erledigt, ist ja in Conti schon eingebaut :)
    Dieser Frontendbenutzer hat auf genau EINEN Artikel aus einer Bestimmten Kategorie im Frontend Zugriff
    Dort (im Frontend) soll er Daten eingeben/ändern können (in einem Formular)
    Auf einer Seite wo alle Zugriff haben soll es eine Liste aller Frontendbenutzer einer bestimmten Gruppe mit deren Eingegebenen Daten geben.
    Klickt man auf einen davon öffnet sich der Artikel des Frontendbenutzers, nur ohne Formularfelder, sondern ne fertige Seite halt so.
So richtig fehlt mir da gerade der Denkanstoß, wie erledige ich das am besten?

Sinn der Sache ist das ein Kunde von mir Partner hat die er aufgelistet haben möchte, und die Daten dieser Partner sollen sie selber ändern können ohne sich ins Backend einloggen zu müssen.

Hoffe Ihr könnt mir helfen.

lG
Christian Kehres

Verfasst: Mi 4. Feb 2009, 09:46
von MichFress
Du brauchst dafür eigentlich nur drei Artikel mit jeweils einem Modul:
1) ein Formular, dessen Daten mit der Frontenduser-ID in einer Tabelle speichert
2) eine Ausgabe aller FE-User
3) eine Ausgabe eines Datensatzes aus 1), anhand der FE-ID

Recht simpel umzusetzen. Es gab, glaub ich, mal ein Modul für FE-Benutzerprofile oder sowas ähnliches, was man dafür benutzen könnte.

Verfasst: Mi 4. Feb 2009, 09:50
von _wiewo_
MichFress hat geschrieben:Es gab, glaub ich, mal ein Modul für FE-Benutzerprofile oder sowas ähnliches
Das gefällt mir, dann begeb ich mich gleich mal auf die Suche, danke für den Hinweis.

Verfasst: Mi 4. Feb 2009, 10:06
von _wiewo_
find nix ><

hm, naja okay das mit den 3 artikel krieg ich wohl selber irgendwie hin....

kann ich die daten des formulars in der conti db direkt speichern?
hab mich damit bei conti noch nie auseinandergesetzt.

oder sollte ich besser selber ne eigene tabelle erstellen?

EDIT

Also das auslesen der Frontendbenutzer einer bestimmten Gruppe funzt

Code: Alles auswählen

$sGroupName = "Name der Frontend-Gruppe";

$sql = "SELECT users.`idfrontenduser` as idfrontenduser FROM "
."`{$cfg["tab"]["frontendusers"]}` AS users, "
."`{$cfg["tab"]["frontendgroups"]}` AS groups, "
."`{$cfg["tab"]["frontendgroupmembers"]}` AS groupmembers "
."WHERE groups.`idclient` = {$client} "
."AND groups.`groupname` = '{$sGroupName}' "
."AND groupmembers.`idfrontendgroup` = groups.`idclient` "
."AND users.`idfrontenduser` = groupmembers.`idfrontenduser` "
."";
Zurückgegeben wird mir die ID der Frontend-Benutzer die sich in einer bestimmten Frontend-Gruppe befinden. Ob der User aktiv ist und sonen krams interessiert hier erstmal nicht, deswegen habe ich es nicht mit aufgenommen. (Für Verbesserungsvorschläge bin ich offen. Danke)

Was jetzt halt kommen muss ist das Auslesen eines Ausgefüllten Formulares mit einem besimmten "idfrontenduser".

Und da immernoch meine Frage, direkt in die DB von Conti oder besser eigenen Tabelle?

Verfasst: Mi 4. Feb 2009, 11:27
von MichFress
Ich würde eine eigene Tabelle nehmen. Ist update-sicherer...

Es gibt übrigens ein paar Klassen, die dir die Arbeit etwas erleichtern könnten...

Verfasst: Mi 4. Feb 2009, 11:43
von _wiewo_
MichFress hat geschrieben:Ich würde eine eigene Tabelle nehmen. Ist update-sicherer...

Es gibt übrigens ein paar Klassen, die dir die Arbeit etwas erleichtern könnten...
hab da mal was, funzt bis jetzt ganz gut
was jetzt noch fehlt ist das formular zum ausfüllen, oder wenn man halt nen anderer user ist nur zum angucken

Code: Alles auswählen

// auszulesende Frontend-Gruppe festlegen
	$sGroupName = "Kooperationspartner";

	
// Falls die Datenbank noch nicht existiert anlegen
	try{
		$sql = "CREATE TABLE IF NOT EXISTS `coop_forms` ( "
		."`idcoop_forms` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY, "
		."`idfrontenduser` INT( 10 ) NOT NULL, "
		."`Firmenname` VARCHAR( 255 ) NOT NULL "
		.") ENGINE = MYISAM; "
		."";
	
		$db->query($sql);
	} catch (Exception $e) {
		echo 'Shit happens: ' . $e->getMessage() . ': ' . $e->getFile() . ' at line '.$e->getLine() . ' ('.$e->getTraceAsString().')';
	}






// Frontend-Benutzer der oben angegebenen Frontend-Gruppe auslesen
	try{
		$sql = "SELECT users.`idfrontenduser` as idfrontenduser FROM "
		."`{$cfg["tab"]["frontendusers"]}` AS users, "
		."`{$cfg["tab"]["frontendgroups"]}` AS groups, "
		."`{$cfg["tab"]["frontendgroupmembers"]}` AS groupmembers "
		."WHERE groups.`idclient` = {$client} "
		."AND groups.`groupname` = '{$sGroupName}' "
		."AND groupmembers.`idfrontendgroup` = groups.`idclient` "
		."AND users.`idfrontenduser` = groupmembers.`idfrontenduser` "
		."";
		
		$db->query($sql);
		
		// Frontend-Benutzer zum späteren verarbeiten in ein Array speichern
			while ($db->next_record()) $aFrontenduser['Kooperationspartner'][] = array("idfrontenduser" => $db->f("idfrontenduser"));
	} catch (Exception $e) {
		echo 'Shit happens: ' . $e->getMessage() . ': ' . $e->getFile() . ' at line '.$e->getLine() . ' ('.$e->getTraceAsString().')';
	}
	
	
// Formulatdaten der oben ausgelesenen Frontend-Benutzer auslesen
	try{
		for($i = 0; $i < count($aFrontenduser['Kooperationspartner']); $i++)
		{
			$sql = "SELECT forms.* FROM "
			."`coop_forms` AS forms "
			."WHERE forms.`idfrontenduser` = {$aFrontenduser['Kooperationspartner'][$i]['idfrontenduser']} "
			."";
			
			$db->query($sql);
			$db->next_record();
			echo $db->f("Firmenname");
		}
	} catch (Exception $e) {
		echo 'Shit happens: ' . $e->getMessage() . ': ' . $e->getFile() . ' at line '.$e->getLine() . ' ('.$e->getTraceAsString().')';
	}
Kritik? Ich hoffe!

Verfasst: Mi 4. Feb 2009, 12:42
von MichFress
Denk dran, für das Formular und die Ausgabe der Daten schöne Modul-Templates anzulegen... Dafür würde ich zwei Module/Artikel nehmen, so dass sich jeder User auch die eigene Ausgabe-Seite anschauen kann.

Und schon ist dein erstes (?) Modul für die Community fertig.. ,-)

Verfasst: Mi 4. Feb 2009, 12:53
von _wiewo_
erstes? hehe ^^

http://forum.contenido.org/viewtopic.php?t=22480



so hier mal aktueller Stand meiner Entwicklung

Übersicht aller

Code: Alles auswählen

<?php
/**
* Ausgelesen werden IDs von Frontend-Benutzern welche einer bestimmten Frontend-Gruppe angehören.
* Dann wird in einer Tabelle ausgefüllter Formulare genau diese ID eines Frontend-Benutzers gesucht und deren ausgefüllte Werte ausgegeben.
* 
* @version 1.0.0
* @author Christian Kehres
* @copyright webtischlerei.de - Inh. Christian Kehres <www.webtischlerei.de>
* 
* {@internal
* created 2009-02-04
* }
*/

// Konfigurationen
	$sGroupName = "Kooperationspartner"; // auszulesende Frontend-Gruppe festlegen
	$sCoopDetailArtID = "15"; // ID des Artikels welcher Details zu Kooperationspartner ausgibt
	$sTemplate = "coop_list"; // Template festlegen
	$sTabelle = "coop_forms"; // Tabelle in der Datenbank in welcher die Formulare gespeichert sind
	
	
// Template initialisieren und reseten
	$oTemplate = new Template();
	$oTemplate->reset();
	
	
// Falls die Datenbank noch nicht existiert anlegen
	try{
		$sql = "CREATE TABLE IF NOT EXISTS `{$sTabelle}` ( "
		."`id{$sTabelle}` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY, "
		."`idfrontenduser` INT( 10 ) NOT NULL, "
		."`Firmenname` VARCHAR( 255 ) NOT NULL "
		.") ENGINE = MYISAM; "
		."";
	
		$db->query($sql);
	} catch (Exception $e) {
		echo 'Shit happens: ' . $e->getMessage() . ': ' . $e->getFile() . ' at line '.$e->getLine() . ' ('.$e->getTraceAsString().')';
	}






// Frontend-Benutzer der oben angegebenen Frontend-Gruppe auslesen
	try{
		$sql = "SELECT users.`idfrontenduser` as idfrontenduser FROM "
		."`{$cfg["tab"]["frontendusers"]}` AS users, "
		."`{$cfg["tab"]["frontendgroups"]}` AS groups, "
		."`{$cfg["tab"]["frontendgroupmembers"]}` AS groupmembers "
		."WHERE groups.`idclient` = {$client} "
		."AND groups.`groupname` = '{$sGroupName}' "
		."AND groupmembers.`idfrontendgroup` = groups.`idclient` "
		."AND users.`idfrontenduser` = groupmembers.`idfrontenduser` "
		."";
		
		$db->query($sql);
		
		// Frontend-Benutzer zum späteren verarbeiten in ein Array speichern
			while ($db->next_record()) $aFrontenduser['Kooperationspartner'][] = array("idfrontenduser" => $db->f("idfrontenduser"));
	} catch (Exception $e) {
		echo 'Shit happens: ' . $e->getMessage() . ': ' . $e->getFile() . ' at line '.$e->getLine() . ' ('.$e->getTraceAsString().')';
	}
	
	
// Formulardaten der oben ausgelesenen Frontend-Benutzer auslesen und ans Template übergeben
	try{
		for($i = 0; $i < count($aFrontenduser['Kooperationspartner']); $i++)
		{
			$sql = "SELECT forms.* FROM "
			."`{$sTabelle}` AS forms "
			."WHERE forms.`idfrontenduser` = {$aFrontenduser['Kooperationspartner'][$i]['idfrontenduser']} "
			."";
			
			$db->query($sql);
			$db->next_record();
			$oTemplate->set('d', 'idart', $sCoopDetailArtID);
			$oTemplate->set('d', 'idcoop', $db->f("idfrontenduser"));
			$oTemplate->set('d', 'Firmenname', $db->f("Firmenname"));
			$oTemplate->next();
		}
	} catch (Exception $e) {
		echo 'Shit happens: ' . $e->getMessage() . ': ' . $e->getFile() . ' at line '.$e->getLine() . ' ('.$e->getTraceAsString().')';
	}
	
	
	
	
// Template generieren und ausgeben
	$oTemplate->generate('templates/'.$sTemplate.'.html');
?>
Details eines einzelnen

Code: Alles auswählen

<?php
/**
* Ein Formular eines bestimmten Frontend-Benutzers wird ausgelesen.
* Handelt es sich um den Besitzer werden Formularfelder sichtbar, ist es jemand anderes werden die Daten statisch ausgegeben.
* 
* @version 1.0.0
* @author Christian Kehres
* @copyright webtischlerei.de - Inh. Christian Kehres <www.webtischlerei.de>
* 
* {@internal
* created 2009-02-04
* }
*/

// Konfigurationen
	$sTabelle = "coop_forms"; // Tabelle in der Datenbank in welcher dieses Formular gespeichert ist
	$sTemplateS = "coop_detail_static"; // Template für die statische Ausgabe festlegen
	$sTemplateD = "coop_detail_dynamic"; // Template für die dynamische Ausgabe festlegen
	$sIDfrontenduser = $_GET['idcoop']; // ID des frontendusers festlegen
	
	
// Template initialisieren und reseten
	$oTemplate = new Template();
	$oTemplate->reset();
	
	
	
	
// Formulardaten des Frontend-Benutzers auslesen welcher per $sIDfrontenduser übergeben wird
	try{
		$sql = "SELECT forms.* FROM "
		."`{$sTabelle}` AS forms "
		."WHERE forms.`idfrontenduser` = {$sIDfrontenduser} "
		."";
			
		$db->query($sql);
		$db->next_record();
		
		$sTemplate = ($db->f("idfrontenduser") == $auth->auth['uid'] ? $sTemplateD : $sTemplateS);
		
		$oTemplate->set('s', 'Firmenname', $db->f("Firmenname"));
	} catch (Exception $e) {
		echo 'Shit happens: ' . $e->getMessage() . ': ' . $e->getFile() . ' at line '.$e->getLine() . ' ('.$e->getTraceAsString().')';
	}
	
	
	
	
	
// Template generieren und ausgeben
	$oTemplate->generate('templates/'.$sTemplate.'.html');
?>
bin gerade bei der sache mit dem static : dynamic krams,
ein modul-template mit texten, das andere mit formularfeldern

und im mom nur Firmenname, aber wenn das funzt, sollte der Rest ja auch gehen ;)

Verfasst: Mi 4. Feb 2009, 13:13
von _wiewo_
so, jetzt funzt bei mir alles wie gewünscht
werd das jetzt mal alles vervollständigen, schön machen, und dann ab in den modulbereich hier im forum ^^

Verfasst: Mi 4. Feb 2009, 13:16
von MichFress

Code: Alles auswählen

   $sIDfrontenduser = $_GET['idcoop']; // ID des frontendusers festlegen
   
[...]
   
// Formulardaten des Frontend-Benutzers auslesen welcher per $sIDfrontenduser übergeben wird
   try{
      $sql = "SELECT forms.* FROM "
      ."`{$sTabelle}` AS forms "
      ."WHERE forms.`idfrontenduser` = {$sIDfrontenduser} "
      .""; 
Böse, böse. Beschäftige dich mal mit SQL Injections.

Verfasst: Mi 4. Feb 2009, 13:17
von _wiewo_
MichFress hat geschrieben:Böse, böse. Beschäftige dich mal mit SQL Injections.
das mein ich mit hübsch machen :P

Re: Frontendbenutzer mit eigenem Artikel und Datenspeicherung

Verfasst: Mo 23. Mär 2009, 15:09
von rw72
Hallo,

kannst du das Modul mal komplett zur Verfügung stellen?

Grüße