Profil / Persönliche Daten...

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 30. Mär 2006, 14:12

Ja, schon sehr gut. Nun noch eine "Action" abfragen. Wenn Du im Template noch eine Zeile für MESSAGE ergänzt (siehe Code) kannst Du auch eine Fehlermeldung ausgeben. Unten findest Du noch einen Alternativen, flexiblen Template-Aufbau.

Code: Alles auswählen

<?php 
cInclude('classes', 'class.frontend.users.php'); 
cInclude('classes', 'class.template.php'); 

$oFEUser = new FrontendUser; 
$oFEUser->loadByPrimaryKey($auth->auth["uid"]); # Ist ja nur einer und der muss existieren, da nur in geschütztem Bereich sinnvoll

$sMessage = "&nbsp;";

if ($_REQUEST["action"] == "save") {
   # Daten überprüfen
   if (!isset($_REQUEST["Titel"]) || strlen($_REQUEST["Titel"] > 50)) {
      $sMessage = mi18n("Please specify a titel with less than or equal 50  characters");
   } else if (...) {
   } else if (!is_numeric($REQUEST["Postleitzahl"]) || strlen($REQUEST["Postleitzahl"]) > 5) {
      $sMessage = mi18n("Please specify a correct zip code");
   } else {
      $oFEUser->setProperty("titel", "address", $_REQUEST["Titel"]);
      ...
      $oFEUser->store(); # weiss gar nicht, ob das nötig ist
   }
} else {
   # Daten aus DB übernehmen und in REQUEST übertragen
   $_REQUEST["Titel"] = $oFEUser->getProperty("titel", "address");
   ...
}

$oTpl = new Template; 
$oTpl->reset(); 
 
#$oTpl->set('d', 'NAME',  $oFEUser->get("username"));
$oTpl->set('d', 'TITEL',   $_REQUEST["Titel"]); 
$oTpl->set('d', 'VORNAME',   $_REQUEST["Vorname"]);
#... usw. ... Dieses Vorgehen "rettet" die Eingaben im Fehlerfalle
$oTpl->next();

# Bin persönlich ein Fan von "Wenn Ausgabe, dann alles, kein Mischmasch". Das "\n" fügt einen Zeilenumbruch ein.
echo '<form method="post" action="front_content.php?idcatart='.$idcatart.'" name="frontend_save_user" id="frontend_save_user"><input type="hidden" name="action" value="save">'."\n";

echo $oTpl->generate('templates/feuser-edit.html'); 

echo '</form>'."\n";
?>
Das wäre es schon. Du könntest übrigens auch noch flexibler rangehen:

Das wäre das Template:

Code: Alles auswählen

<table width="" height="" cellpadding="3" cellspacing="0" border="0"> 
      <tr>
          <td class="textklein" colspan="2">{MESSAGE}</td>
      </tr>
<!-- BEGIN:BLOCK -->    
      <tr>
          <td class="textklein"><strong>{FIELDTITLE]</strong></td>
          <td class="textklein"><input type="{FIELDTYPE}" name="{FIELDNAME}" id="{FIELDID}" value="{FIELDVALUE}"></td>
      </tr> 
<!-- END:BLOCK --> 
</table>
Dieser Teil:

Code: Alles auswählen

$oTpl = new Template; 
$oTpl->reset(); 
 
#$oTpl->set('d', 'NAME',  $oFEUser->get("username"));
$oTpl->set('d', 'TITEL',   $_REQUEST["Titel"]); 
$oTpl->set('d', 'VORNAME',   $_REQUEST["Vorname"]);
#... usw. ... Dieses Vorgehen "rettet" die Eingaben im Fehlerfalle
$oTpl->next();
würde dann so aussehen:

Code: Alles auswählen

$oTpl = new Template; 
$oTpl->reset(); 
 
$oTpl->set('s', 'MESSAGE', $sMessage);

