Hallo Stephan,
wie schon angedeutet, muss man hierfür etwas mehr coden. Ich werde das ganze etwas ausführlicher beschreiben, so dass auch andere Shopbenutzer etwas davon haben.
Anmerkung: Artikelzusatzfelder sind nur in der PhPepperShop Professional Version enthalten.
1.) Artikelzusatzfelder verwenden:
In der Shop-Datenbank in der Tabelle shop_settings_new die verwendeten Felder von nicht_verwenden auf verwenden umschalten (Aktivierung)
2.) Felder über Massenartikelmutationen abfüllen:
In der Shopadministration in Artikel Massenmutationen wechseln und hier auf den Button Artikelzusatzfelder klicken. Hier eine Kategorie wählen und die aktiven Zusatzfelder mit Daten abfüllen. Wichtig ist hier, dass es auch leere Felder gibt, welche ja kundenseitig nicht dargestellt werden sollen.
3.a) Einfache Kundendarstellung bei Artikel(detailansicht):
Wir müssen zwei Dateien editieren, die erste ist das Artikel Template, welches wir mal in einem Editor öffnen:
{shopdir}/shop/language/html_templates/artikel.tpl.html
Original:
{artikelbeschreibung}<br>
Neu:
{artikelbeschreibung}<br>
{Zusatzfeld_label_1} {Zusatzfeld_1}<br>
{Zusatzfeld_label_2} {Zusatzfeld_2}<br>
{Zusatzfeld_label_3} {Zusatzfeld_3}<br>
Nun erscheinen immer alle Labels...
Wir editieren die zweite Datei {shopdir}/shop/USER_ARTIKEL_HANDLING_AUFRUF.php und ändern folgende Stelle:
Original:
for ($i = 1; $i <= ANZAHL_ARTIKELZUSATZFELDER; $i++) {
$artikelzusatzfeldname = 'Zusatzfeld_'.$i;
$art_tpl->set_variable($artikelzusatzfeldname,$myarray->$artikelzusatzfeldname);
Neu:
for ($i = 1; $i <= ANZAHL_ARTIKELZUSATZFELDER; $i++) {
$artikelzusatzfeldname = 'Zusatzfeld_'.$i;
if (trim($myarray->$artikelzusatzfeldname) == '') continue;
$art_tpl->set_variable($artikelzusatzfeldname,$myarray->$artikelzusatzfeldname);
Nun werden die leeren Artikelzusatzfelder nicht mehr abgefüllt.
Hier sieht man aber auch gleich die Problematik - denn das <br>-Zeichen ist unabhängig von der Variable (siehe Template Teil). Man hat nun zwei Möglichkeiten. Entweder, man übernimmt das <br>-Zeichen in die set_variable Anweisung oder man arbeitet mit Template-Blocks
3.b) <br>-Anweisung in set_variable einfügen
Dies ist die einfachste Möglichkeit die leeren Zusatzfelder auszublenden.
4.) Template Block-Lösung
Wenn man anstatt dem Hack von Punkt 3 a+b eine sauberere und flexiblere Lösung benötigt, so muss man mit Template Blocks arbeiten.
Wir erstellen zwei verschachtelte Blocks im artikel.tp.html Template (im {shopdir}/shop/language/html_templates Verzeichnis):
Original:
{artikelbeschreibung}<br>
Neu:
{artikelbeschreibung}<br>
<!-- BEGIN artikel_zusatzfelder -->
<table class="content" border="1" style="margin-top:5px; margin-bottom:5px">
<!-- BEGIN artikel_zusatzfeld -->
<tr><td class="content">{Zusatzfeld_label}:</td><td class="content">{Zusatzfeld}</td></tr>
<!-- END artikel_zusatzfeld -->
</table>
<!-- END artikel_zusatzfelder -->
Nun muessen wir die Blocks entsprechend abfüllen, dies machen wir wiederum in der Datei {shopdir}/shop/USER_ARTIKEL_HANDLING_AUFRUF.php
Original:
$art_tpl->set_current_block('artikel');
$art_tpl->set_variable('action',$action);
$art_tpl->set_variable('spezial',$buff_txt_js);
$art_tpl->set_variable('artikelname', htmlspecialchars($myarray->name));
$myarray->beschreibung = str_replace('{pps_sname}',SESSION_NAME,$myarray->beschreibung);
$myarray->beschreibung = str_replace('{pps_sid}',SESSION_ID,$myarray->beschreibung);
$art_tpl->set_variable('artikelbeschreibung',$myarray->beschreibung);
for ($i = 1; $i <= ANZAHL_ARTIKELZUSATZFELDER; $i++) {
$artikelzusatzfeldname = 'Zusatzfeld_'.$i;
$art_tpl->set_variable($artikelzusatzfeldname,$myarray->$artikelzusatzfeldname);
$art_tpl->set_variable('Zusatzfeld_label_'.$i,$zusatzfelder_infos[$i]['label']);
}
$art_tpl->set_variable('artikel_nr',htmlentities(£('artikel_nr')));
$art_tpl->set_variable('artikelnummer',htmlentities($myarray->artikel_Nr));
$art_tpl->set_variable('artikel_id', $myarray->artikel_ID);
$art_tpl->set_variable('max_anzahl', $max_kauf['max_anzahl']); // hinzufuegen Anzahl
$art_tpl->set_variable('max_lager', $max_kauf['max_lager']);
$art_tpl->set_variable('anzahl_nachkommastellen', $einheiten['anzahl_nachkomma']);
$art_tpl->set_variable('min_anzahl', $myarray->mindestbestellmenge);
Neu:
// Artikel-Zusatzfelder rendern
$benutzte_artikel_zusatzfelder = false;
for ($i = 1; $i <= ANZAHL_ARTIKELZUSATZFELDER; $i++) {
$artikelzusatzfeldname = 'Zusatzfeld_'.$i;
if (trim($myarray->$artikelzusatzfeldname) == '' || $zusatzfelder_infos[$i]['verwenden'] == 'nicht_verwenden') {
continue;
}
$benutzte_artikel_zusatzfelder = true; // mind. ein Zusatzfeld wird benuztzt
$art_tpl->set_current_block('artikel_zusatzfeld');
$art_tpl->set_variable('Zusatzfeld',$myarray->$artikelzusatzfeldname);
$art_tpl->set_variable('Zusatzfeld_label',$zusatzfelder_infos[$i]['label']);
$art_tpl->parse_current_block();
}
if ($benutzte_artikel_zusatzfelder == true) {
$art_tpl->set_current_block('artikel_zusatzfelder');
$art_tpl->parse_current_block();
}
$art_tpl->set_current_block('artikel');
$art_tpl->set_variable('action',$action);
$art_tpl->set_variable('spezial',$buff_txt_js);
$art_tpl->set_variable('artikelname', htmlspecialchars($myarray->name));
$myarray->beschreibung = str_replace('{pps_sname}',SESSION_NAME,$myarray->beschreibung);
$myarray->beschreibung = str_replace('{pps_sid}',SESSION_ID,$myarray->beschreibung);
$art_tpl->set_variable('artikelbeschreibung',$myarray->beschreibung);
$art_tpl->set_variable('artikel_nr',htmlentities(£('artikel_nr')));
$art_tpl->set_variable('artikelnummer',htmlentities($myarray->artikel_Nr));
$art_tpl->set_variable('artikel_id', $myarray->artikel_ID);
$art_tpl->set_variable('max_anzahl', $max_kauf['max_anzahl']); // hinzufuegen Anzahl
$art_tpl->set_variable('max_lager', $max_kauf['max_lager']);
$art_tpl->set_variable('anzahl_nachkommastellen', $einheiten['anzahl_nachkomma']);
$art_tpl->set_variable('min_anzahl', $myarray->mindestbestellmenge);
Ich denke auf der Basis der Lösung in Punkt 4, kann man recht flexible Darstellungen realisieren.
Gruss
José
Nachricht bearbeitet (23.03.06 17:59)
====================
Entwickler PepperShop
====================