Freie Attribute in Tabelle darstellen

AndyG

Aktives Mitglied
14. August 2007
197
0
Hallo,
erst mal, besten Dank für diese geniale WAWI. Ich bin davon total begeistert.
Super Arbeit von euch.

Nun mein Problem.
Ich möchte für meine Artikel eine Verwendungsliste an die Beschreibung anhängen. Ich habe versucht dies mit den Attributen der WAWI zu lösen. Ich habe herausgefunden das dafür wohl die Datei "Attribute.php" des Connectors zuständig ist. Die Freien Attribute werden Standardmäßig folgendermaßen formatiert.
Code:
$desc = $product_desc[0]."

[b]".$Attribut->name."[/b]: ".$Attribut->content;
Ich möchte nun das die Attribute in einer Tabelle dargestellt werden. Ich hab es so probiert.

Code:
$desc.= $product_desc[0]."<table><tr><td>".$Attribut->name." ".$Attribut->content."</td></tr></table>";
Das hat aber zur folge das jedes Attribut in einer eigenen Tabelle dargestellt wird. Ich müßte logischerweise den HTML Code "<table><tr>" einmal am ende der Beschreibung angeben und nach den Attributen einmal diesen Code "</tr></table>".
Leider finde ich die entsprechenden Stellen im Quellcode des Connectors nicht. Ich muß aber auch zugeben das ich noch nicht so ganz hinter den Algorithmus gestiegen bin.

Kann mir da mal jemand auf die Sprünge helfen?
 

shetani

Aktives Mitglied
28. Februar 2007
226
0
Essen
Hm, das wird nicht so einfach funktionieren da die Attribute sequentiell abgearbeitet werden. Einzige Chance die ich da derzeit sehe ist, das Du
versuchst Dir einen Marker zu setzen zum Beispiel in der Form

$desc = $product_desc[0]."

<table id=attribute><tr><td>".$Attribut->name.": ".$Attribut->content."</td></tr></table>;

und mittels explode

$product_desc_arr = explode("<table id=attribute><tr> ", $product_desc[0]);

erst den bestehenden String aus der Datenbank in die Teile

$product_desc_arr[0] = $product_desc;
$product_desc_arr[1] = "<td>attributname: attributinhalt</td></tr></table>";

zerlegst und danach das gleiche mit $product_desc_arr[1] machst in der Form

$attrib_desc_arr = explode("</tr></table>", $product_desc_arr[1]);

danach solltest Du folgendes erhalten
$attrib_desc_arr[0] ="<td>attributname:attributinhalt</td>"

Der komplette Code snipp sollte ungefähr so aussehen

Code:
			default:
				if ($Attribut->content && ES_ATTRIBUTE_AN_BESCHREIBUNG_ANHAENGEN==1)
				{
					//an description anhängen
					$cur_query = eS_execute_query("select products_description from products_description where products_id=".$Attribut->products_id." and language_id=".$einstellungen->languages_id);
					$product_desc = mysql_fetch_row($cur_query);

$product_desc_arr = explode("<table id=attribute><tr>", $product_desc[0]);
$attrib_desc_arr = explode("</tr></table>", $product_desc_arr[1]);

					$desc = $product_desc_arr[0]."

<table id=attribute><tr>".$attrib_desc_arr[0]".<td>[b]".$Attribut->name."[/b]: ".$Attribut->content"."</td></tr></table>";
					eS_execute_query("update products_description set products_description=\"".$desc."\" where products_id=".$Attribut->products_id." and language_id=".$einstellungen->languages_id);
				}
				break;

Wie gehabt - keien Gewährleistung für die Richtigkeit und Funktionalität des Ganzen

Greets Frank
 

AndyG

Aktives Mitglied
14. August 2007
197
0
Hi Frank,
Danke für den Denkanstoß. Die Tabelle wird ja nun in horizontaler Richtung ausgegeben, was etwas ungünstig ist, denn je nach Anzahl der Attribute kann das durchaus das Layout sprengen. Kannst du nichts für, war ja meine Vorgabe :wink:

Um die Attribute innerhalb der Tabelle in diesem Format auszugeben

Code:
<table id=attribute>
	<tr>
		<td>[b]AttributName1[/b]:</td>
		<td>AttributContent1</td>
	</tr>
		<td>[b]AttributName2[/b]:</td>
		<td>AttributContent2</td>
	</tr>
</table>
hab ich den Code so abgeändert.

