Willkommen! Anmelden

Re: Artikelzusatzfelder ausgeben

Artikelzusatzfelder ausgeben
22. März 2006 10:04
Hallo zusammen

Ich habe in meinem Shop vier Artikel-Zusatzfelder gepflegt und im artikel.tpl.html so eingerichtet, dass sie auch ausgegeben werden.

Hat jemand ne Idee, wie man es hinkriegt, das nur die Artikelzusatzfelder ausgegeben werden, die auch im Artikelstamm gefüllt sind?
Analog Warenkord: Wenn ich ein Artikel mit "nur" drei gefüllten Felder habe, erscheinen in der Artikelansicht alle vier Artikelzusatzfelder, jedoch im Warenkorb nur die drei gefüllten Felder.

Danke für Eure Hilfe.

gruss
stephan

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
====================
Re: Artikelzusatzfelder ausgeben
24. März 2006 08:34
Hallo José
erst mal viiilen Dank für deinen Hack.
Habs in meinem Shop reingehackt (Hack 4)
getestet und für absolut perfekt und sehr gut
befunden.
jetzt siehst es auch gleich sehr viel besser aus.



gruess und schönes weekend



stephan

In diesem Forum dürfen leider nur registrierte Teilnehmer schreiben.

Klicken Sie hier, um sich einzuloggen