Jump to content
xt:Commerce Community Forum

Lagerampel / Bestandsanzeige bei Artikeln mit Attributen


bikebahnhof

Recommended Posts

Hallo, im Support-Bereic gabs leider noch keine Hilfe und da die Zeit ein bisschen drängt versuch ichs auch hier mal ;)

ich habe mich jetzt etliche Stunden hier im Forum informiert nur kein Lösung gefunden, die mit weiterhilft.

Zum Problem: Ich nutze die Verson 3.04 SP2.1 und versuche mehr oder weniger verzweifelt die Bestandsanzeige in Form der "Ampel" zu integrieren, und zwar bei Artikeln, die über Attribute verfügen.

Was ich erreichen möchte ist folgendes:

Auf der Produktseite werden die Attribute in einer Tabelle (table_listing.html) wiedergegeben und hinter der jeweiligen Option soll eine Verfügbarkeitsanzeige stehen, die mit dem Bestand der Option verbunden ist.

Die Verfügbarkeitsanzeige auf den Produkt-Auflistungsseiten brauche ich nicht, ich möchte nur, dass der Bestand der Optionen in der Attributtabelle in Form einer Grafik angezeigt wird.

Vielen Dank im Voraus und Gruß,

Mark

Edit: Hab mich da grad mal selbst ranversucht mit meinen bescheidenen Kenntnissen...was ich bis jetzt weiß: ich brauche eine Abfrage der Werte der "attributes_stock"-Spalte in der Tabelle "products_attributes" in der MySQL-DB.

Welche .php-Dateien muss ich dabei ändern/ergänzen und welche .html-Dateien außer die table_listing.html ?

Link to comment
Share on other sites

Hallo,

das was du machen willst wird mit 3.04 nicht gehen da sich über die Attribute ein Artikel multipliziert d.h. 2 Attribute mit jeweils 3 Varianten ergibt 6 Artikel und diesen Bezügen kann kein Lagerbestand zugewiesen werden.

In der neuen 3.1 soll es Master / Slave Artikel geben, da wird dies dann sicher gehen.

Gruß

Link to comment
Share on other sites

Hallo,

das was du machen willst wird mit 3.04 nicht gehen da sich über die Attribute ein Artikel multipliziert d.h. 2 Attribute mit jeweils 3 Varianten ergibt 6 Artikel und diesen Bezügen kann kein Lagerbestand zugewiesen werden.

In der neuen 3.1 soll es Master / Slave Artikel geben, da wird dies dann sicher gehen.

Gruß

Hallo,

was ich meine sind natürlich die Bestände der Optionswerte, Beispiel:

Artikel: T-Shirt A

Attribut: Größe/Farbe (<- EIN Attribut)

Option: S/Blau; M/Blau; S/Rot; M/Rot

Und an der jeweiligen Option hängt ein Bestand der ja auch in der mysql-datenbank einzusehen ist und somit irgendwie einzubinden sein muss (...zumindest denke ich das mit meinem nicht wirklich existenten Wissen im Bereich PHP und MySQL ;) )

Link to comment
Share on other sites

Ich bastel daran nun auch ein e Weile, da ich nichts hier im Support bereich finden kann.

Aber leider habe ich bisher kein erfolg damit.

Fuer die Product attribute ist die product_attribute.php zustaendig.

Dort wird in der Datenbank abfrage auch der Lagerbesatnd beruecksichtigt:

