Frontendbenutzer mit eigenem Artikel und Datenspeicherung

Gesperrt
_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Frontendbenutzer mit eigenem Artikel und Datenspeicherung

Beitrag 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
MichFress
Beiträge: 750
Registriert: Mo 5. Jan 2004, 22:32
Wohnort: Bochum
Kontaktdaten:

Beitrag 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.
"Es wird keine Handlung geben, keine Geschichte mit ihrer Versprechung auf einen Anfang und ihrer Hoffnung auf ein Ende." (Andrzej Stasiuk)
_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Beitrag 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.
_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Beitrag 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?
MichFress
Beiträge: 750
Registriert: Mo 5. Jan 2004, 22:32
Wohnort: Bochum
Kontaktdaten:

Beitrag 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...
"Es wird keine Handlung geben, keine Geschichte mit ihrer Versprechung auf einen Anfang und ihrer Hoffnung auf ein Ende." (Andrzej Stasiuk)
_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Beitrag 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!
MichFress
Beiträge: 750
Registriert: Mo 5. Jan 2004, 22:32
Wohnort: Bochum
Kontaktdaten:

Beitrag 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.. ,-)
"Es wird keine Handlung geben, keine Geschichte mit ihrer Versprechung auf einen Anfang und ihrer Hoffnung auf ein Ende." (Andrzej Stasiuk)
_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Beitrag 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 ;)
_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Beitrag 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 ^^
MichFress
Beiträge: 750
Registriert: Mo 5. Jan 2004, 22:32
Wohnort: Bochum
Kontaktdaten:

Beitrag 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.
"Es wird keine Handlung geben, keine Geschichte mit ihrer Versprechung auf einen Anfang und ihrer Hoffnung auf ein Ende." (Andrzej Stasiuk)
_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Beitrag von _wiewo_ »

MichFress hat geschrieben:Böse, böse. Beschäftige dich mal mit SQL Injections.
das mein ich mit hübsch machen :P
rw72
Beiträge: 253
Registriert: Do 22. Jan 2004, 16:24
Kontaktdaten:

Re: Frontendbenutzer mit eigenem Artikel und Datenspeicherung

Beitrag von rw72 »

Hallo,

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

Grüße
Viele Grüße
Ralf
Gesperrt