Nachkommastellen bei den Produktedaten

  • Hallo zusammen
    Im Produkt-Layout unter den Stilvorlagen, werde bei den Artikel-Details die Artikel Abmessungen und das Gewicht mit 4 Nachkommastellen angezeigt.
    Dies erfolgt über folgende Syntax:




    Artikel Abmessungen und Gewicht
    Produktlänge: 4.0000CM
    Produktbreite: 4.0000CM
    Produkthöhe: 5.0000CM
    Produktgewicht: 0.5000KG
    Produktverpackung: 0.5000KG
    Artikeleinheiten pro Packung: 6


    Wie kann die Anzeige auf 3 Nachkommastellen reduzieren?
    Schön wäre auch, wenn zwischen dem jeweiligen Wert und der Bezeichnung (CM/KG) ein Leerzeichen wäre.

    Einmal editiert, zuletzt von rto () aus folgendem Grund: Nachtrag

  • Servus,


    das einfachste wäre wohl round().


    $this->product->product_packaging.$this->product->product_unit


    zu


    round($this->product->product_packaging.$this->product->product_unit, 3)


    Hope it helps
    Stefan


    PS. Bitte dieses hier kurz lesen: Warum bekomme ich keine hilfreichen Antworten

  • Hallo und herzlichen Dank für das Feedback.
    Mir ist jedoch unklar, wo ich den round setzen muss:


    if ($this->product->product_packaging > 0) {
    echo '<div>'.JText::_('COM_VIRTUEMART_PRODUCT_PACKAGING').': ' .$this->product->product_packaging.$this->product->product_unit.'</div>';


    Habe diverses ausprobiert und erhalte immer eine weisse Seite.

  • Hallo und herzlichen Dank für das Feedback.
    Mir ist jedoch unklar, wo ich den round setzen muss:


    if ($this->product->product_packaging > 0) {
    echo '<div>'.JText::_('COM_VIRTUEMART_PRODUCT_PACKAGING').': ' .$this->product->product_packaging.$this->product->product_unit.'</div>';


    Habe diverses ausprobiert und erhalte immer eine weisse Seite.




    Code
    1. if ($this->product->product_packaging > 0) {
    2. echo '<div>'.JText::_('COM_VIRTUEMART_PRODUCT_PACKAGING').': ' . round($this->product->product_packaging.$this->product->product_unit, 3) .'</div>';
  • Code
    1. if ($this->product->product_packaging > 0) {
    2. echo '<div>'.JText::_('COM_VIRTUEMART_PRODUCT_PACKAGING').': ' . round($this->product->product_packaging.$this->product->product_unit, 3) .'</div>';


    Das ist leider falsch. Die Einheit darf nicht im Round stehen, es ist also

    Code
    1. echo '<div>'.JText::_('COM_VIRTUEMART_PRODUCT_PACKAGING').': ' . round($this->product->product_packaging, 3) . $this->product->product_unit .'</div>';


    und eigentlich ohne die : und noch besser mit sprintf, eigentlich. Aber es gibt da noch was viel besseres und da muß man noch nichtmal coden.


    product customfields :-) und zwar vom typ P, Property. Ich weiß grad nicht, wie es auf Deutsch heißt. Beim Prototyp stellste ein "COM_VIRTUEMART_CUSTOM_PARAM_ROUND" auf ja. (jaja is no ni übersetzt, mea culpa). Wenn man das dann im Produkt einstellt, kann man z.B. einstellen "zeige mir das Produktgewicht" und dort kann man direkt das Rounding einstellen. Einfach das Feld dahinter.


    Dann mußte in dein Layout das customfield einbauen, daß ist aber nur die Copy einer Zeile und gehört eigentlich zum Grundzeug, weil es einfach extrem viel vereinfacht, wenn man die Customfields und sublayouts versteht. :-)


    Mehr info hier Customfields - VirtueMart Documentation


    Hier Custom Fields - VirtueMart Documentation


    und hier Sublayouts - VirtueMart Documentation


    okey, merke gerade, das was ich jetzt schreibe sollte auch noch ins Manual, man rendert beliebe customfields so


    Code
    1. echo shopFunctionsF::renderVmSubLayout('customfields',array('product'=>$this->product,'position'=>'ontop'));


    Der Witz ist, "ontop" ist eine Position, welche man selber im prototype setzt. Das heißt da kann man auch schreiben "dielaenge" (ascii is immer besser). Das setzt man dann bei der Position im Prototype des Customfield ein und schon tauchen alles customfields mit dieser Position dort auf. Die Reihenfolge ist imho die, welche im Produkt gesetzt ist.


    Das ganze macht man dann am besten noch mit einen Stammprodukt, dann gilt das für alle Kinder. Das heißt in manchen shops, legt man das einmal an, macht immer Kinder von diesem Hauptprodukt und man muß sich nie mehr drum kümmern. :-)


    Ich merke gerade, das ist alles noch viel zu verborgen, aber macht eigentlich den Witz von vm3 aus. Es ist nicht nur einfacher zu warten, es ist auch viel schneller, weil die Customfields nur einmal angelegt werden. Sie werden dann bei 50 Produkten auch nur einmal geladen.

  • Das ist leider falsch. Die Einheit darf nicht im Round stehen, es ist also

    Code
    1. echo '<div>'.JText::_('COM_VIRTUEMART_PRODUCT_PACKAGING').': ' . round($this->product->product_packaging, 3) . $this->product->product_unit .'</div>';


    Danke für die Richtigstellung, die Einheit hatte ich glatt übersehen.