$oTpl->set('d', 'FIELDTITLE', mi18n("Titel"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Titel');
$oTpl->set('d', 'FIELDID', 'titel');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Titel"]);
$oTpl->next();

$oTpl->set('d', 'FIELDTITLE', mi18n("Vorname"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Vorname');
$oTpl->set('d', 'FIELDID', 'vorname');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Vorname"]);
$oTpl->next();

... usw. ...
Ich würde übrigens für die Feldnamen englische Bezeichnungen mit Typkennung verwenden (e.g. txtTitle, ckbGender). Das müsste man dann bei FIELDTYPE und bei den jew. $_REQUEST berücksichtigen.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Uwe
Beiträge: 258
Registriert: Mo 30. Jun 2003, 16:05
Wohnort: Konstanz
Kontaktdaten:

Beitrag von Uwe » Do 30. Mär 2006, 18:19

Wow, erstma riesiges Danke. Bin gerade am Einbau, werde heute leider nicht fertig, da ich wohl ein Schnitzer eingebaut habe. Melde mich aber an dieser Stelle wieder.

Für die FEuser-Liste habe ich ein Modul mit Input (Auswahl der FE-Gruppe) gebaut, was sagste dazu?

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname  :      Frontenduser-Liste
* Author(s)   :     Uwe Köthen, pixelparts
* Copyright   :     pixelparts, Uwe Köthen
* Created     :     30.03.2006
************************************************/

$db = new DB_Contenido;
$sql = "SELECT groupname, idfrontendgroup FROM " .
	  $cfg["tab"]["frontendgroups"];

$db->query($sql);

echo 'Gruppe auswählen: <select name="CMS_VAR[1]" size="1">';
	while ($db->next_record()) {
			if ($db->f("idfrontendgroup")=="CMS_VALUE[1]") {
				echo '<option value="'.$db->f("idfrontendgroup").'" selected="selected">'.$db->f("groupname").'</option>';
			} else {
				echo '<option value="'.$db->f("idfrontendgroup").'">'.$db->f("groupname").'</option>';
			}
		}
echo '</select>';

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname  :      Frontenduser-Liste
* Author(s)   :     Uwe Köthen, pixelparts, HerrB
* Copyright   :     pixelparts, Uwe Köthen
* Created     :     30.03.2006
************************************************/

cInclude('classes', 'class.frontend.users.php');
cInclude('classes', 'class.template.php');

$oTpl = new Template;
$oTpl->reset();

$oFEUsers = new FrontendUserCollection;
$oFEUsers->link("FrontendGroupMemberCollection");
$oFEUsers->setWhere("FrontendGroupMemberCollection.idfrontendgroup", $CMS_VALUE[1]);
$oFEUsers->setOrder("FrontendUserCollection.username");
$oFEUsers->query();

while ($oFEUser = $oFEUsers->next()) {
   #$oTpl->set('d', 'NAME',  $oFEUser->get("username"));
   $oTpl->set('d', 'TITEL',   $oFEUser->getProperty("titel", "address"));
   $oTpl->set('d', 'VORNAME',   $oFEUser->getProperty("vorname", "address"));
   $oTpl->set('d', 'NACHNAME',   $oFEUser->getProperty("nachname", "address"));
   $oTpl->set('d', 'ORT',   $oFEUser->getProperty("ort", "address"));
   $oTpl->set('d', 'TELEFON',   $oFEUser->getProperty("telefon", "address"));
   $oTpl->set('d', 'MOBIL',   $oFEUser->getProperty("mobil", "address"));
   $oTpl->set('d', 'EMAIL',   $oFEUser->getProperty("email", "address"));
   $oTpl->set('d', 'HOMEPAGE',   $oFEUser->getProperty("homepage", "address"));   
   
   $oTpl->next();
}

?>
<table width="100%" height="25" cellpadding="3" cellspacing="0" border="0">

<?php
echo $oTpl->generate('templates/feuser-liste.html');
?>
</table>
Viele Grüsse, Uwe

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 30. Mär 2006, 19:11

Schon sehr schön, noch ein wenig Feinschliff (sonst gibt es Probleme, wenn Umlaute oder andere Sprachen für die Gruppenbezeichnung verwendet werden oder keine Konfiguration durchgeführt wurde):

Nur der relevante Teil:
Input:

Code: Alles auswählen

************************************************/ 

cInclude('classes', 'class.frontend.groups.php');

$oFEGroups = new FrontendGroupCollection; 
$oFEGroups->setOrder("groupname"); 
$oFEGroups->query();

echo 'Gruppe auswählen: <select name="CMS_VAR[1]" size="1">'; 
   while ($oFEGroup = $oFEGroups->next()) { 
         if ($oFEGroup->get("idfrontendgroup") == "CMS_VALUE[1]") { 
            echo '<option value="'.$oFEGroup->get("idfrontendgroup").'" selected="selected">'.$oFEGroup->get("groupname").'</option>'; 
         } else { 
            echo '<option value="'.$oFEGroup->get("idfrontendgroup").'">'.$oFEGroup->get("groupname").'</option>'; 
         } 
      } 
echo '</select>';
Output:

Code: Alles auswählen

<?php 
/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname  :      Frontenduser-Liste 
* Author(s)   :     Uwe Köthen, pixelparts, HerrB 
* Copyright   :     pixelparts, Uwe Köthen 
* Created     :     30.03.2006 
************************************************/ 

cInclude('classes', 'class.frontend.users.php'); 
cInclude('classes', 'class.template.php');

$lGroupID = "CMS_VALUE[1]";
if (!is_numeric($lGroupID)) {
   $lGroupID = 0;
}

$oTpl = new Template; 
$oTpl->reset(); 

$oFEUsers = new FrontendUserCollection; 
$oFEUsers->link("FrontendGroupMemberCollection"); 
$oFEUsers->setWhere("FrontendGroupMemberCollection.idfrontendgroup", $lGroupID);
Wenn alles geht, sollten wir einen neuen Thread unter Module aufmachen... :wink:

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Uwe
Beiträge: 258
Registriert: Mo 30. Jun 2003, 16:05
Wohnort: Konstanz
Kontaktdaten:

Beitrag von Uwe » Fr 31. Mär 2006, 09:23

HerrB hat geschrieben:Wenn alles geht, sollten wir einen neuen Thread unter Module aufmachen... :wink:
Wenn Du nichts dagegen hast, würde ich, wenn fertig, das als Komplettpaket unter Module einstellen.

Was wir hier machen ist ja schon ein Contenido-Workshop 8) Und wie ich sehe findet er ein grossen Leserkreis.

Viele Grüsse, Uwe

Uwe
Beiträge: 258
Registriert: Mo 30. Jun 2003, 16:05
Wohnort: Konstanz
Kontaktdaten:

Beitrag von Uwe » Fr 31. Mär 2006, 11:35

Hallo HerrB,

ich habe da was, was einfach nicht laufen will (Eingabeüberprüfung):

Code: Alles auswählen

if (!isset ($_REQUEST["Vorname"]) || strlen($_REQUEST["Vorname"] > 50))
So geht es nicht, da die Variable offenbar immer gesetzt ist (??). Das habe ich dafür eingesetzt:

Code: Alles auswählen

if (($_REQUEST["Vorname"])=="" || strlen($_REQUEST["Vorname"] > 3))
Die Ausfüllung wird so abgefragt, aber die Anzahl der Zeichen nicht. Egal, was ich eingebe (1 oder 100 Zeichen), es geht immer durch.

Das allerdings funktioniert:

Code: Alles auswählen

(!is_numeric($_REQUEST["Postleitzahl"]) || strlen($_REQUEST["Postleitzahl"]) > 7)
Die Speicherung der Daten läuft sonst perfekt.

Viele Grüsse, Uwe

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 31. Mär 2006, 11:44

Das mit dem isset war warscheinlich Murx.

Zu Deinem Problem: Die Klammern sind falsch.
Geht nicht:

Code: Alles auswählen

if (($_REQUEST["Vorname"])=="" || strlen($_REQUEST["Vorname"] > 50))
Geht:

Code: Alles auswählen

if ($_REQUEST["Vorname"] == "" || strlen($_REQUEST["Vorname"]) > 50)
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Uwe
Beiträge: 258
Registriert: Mo 30. Jun 2003, 16:05
Wohnort: Konstanz
Kontaktdaten:

Beitrag von Uwe » Fr 31. Mär 2006, 11:55

HerrB hat geschrieben:Zu Deinem Problem: Die Klammern sind falsch.
Sorry, das hätte ich sehen müssen ...

Uwe
Beiträge: 258
Registriert: Mo 30. Jun 2003, 16:05
Wohnort: Konstanz
Kontaktdaten:

Beitrag von Uwe » Fr 31. Mär 2006, 18:13

Hallo HerrB,

so, nun habe ich mal alles auf die flexible Lösung umgebaut und es läuft wie geschmiert ;-) DANKE für Deine unverzichtbare Hilfe!.

Die "flexible" lösung schreit ja eigentlich geradezu nach einem Array und einer noch flexibleren Lösung für den Inputbereich, den es ja für unser neues Modul noch nicht gibt. Und vielleicht auch nicht unbedingt nötig ist, da ja hier jeder mit mageren PHP-Kenntnissen (wie ich :( ) das Teil selbst anpassen kann.

Hier mal mein Werk:

Code: Alles auswählen

<?php

$oFEUser = new FrontendUser;
$oFEUser->loadByPrimaryKey($auth->auth["uid"]); # Ist ja nur einer und der muss existieren, da nur in geschütztem Bereich sinnvoll

$sMessage = "&nbsp;";

if ($_REQUEST["action"] == "save") {
   # Daten überprüfen 
   if (($_REQUEST["Vorname"]) == "" || strlen($_REQUEST["Vorname"]) > 50) {
   $sMessage = mi18n("Please specify a firstname with less than or equal 50  characters");
   } else 
   if (($_REQUEST["Nachname"]) == "" || strlen($_REQUEST["Nachname"]) > 100) {
      $sMessage = mi18n("Please specify the surname with less than or equal 100  characters");
   } else   
   if (!is_numeric($_REQUEST["Postleitzahl"]) || strlen($_REQUEST["Postleitzahl"]) > 7) {
      $sMessage = mi18n("Please specify a correct zip code, only numbers");
   } else 
   if (($_REQUEST["Ort"]) == "" || strlen($_REQUEST["Ort"]) > 50) {
   $sMessage = mi18n("Please specify a city with less than or equal 50  characters");
   } else 
   if (($_REQUEST["Strasse"]) == "" || strlen($_REQUEST["Strasse"]) > 50) {
   $sMessage = mi18n("Please specify Street/ No. with less than or equal 50  characters");
   } else {
      $oFEUser->setProperty("titel", "address", $_REQUEST["Titel"]);
      $oFEUser->setProperty("vorname", "address", $_REQUEST["Vorname"]);
	  $oFEUser->setProperty("nachname", "address", $_REQUEST["Nachname"]);
	  $oFEUser->setProperty("postleitzahl", "address", $_REQUEST["Postleitzahl"]);
	  $oFEUser->setProperty("ort", "address", $_REQUEST["Ort"]);
	  $oFEUser->setProperty("strasse", "address", $_REQUEST["Strasse"]);
	  $oFEUser->setProperty("land", "address", $_REQUEST["Land"]);
	  $oFEUser->setProperty("geboren", "address", $_REQUEST["Geboren"]);
	  $oFEUser->setProperty("telefon", "address", $_REQUEST["Telefon"]);
	  $oFEUser->setProperty("fax", "address", $_REQUEST["Fax"]);
	  $oFEUser->setProperty("mobil", "address", $_REQUEST["Mobil"]);
	  $oFEUser->setProperty("email", "address", $_REQUEST["eMail"]);
	  $oFEUser->setProperty("homepage", "address", $_REQUEST["Homepage"]);
	  $sMessage = mi18n("Ihre Daten sind erfolgreich aktualisiert worden.");
      $oFEUser->store(); # weiss gar nicht, ob das nötig ist
   }
} else {
   # Daten aus DB übernehmen und in REQUEST übertragen
   $_REQUEST["Titel"] = $oFEUser->getProperty("titel", "address");
   $_REQUEST["Vorname"] = $oFEUser->getProperty("vorname", "address");
   $_REQUEST["Nachname"] = $oFEUser->getProperty("Nachname", "address");
   $_REQUEST["Postleitzahl"] = $oFEUser->getProperty("postleitzahl", "address");
   $_REQUEST["Ort"] = $oFEUser->getProperty("ort", "address");
   $_REQUEST["Strasse"] = $oFEUser->getProperty("strasse", "address");
   $_REQUEST["Land"] = $oFEUser->getProperty("land", "address");
   $_REQUEST["Geboren"] = $oFEUser->getProperty("geboren", "address");
   $_REQUEST["Telefon"] = $oFEUser->getProperty("telefon", "address");
   $_REQUEST["Fax"] = $oFEUser->getProperty("fax", "address");
   $_REQUEST["Mobil"] = $oFEUser->getProperty("mobil", "address");
   $_REQUEST["eMail"] = $oFEUser->getProperty("email", "address");
   $_REQUEST["Homepage"] = $oFEUser->getProperty("homepage", "address");
}

$oTpl = new Template;
$oTpl->reset();

$oTpl->set('s', 'MESSAGE', $sMessage);

$oTpl->set('d', 'FIELDTITLE', mi18n("Titel"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Titel');
$oTpl->set('d', 'FIELDID', 'titel');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Titel"]);
$oTpl->next();

$oTpl->set('d', 'FIELDTITLE', mi18n("Vorname"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Vorname');
$oTpl->set('d', 'FIELDID', 'vorname');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Vorname"]);
$oTpl->next();

$oTpl->set('d', 'FIELDTITLE', 'mi18n("Nachname")');
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Nachname');
$oTpl->set('d', 'FIELDID', 'nachname');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Nachname"]);
$oTpl->next();

$oTpl->set('d', 'FIELDTITLE', mi18n("Strasse"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Strasse');
$oTpl->set('d', 'FIELDID', 'strasse');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Strasse"]);
$oTpl->next();

$oTpl->set('d', 'FIELDTITLE', mi18n("Postleitzahl"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Postleitzahl');
$oTpl->set('d', 'FIELDID', 'postleitzahl');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Postleitzahl"]);
$oTpl->next();

$oTpl->set('d', 'FIELDTITLE', mi18n("Ort"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Ort');
$oTpl->set('d', 'FIELDID', 'ort');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Ort"]);
$oTpl->next();

$oTpl->set('d', 'FIELDTITLE', mi18n("Land"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Land');
$oTpl->set('d', 'FIELDID', 'land');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Land"]);
$oTpl->next();

$oTpl->set('d', 'FIELDTITLE', mi18n("Geboren"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Geboren');
$oTpl->set('d', 'FIELDID', 'geboren');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Geboren"]);
$oTpl->next();

$oTpl->set('d', 'FIELDTITLE', mi18n("Telefon"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Telefon');
$oTpl->set('d', 'FIELDID', 'telefon');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Telefon"]);
$oTpl->next();

$oTpl->set('d', 'FIELDTITLE', mi18n("Fax"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Fax');
$oTpl->set('d', 'FIELDID', 'fax');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Fax"]);
$oTpl->next();

$oTpl->set('d', 'FIELDTITLE', mi18n("Mobil"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Mobil');
$oTpl->set('d', 'FIELDID', 'mobil');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Mobil"]);
$oTpl->next();

$oTpl->set('d', 'FIELDTITLE', mi18n("eMail"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'eMail');
$oTpl->set('d', 'FIELDID', 'email');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["eMail"]);


$oTpl->set('d', 'FIELDTITLE', mi18n("Homepage"));
$oTpl->set('d', 'FIELDTYPE', 'text');
$oTpl->set('d', 'FIELDNAME', 'Homepage');
$oTpl->set('d', 'FIELDID', 'homepage');
$oTpl->set('d', 'FIELDVALUE', $_REQUEST["Homepage"]);

# Bin persönlich ein Fan von "Wenn Ausgabe, dann alles, kein Mischmasch". Das "\n" fügt einen Zeilenumbruch ein.
echo '<form method="post" action="front_content.php?idcatart='.$idcatart.'" name="frontend_save_user" id="frontend_save_user"><input type="hidden" name="action" value="save">'."\n";
echo $oTpl->generate('templates/feuser-edit.html');
echo '</form>'."\n";
?>
Ach so
Bin persönlich ein Fan von "Wenn Ausgabe, dann alles, kein Mischmasch". Das "\n" fügt einen Zeilenumbruch ein.
Vielleicht habe ich das falsch verstanden, aber ins Template kann ich doch kein PHP-Code schreiben?

Du kannst Dir ja das ganze mal ansehen, die Zugangsdaten hast Du ja noch. Auf der Startseite (FE) kannst Du dich auch mit 'testuser' und 'test' einloggen und auf's BE hast Du ja sowieso Zugriff.

Viele Grüsse vom sonnigen Bodensee, Uwe

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 31. Mär 2006, 18:37

Vielleicht habe ich das falsch verstanden, aber ins Template kann ich doch kein PHP-Code schreiben?
Nein, das bezog sich auf so Konstrukte wie sowas:

<?php
... Wahnwitzig wichtiger und umfangreicher Code ...
?>
<form target="<? echo "bla"; ?>">
<?php
... Und weiter gehts ...
?>

Ich sehe bei sowas nicht durch (also mittenmang mal PHP und mal nicht). Das ist aber sicherlich Geschmackssache - war nur zur Erläuterung, warum ich es umgebaut hatte. Das mit dem ' bei echo finde ich praktisch, auch wenn ich das mit dem "\n" bei echo 'bla'."\n"; nicht so schön finde - aber mit chr(10) zu arbeiten, führt zu Problemen im FF und bisher habe ich nur "\n" als was verlässliches gefunden, um einen Zeilenumbruch im fertigen HTML-Code zu erhalten.
Die "flexible" lösung schreit ja eigentlich geradezu nach einem Array und einer noch flexibleren Lösung für den Inputbereich, den es ja für unser neues Modul noch nicht gibt.
Der Input-Bereich schreit nach einem cHTMLSelect-Element aus der HTMLElements-Klasse (noch hübscher), aber das kann ich mal nachliefern.

Ansonsten ja, auch ein Array wäre schick - meine Idee war, dass er einfach das Plugin-Verzeichnis so ausliest, wie es die Backend-Seite auch macht. Ich werde zwar mal gucken, kurzfristig aber wohl nicht liefern können.

Ansonsten: Gern geschehen. Brauchte ich es nicht machen ... :lol:

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Uwe
Beiträge: 258
Registriert: Mo 30. Jun 2003, 16:05
Wohnort: Konstanz
Kontaktdaten:

Beitrag von Uwe » Fr 31. Mär 2006, 19:16

HerrB hat geschrieben:Ansonsten: Gern geschehen. Brauchte ich es nicht machen ... :lol:
Ohne Deine Hilfe hätte ich sicher ein schaurig programmiertes Etwas zusammengebastelt.

Mit dieser Lösung kann ich gut leben, das Bessere ist aber bekanntlich der Feind des Guten ;) Was ich dringender finde ist eine grundsätzlich bessere Lösung für die FEuser. Alles in eine properties-Tebelle zu schreiben, finde ich recht unübersichtlich und leider gibts ja noch den bug mit den nicht gelöschten Properties.

Ich würde die FEusers (Properties) komplett in eine Tabelle schreiben (con_frontendusers_properties). Weiter würde ich überlegen, ob man nicht ein pseudocronjob laufen lässt, der die Einträge der frontendusers und properties vergleicht und bei Bedarf aufräumt. Man könnte natürlich diese Sachen auch gleich löschen mit den FEusern ...

Die Sache mit dem Plugins ist natürlich sehr flexibel (keine Änderung der Datenbanktabellen) aber auch unglaublich verschwenderisch. Hier weiss ich nicht, ob irgendwann mal die Last auf die Datenbank zu gross wird. Aber die Technik wird ja auch jedes Jahr schneller ...

Aber ich will ja nicht mäkeln. Ich bin ausgesprochen zufrieden und kann wohl mein erstes freies Wochenende seit Langem geniessen (werde mein Moped erwecken)

Viele Grüsse vom Bodensee, Uwe

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 31. Mär 2006, 19:41

Alles in eine properties-Tebelle zu schreiben, finde ich recht unübersichtlich und leider gibts ja noch den bug mit den nicht gelöschten Properties.
Es gibt keinen solchen Bug mehr (zumindest nicht in V4.6.4). Beim Löschen eines Frontendusers werden alle Properties zu dem User gelöscht.
Ich würde die FEusers (Properties) komplett in eine Tabelle schreiben (con_frontendusers_properties). Weiter würde ich überlegen, ob man nicht ein pseudocronjob laufen lässt, der die Einträge der frontendusers und properties vergleicht und bei Bedarf aufräumt.

Die Sache mit dem Plugins ist natürlich sehr flexibel (keine Änderung der Datenbanktabellen) aber auch unglaublich verschwenderisch.
Nein. Genau dies ist der Vorteil der Properties-Tabelle: Die Flexibilität. Und das Konstrukt ist - da es sich im Prinzip nur um Krümel zu einem Keks handelt - auch nicht falsch, da damit funktional kaum etwas verbunden ist. Die Datenmenge ist in Relation nicht sehr groß und würde durch Auslagerung in eine extra Tabelle auch nicht kleiner werden.

Wenn es überhaupt ein Problem gibt, liegt es zur Zeit mehr in der Art, wie die einzelnen Daten zu jedem Account im Backend eingelesen werden (Administration -> Frontend). Der Weg und die Art der Speicherung ist kein Problem.

Aber auch dieses Problem besteht für "unser" Modul nicht, da immer nur die Daten zu einem Account geladen werden müssten (wenn man einfach die Plugin-Technologie übernimmt und dat sind dann gerade mal so 15 Abfragen)...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Uwe
Beiträge: 258
Registriert: Mo 30. Jun 2003, 16:05
Wohnort: Konstanz
Kontaktdaten:

Beitrag von Uwe » So 2. Apr 2006, 12:03

Ok, ich lasse mich gerne belehren und in diesem Falle sogar ausgesprochen gerne, da meine Befürchtungen nicht bestätigt werden.

Wie funktioniert denn das Löschen der Properties? Wenn ich in der Version 4.6.8 einen FEuser lösche, stehen die Properties weiterhin in der DB ...

Viele Grüsse, Uwe

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 3. Apr 2006, 14:05

Das ist eigentlich in der class.genericdb.php hinterlegt (in der Delete-Methode). Wenn das nicht funktioniert, muss ich mir das mal ansehen...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Mo 3. Apr 2006, 14:51

HerrB hat geschrieben:Das ist eigentlich in der class.genericdb.php hinterlegt (in der Delete-Methode). Wenn das nicht funktioniert, muss ich mir das mal ansehen...
Dann schau dir mal insbesondere:

Code: Alles auswählen

		/* If this object wasn't loaded before, return false */
		if ($this->virgin == true)
		{
			$this->lasterror = "No item loaded";
			return false;
		}
an.

$this->virgin dürfte beim Löschen immer wahr sein in der "include.frontend.user_edit.php", sofern ich das sehe.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 3. Apr 2006, 17:01

Du wirst recht haben. Das ganze Konstrukt ist ein wenig seltsam. Ein delete($id) löscht zunächst das Element aus der DB, ohne Rücksicht auf Verluste.

Danach - hehehe - fragen wir kurz nach, ob der Nutzer vielleicht daran gedacht hatte, das Element vorher - für die ItemCollection-Klasse - zu laden. Und wenn nicht ... na, Hauptsache gelöscht... :wink:

Es sollte IMHO ausreichen, in der class.genericdb.php für die Methode delete($id) der ItemCollection-Klasse den angegebenen Passus auszukommentieren:

Code: Alles auswählen

/* If this object wasn't loaded before, return false */ 
/*
      if ($this->virgin == true) 
      { 
         $this->lasterror = "No item loaded"; 
         return false; 
      }*/
Mir kann aber gerne jemand mal erläutern, warum der überhaupt drin ist...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Gesperrt