$products_options_query = xtDBquery("select pov.products_options_values_id,
pov.products_options_values_name,
pa.attributes_model,
pa.options_values_price,
pa.price_prefix,
pa.attributes_stock,
pa.attributes_model
from ".TABLE_PRODUCTS_ATTRIBUTES." pa,
".TABLE_PRODUCTS_OPTIONS_VALUES." pov
where pa.products_id = '".$product->data['products_id']."'
and pa.options_id = '".$products_options_name['products_options_id']."'
and pa.options_values_id = pov.products_options_values_id
and pov.language_id = '".(int) $_SESSION['languages_id']."'
order by pa.sortorder");[/PHP]

[b]pa.attributes_stock[/b]

Jedoch wird die abfrage dann nicht weiter bearbeitet.

Ich habe folgendes versucht:

[code]while ($products_options = xtc_db_fetch_array($products_options_query,true)) { $price = ''; if ($_SESSION['customers_status']['customers_status_show_price'] == '0') { $products_options_data[$row]['DATA'][$col] = array ('ID' => $products_options['products_options_values_id'], 'TEXT' => $products_options['products_options_values_name'], 'MODEL' => $products_options['attributes_model'], [B][COLOR="Red"]'STOCK' => $products_options['attributes_stock'][/COLOR][/B], 'PRICE' => '', 'FULL_PRICE' => '', 'PREFIX' => $products_options['price_prefix']); } else { if ($products_options['options_values_price'] != '0.00') { $price = $xtPrice->xtcFormat($products_options['options_values_price'], false, $product->data['products_tax_class_id']); } [/code]
Ich moechte, das hinter dem Attribut namen "no stock" angezeigt wird, wenn der Lagerbestand 0 ist. Im product option templet habe ich also folgendes eingefuegt:
[code]<select name="id[{$options_data.ID}]"> {foreach key=key_data item=item_data from=$options_data.DATA} <option value="{$item_data.ID}">{$item_data.TEXT} [B][COLOR="Red"]{if ($item_data.STOCK)<='0'}no stock{/if}[/COLOR][/B]</option>[/code]

Leider funktioniert das nicht.

Vielleicht kann jemand ja sehen, was ich falsch mache oder hat eine bessere Idee.

Danke Arnie

Link to comment
Share on other sites

Kein Thema! Du hattest es ja schon fast! ;) Aber hier nochmal als Anleitung auch für die anderen User:

Wichtig: Vorher immer die alten Dateien sichern!

Schritt 1:

In der Datei includes/modules/product_attributes.php sucht ihr 2x nach folgendem Code:

'MODEL' => $products_options['attributes_model'],

und fügt nach dem Komma folgendes ein:

'STOCK' => $products_options['attributes_stock'],

Schritt 2:

In den Templatedateien für die product_options (table_listing.html, product_options_dropdown.html, product_options_selection.html o.ä.) fügt ihr am Anfang der Datei folgende Zeile ein:

{config_load file="$language/lang_$language.conf" section="product_info"}

und danach sucht ihr jeweils nach

{if $item_data.PRICE !='' }{$item_data.PREFIX} {$item_data.PRICE}{/if}

und fügt danach folgendes ein (dies ist individuell anpassbar):

{if $item_data.STOCK <='0' } ({#text_ampel_1#})
{elseif $item_data.STOCK <='2' } ({#text_ampel_2#})
{elseif $item_data.STOCK >='3' } ({#text_ampel_3#}) {/if}[/php]

[b]Schritt 3:[/b]

In den Sprachdateien des Shops (z.B. lang_german.conf usw.) sucht ihr nach

[php][product_info]

und fügt danach dann dies ein (dies ist individuell anpassbar):

text_ampel_1 = 'Derzeit nicht lieferbar'
text_ampel_2 = 'Nur wenige Artikel auf Lager'
text_ampel_3 = 'Artikel auf Lager'[/php]

[b]Schritt 4:[/b]

Fertig und freuen! :)

MfG Hetfield :cool:

Link to comment
Share on other sites

  • 2 weeks later...

Hallo,

ich würde gern auf die Lagerampel verzichten, doch habe ich das Problem, dass bei meinen Attributartikeln, egal ob am Lager oder nicht, generell gesagt wird er wäre nicht am Lager.

Nachdem ich die Menge im Artikel (nicht Attribut) geändert habe, erfolgt aber auch keine Bestandswarnung mehr wenn ein Artikel nicht am Lager ist.

Bei dem Moda24 Shop ist das nicht der Fall. Kann mir jemand sagen, wo und was geändert werden muss, dass diese Funktion auch richtig arbeitet...???

zum testen www.torx-helme.de

Link to comment
Share on other sites

  • 3 weeks later...

Hi Hetfield

Spaet aber doch! Vielen Dank fuer deine Hilfe. Es funktioniert. Damit hast du mir sehr geholfen, denn es ging mir auf den Senkel. das der Kunde erst ein Attribute in der warenkorb legen muss befor er sehen kann ob es ueberhaupt haben kann.

BIG BIG Thank you

Arnie

Link to comment
Share on other sites

Das ist eine sehr interessante Funktion.

Habe das bei mode 24 mal getestet. Was mir allerdings nicht gefällt, ist das man das Produkt wo nicht lieferbar ist trotzdem in den Warenkorb legen kann.

Was mir besser gefallen würde, wäre wenn die Funktion die Größe die nicht lieferbar ist aus dem dropdown feld rausnimmt. Somit kann der Kunde das auch nicht in den warenkorb legen.

Weis jemand wie man die funktion so umschreiben kann??

Link to comment
Share on other sites

  • 2 weeks later...

text_ampel_1 = 'Derzeit nicht lieferbar'

text_ampel_2 = 'Nur wenige Artikel auf Lager'

text_ampel_3 = 'Artikel auf Lager'

Hy hetfield ... vielen Dank für die Hilfe.

Hat alles soweit gefunkt außer das wenn kein artikel mehr auf lager ist "Derzeit nicht lieferbar" und danneben "Nur wenige Artikel auf Lager" neben dem gleichen Attribut steht. Hab alles durchforst und konnte nichts finden. Hat jemand einen Tipp?? Liebe Grüsse und danke mal...

Link to comment
Share on other sites

  • 3 weeks later...

Sorry, hatte hier anstatt elseif nur if geschrieben. Kann passieren. :rolleyes:

Muss natürlich so lauten in den Templatedateien für die product_options:

{if $item_data.STOCK <='0' } ({#text_ampel_1#})
{elseif $item_data.STOCK <='2' } ({#text_ampel_2#})
{elseif $item_data.STOCK >='3' } ({#text_ampel_3#}) {/if}[/php]

MfG Hetfield :cool:

Link to comment
Share on other sites

  • 1 month later...

Hallo Hetfield,

vielen Dank für den Code!!

Habe noch eine Frage.

Könnte man das auch so einrichten das Artikel die nicht auf Lager sind (0) zwar als solche deklariert werden aber dann halt auch nicht ausgewählt werden können?

Ich find das ok wenn es dort steht nur das der Kunde die Artikel dann noch in den Warenkorb schieben kann ist schlecht.

Wie ist das eigentlich im Originalzustand? Gleich nochmal testen ;)

Gruß

EDIT:

Soo nochmal nachgeschaut. Das geht auch in der "original" Version nicht. Da kann man ja dann im Adminbereich einstellen ob der Kunde die Artikel kaufen kann oder nicht. Nur finde ich es eigentlich unlogisch warum der Kunde die Artikel trotzdem noch in den Warenkorb schieben kann um dann hinterher rumeditieren zu müssen, um letzendlich noch eine Bestellung auszuführen.

Leider bin ich nicht der "Ober-Crack" was das Programmieren angeht aber theoretisch könnte man doch eine Abfrage entweder in der "product_attributes.php" oder besser noch in den "product_options" Templates einbauen. Abgefragt wird dann ob der Artikel noch auf Lager ist. Ist dies der Fall wird der Radio-Button angezeigt ELSE wird der nicht angezeigt.

Somit könnte man diesen halt auch nicht auswählen und die Geschichte würde supertoll ausgehen :D

Was meint Ihr?

Link to comment
Share on other sites

Haha...

Schulterklopf ... PREMIERE!!!

Ich habe rumgetüfftelt und es hinbekommen.

Will euch dies natürlich nicht vorenthalten!

Also es ist ganz einfach zu machen:

Es handelt sich um eine einfache IF - ELSE Abfrage

Ich nutze das Tablelisting Template für die Attribute.

Dort habt Ihr ja das FOREACH und genau dahinter kommt die Abfrage!

Sie siehts bei mir aus


{foreach key=key_data item=item_data from=$options_data.DATA}

[B]{if $item_data.STOCK <='0' }[/B]

<tr>

<td width="15">

      	  <input type="radio" name="id[{$options_data.ID}]" disabled value="{$item_data.ID}" />

	  </td>

<td>{$item_data.TEXT}</td>

<td align="left">{if $item_data.MODEL}  {$item_data.MODEL}{/if}</td>

<td align="left">{if $item_data.PRICE} {$item_data.PREFIX}{$item_data.PRICE} {/if}

 	[B]{if $item_data.STOCK <='0' } {#text_ampel_1#}{/if}[/B]</td>

</tr>

[B]{else}[/B]

<tr>

<td width="15">

      {php}

	  $count++;

	  if ($count==1) { 

	  {/php}{if $item_data.PRICE == ""}

	  <input type="radio" name="id[{$options_data.ID}]" value="{$item_data.ID}" checked="checked" />

	  {else}

	  <input type="radio" name="id[{$options_data.ID}]" value="{$item_data.ID}" />

	  {/if}{php}

	  } else {

	  {/php}

	  <input type="radio" name="id[{$options_data.ID}]" value="{$item_data.ID}" />

	  {php}

	  }

	  {/php}</td>

<td>{$item_data.TEXT}</td>

<td align="left">{if $item_data.MODEL}  {$item_data.MODEL}{/if}</td>

<td align="left">{if $item_data.PRICE} {$item_data.PREFIX}{$item_data.PRICE} {/if}

 	[B]{if $item_data.STOCK <='2' } {#text_ampel_2#}

	{elseif $item_data.STOCK >='3' } {#text_ampel_3#} {/if}[/B]</td>

</tr>

{/if}

{/foreach}


Habe zusätlich noch den inaktiven Button "entcheckt" also einfach im Input Part das checked rausnehmen.
	  {/php}{if $item_data.PRICE == ""}

	  <input type="radio" name="id[{$options_data.ID}]" value="{$item_data.ID}" [U][B][COLOR="Red"]checked="checked"[/COLOR][/B][/U] />

	  {else}

Frage die ich jetzt noch habe, wie kann ich das einstellen das einfach der unterste Button gechecked ist? Irgendwie ist jetzt nämlich nichts mehr gecheckt.

Desweiteren wäre da noch die Frage ob das so Sinn macht wie ich es gemacht habe oder ob der Kunde den Artikel trotzdem noch in den Warenkorb bekommt.

Kann sein das ich was übersehen habe und frage nochmal in die Runde.

Wünsch euch nen schönen Wochenstart!

LG

Link to comment
Share on other sites

  • 2 weeks later...
  • 8 months later...

Hallo!

Meinst Du sowas: http://www.moda24.de/Damen/Shirts/Ed-Hardy-Damen-Potassium-Shirt-2007-USCG::315.html

(hier in der Dropdownansicht)

MfG Hetfield :cool:

Danke für diese kleine, aber feine Erweiterung. Genau das was ich suchte. Wie bekomme ich jetzt die die Hintergründe farbig, grün für Verfügbarkeit, gelb für wenig auf Lager und z.B. rot für ausverkauft?

Danke schonmal im voraus

Link to comment
Share on other sites

  • 2 months later...

danke auch für das nette gimmick. Aber ich habe das so gemacht das ich anstatt den satz nur noch wenige Artikel die Anzahl reinschreibe.

Also so z.B:

text_ampel_1 = 'Derzeit nicht lieferbar'

text_ampel_2 = '1 Stk auf Lager'

text_ampel_3 = '2 Stk auf Lager'

text_ampel_4 = '3 Stk auf Lager'

text_ampel_5 = '4 Stk auf Lager'

text_ampel_6 = '5 Stk auf Lager'

text_ampel_7 = '5+ Stk auf Lager'

mfg psico

Link to comment
Share on other sites

  • 2 months later...

Frage die ich jetzt noch habe, wie kann ich das einstellen das einfach der unterste Button gechecked ist? Irgendwie ist jetzt nämlich nichts mehr gecheckt.

In der Dropbox habe ich dein Problem so gelöst:

{config_load file="$language/lang_$language.conf" section="product_info"} 

{if $options!=''}


<table width="100" border="0" cellspacing="0" cellpadding="0">

  {foreach name=outer item=options_data from=$options} 

  <tr>

    <td class="main"><b>{$options_data.NAME}:</b> </td>

    <td>

	<select name="id[{$options_data.ID}]">

  {foreach key=key_data item=item_data from=$options_data.DATA}

  <option value="{$item_data.ID}" [B]{if $item_data.STOCK <='0' }disabled="disabled"{/if}[/B]>{$item_data.TEXT} {if $item_data.PRICE !='' }{$item_data.PREFIX} {$item_data.PRICE}{/if}

   	{if $item_data.STOCK <='0' } ({#text_ampel_1#})

	{elseif $item_data.STOCK <='1' } ({#text_ampel_2#})

	{elseif $item_data.STOCK <='2' } ({#text_ampel_3#})

	{elseif $item_data.STOCK <='3' } ({#text_ampel_4#})

	{elseif $item_data.STOCK <='4' } ({#text_ampel_5#})

	{elseif $item_data.STOCK <='5' } ({#text_ampel_6#})

	{elseif $item_data.STOCK >='5' } ({#text_ampel_7#})

	 {/if}  </option>

{/foreach}

</select>

</td>

  </tr>

  {/foreach} 

</table>

{/if}

Gruß Phonk

Link to comment
Share on other sites

  • 2 months later...

Hi!

Ich habs x mal geprüft und trotz implementierung exakt nach Hetfields Anleitung bekomme ich folgende Fehlermeldung:

Fatal error: Smarty error: [in pk1/module/product_options/product_options_count20.html line 4]: syntax error: unrecognized tag: config_load file="german/lang_german.conf" section="product_info" (Smarty_Compiler.class.php, line 439) in /is/htdocs/wp1100535_HD5SVM7POQ/www/shop/includes/classes/Smarty_2.6.14/Smarty.class.php on line 1095

Ich hab die options mal angehängt. Hab ich irgendwas nicht beachtet?

Merci vielmals, Peter

product_options_count20.html

Link to comment
Share on other sites

  • 3 weeks later...
  • 1 month later...

Hallo Hetfield

habe auch versucht dies um zu setzen möchte aber keine Ampel sondern nur die Anzahl der vorhandenen Attribute wie z.b. Blau 100, Gelb 60 was muß ich ändern um den Eintag aus der Datenbank laden zu können in den Option:confused: über Antwort würde ich mich freuen.

Mfg

Stephan

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...