blastermaster
Mitglied
Arbeite im Moment an einem kleinem CMS bei dem man über den Adminbereich das Layout der Seite verändern kann (CSS). Was auch ansich soweit funktioniert. Nur bin ich jetzt am Suchen einer vernünftigen Lösung um die Notices aus dem Formular zu beseitigen.
Wie im folgenden Template-Auszug habe ich die Variablen
$field[body_field2] -> body steht in dem Fall für den html-Tag <body> und über field2 wird aus der DB die CSS-Eigenschaft background bezogen
$field[body_field3fixed] -> body steht in dem Fall für den html-Tag <body> und über field3 wird aus der DB die CSS-Eigenschaft background-attachment bezogen und fixed in dem Fall für das select
usw. -> sind noch sehr viele solcher Variablen.
style.tpl (nur ein Auszug)
Über 2 DB-Tabellen werden die Werte für die Variablen $field[......] ausgelesen. In der ersten befinden sich sämtliche html-Tags, Klassen und ID's (z.B. body) die ich verwende mit den evtl. schon zugeordeten CSS-Eigenschaften.
In der zweiten Tabelle sind sämtliche CSS-Eigenschaften (z.B. background, color, etc.)
Ein Eintragin der ersten Tabelle (style) könnte wie folgt aussehen:
cssname -> body
cssattr -> background-image:url("./images/background.gif"); color:#efefef;
und die zweite (stylecss)
cssid -> 2 (ist die field-id)
cssname -> background-image
cssattr -> 2 (steht für die Aktion die durchgeführt werden soll)
hier die style.php (Auszug)
So und jetzt brauch ich einen Tipp/Denkanstoß/Lösungsvorschlag
gibt es für die Variable z.B. $field[body_field2] in der DB einen Eintrag, dann gibt es keine Notice (logisch). Ist allerdings nichts angegeben, kommt die
Notice: Undefined index: body_field2
bzw. wenn das komplette Formular leer ist
Notice: Uninitialized string offset: 0 (ebenfalls klar warum)
Nur wie kann ich diese Notices beheben ohne für jedes Feld einzeln, folgendes zu schreiben:
Wie im folgenden Template-Auszug habe ich die Variablen
$field[body_field2] -> body steht in dem Fall für den html-Tag <body> und über field2 wird aus der DB die CSS-Eigenschaft background bezogen
$field[body_field3fixed] -> body steht in dem Fall für den html-Tag <body> und über field3 wird aus der DB die CSS-Eigenschaft background-attachment bezogen und fixed in dem Fall für das select
usw. -> sind noch sehr viele solcher Variablen.
style.tpl (nur ein Auszug)
HTML:
<td style="vertical-align:top"><table cellpadding="4" cellspacing="1" border="0" width="100%">
<tr>
<td>Link zum Hintergrundbild: </td>
<td><input name="body_field2" type="text" size="30" value="$field[body_field2]" /></td>
</tr>
<tr>
<td>Anlage: </td>
<td><select name="body_field3">
<option></option>
<option value="fixed"$field[body_field3fixed]>fest</option>
<option value="scroll"$field[body_field3scroll]>rollen</option>
</select></td>
</tr>
<tr>
<td>Wiederholen: </td>
<td><select name="body_field4">
<option></option>
<option value="repeat-y"$field[body_field4repeaty]>nur vertikal</option>
<option value="repeat-x"$field[body_field4repeatx]>nur horizontal</option>
<option value="no-repeat"$field[body_field4norepeat]>keine Wiederholung</option>
</select></td>
Über 2 DB-Tabellen werden die Werte für die Variablen $field[......] ausgelesen. In der ersten befinden sich sämtliche html-Tags, Klassen und ID's (z.B. body) die ich verwende mit den evtl. schon zugeordeten CSS-Eigenschaften.
In der zweiten Tabelle sind sämtliche CSS-Eigenschaften (z.B. background, color, etc.)
Ein Eintragin der ersten Tabelle (style) könnte wie folgt aussehen:
cssname -> body
cssattr -> background-image:url("./images/background.gif"); color:#efefef;
und die zweite (stylecss)
cssid -> 2 (ist die field-id)
cssname -> background-image
cssattr -> 2 (steht für die Aktion die durchgeführt werden soll)
hier die style.php (Auszug)
PHP:
$field = "";
$result = mysql_query("SELECT cssname, cssattr FROM style");
while($row = mysql_fetch_array($result)){
$bodycss = explode(";",$row['cssattr']);
foreach($bodycss as $key){
$arr = explode(":", $key);
$arr[0] = trim($arr[0]);
$result2 = mysql_query("SELECT cssid, cssacpaus FROM stylecss WHERE cssname = '".$arr[0]."'");
$row2 = mysql_fetch_assoc($result2);
$cssacpaus = $row2['cssacpaus'];
$fieldname = $row['classname']."_field".$row2['cssid'];
if(!empty($arr[1])) {
switch ($cssacpaus) {
case 1:
$field[$fieldname] = $arr[1];
break;
case 2:
$field[$fieldname] = preg_replace('/url\(".\/(.*?)"\)/Usi', '$1', $arr[1]);
break;
case 3:
$arr[1] = preg_replace('/(.*?)\-(.*?)/Usi', '$1$2', $arr[1]);
$field[$fieldname.$arr[1]] = " selected=\"selected\"";
break;
case 4:
if($arr[1] == "0 auto 0 0") $field[$fieldname."left"] = " selected=\"selected\"";
if($arr[1] == "0 0 0 auto") $field[$fieldname."right"] = " selected=\"selected\"";
break;
}
}
}
}
So und jetzt brauch ich einen Tipp/Denkanstoß/Lösungsvorschlag
gibt es für die Variable z.B. $field[body_field2] in der DB einen Eintrag, dann gibt es keine Notice (logisch). Ist allerdings nichts angegeben, kommt die
Notice: Undefined index: body_field2
bzw. wenn das komplette Formular leer ist
Notice: Uninitialized string offset: 0 (ebenfalls klar warum)
Nur wie kann ich diese Notices beheben ohne für jedes Feld einzeln, folgendes zu schreiben:
PHP:
if(!isset($field['body_field2'])) $field['body_field2'] = "";
if(!isset($field['body_field3fixed'])) $field['body_field3fixed'] = "";
//usw.