Code:
       default:
            if ($Attribut->content && ES_ATTRIBUTE_AN_BESCHREIBUNG_ANHAENGEN==1)
            {
               //an description anhängen
               $cur_query = eS_execute_query("select products_description from products_description where products_id=".$Attribut->products_id." and language_id=".$einstellungen->languages_id);
               $product_desc = mysql_fetch_row($cur_query);
               $product_desc_arr = explode("<table id=attribute><tr>", $product_desc[0]);
               $attrib_desc_arr = explode("</table>", $product_desc_arr[1]);

               $desc = $product_desc_arr[0]."<table id=attribute><tr>".$attrib_desc_arr[0]."<td>[b]".$Attribut->name."[/b]:</td><td>".$Attribut->content."</td></tr></table>";
               eS_execute_query("update products_description set products_description=\"".$desc."\" where products_id=".$Attribut->products_id." and language_id=".$einstellungen->languages_id);
            }
            break;

das funktioniert schon mal sehr gut. Nun geht's weiter. Ich will dieser Tabelle noch einen Header hinzufügen, mal seh'n wie das nocht geht.

Kleiner Tipp. Ich weiß nicht ob das bekannt und für euch schon ein alter Hut ist. Wenn man irgendwo im Quelltext so etwas wie dieses angibt

Code:
print_r($product_desc);exit;
dann kann man beim Internetabgleich mit der WAWI bequem über das Fehlerfenster der WAWI den Inhalt von Arrays oder Variabeln kontrollieren.

Danke schön für die Hilfe :D
 

shetani

Aktives Mitglied
28. Februar 2007
226
0
Essen
Hm, das wird so aber nicht funktionieren mit dem Code

Du kannst nicht das einleitende <tr> herausnehmen und das abschliessende drin lassen. -> lass Deine Seite mal per html Validator von www.w3c.org checken - das ergibt definitiv invaliden Code

änder den Code mal insoweit ab, das er so lautet

Code:
               $product_desc_arr = explode("<table id=attribute>", $product_desc[0]);

Wenn Du überwschriften haben willst setz sowas in der Art wie

<tr>
<th>ATTRIBUT</th>
<th>ATTRIBUTINHLAT</th>
</tr>

davor und
erweitere einfach den ersten explodeteil und den string um die von dir angefügten Zeilen. heisst dann in etwa

Code:
               $product_desc_arr = explode("<table id=attribute><tr><th>ATTRIBUT</th><th>ATTRIBUTINHLAT</th></tr>", $product_desc[0]); 

und 


               $desc = $product_desc_arr[0]."<table id=attribute><tr><th>ATTRIBUT</th><th>ATTRIBUTINHLAT</th></tr><tr>".$attrib_desc_arr[0]."<td>[b]".$Attribut->name."[/b]:</td><td>".$Attribut->content."</td></tr></table>";

Wenn es zuviel Werte werden änder das Layout doch auf DIV ab und nutz scrollbars um die Übersichtlichkeit zu erhalten

Viel Spaß Greets Frank
 

AndyG

Aktives Mitglied
14. August 2007
197
0
Hi,
vielen Dank für deine Hilfe, ich bin nun fertig :D
Ich hab einiges nochmals geändert und das ist jetzt dabei rausgekommen.

http://4myimage.de/thumbs/klz1188147886z.PNG

Alles was unter "Marke" steht ist "Attribut->name", die anderen Felder resultieren aus "Attribut->content".
Die Attributwerte gebe ich in der WAWI in diesem Format ein

"{ZXR750H1}{H}{750}{1989-1990}{}"

Die "Attribute.php" zerlegt den String und verteilt sie auf die verschiedenen Variablen und fügt sie in die Tabelle ein.

Für mich eine Lösung mit der ich gut leben kann. Der Nachteil ist, es funktionieren keine anderen Attributarten mehr. Das könnte ich zwar noch ändern, hab aber im Moment keine Bedarf dafür.

schöne Grüße
Andy
 
Zuletzt von einem Moderator bearbeitet:

shetani

Aktives Mitglied
28. Februar 2007
226
0
Essen
Mal was anderes,

schau dir mal deine Preisangaben an und überleg mal ob die in der Form den geltenden Vorgaben in der BRD entsprechen ;) Hinweis MwSt und Zusatzkosten etc.
 

AndyG

Aktives Mitglied
14. August 2007
197
0
Zitat von AndyG:
Der Nachteil ist, es funktionieren keine anderen Attributarten mehr.
Nach einigem Probieren bin ich nun soweit dass alle, glaub ich, festen Attribute wieder funktionieren. Die freien Attribute können aber nur noch in diesem Format eingegeben werden und dienen nur noch dazu innerhalb der Tabelle dargestellt zu werden.

"{content1}{content2}{content3}{content4}{content5}"

Wer dieses Script gebrauchen kann, darf sich gerne an mich wenden. Oder gibt es hier eine andere Möglichkeit dies der Allgemeinheit zur Verfügung zu stellen?

schönen Gruß
Andy