Preise zu den Varianten anzeigen

Hat schon mal jemand Preise der Varianten ausgelesen und direkt beim Artikel dargestellt ohne dass man jede Varante einzeln anwählen muß?

Irgendwie finde ich dazu nichts brauchbares.

Die Varianten sind eindimensional, der Vater ist nicht kaufbar.

Es wäre schön zum Artikel entweder in der Detailansicht aber auch in der Listenansicht die Variantenpreise in irgendeiner Form als Übersicht darzustellen. Entweder in einer eigenen Liste oder am Besten gleich innerhalb der selectbox wo man die Varianten auswählt.

Müsste eigentlich nicht so schwierig sein, weil nur die Artikeltabelle ausgelesen werden müsste. Es gibt ja keine Berechnungen weils nur eindimensionale Varianten sind.

Grüße

Ich habe jetzt mal etwas “schmutziges” zusammengebastelt. Zumindest bekomme ich zum Artikel die Varianten, den Namen der Varianten und den Preis der Variante. Leider ist ist es noch ein furchtbares Stückwerk und braucht zumindest zur Darstellung noch eine Foramtierung. Vielleicht gibt mir jemand einen Hinweis, wie das alles zu vereinfachen ist.

Hier meine bisherigen Fortschritte:

Ich habe die core/smarty/plugins/function.oxvariantselect.php “mißbraucht” und nach oxvariantpriceWB.php kopiert und etwas verändert (siehe unten). Aus einem Frontend Template wie z.B. der selectbox.tpl bekomme ich mit dem Eintrag

[{oxvariantpriceWB value=$product->getMdVariants()}]

die Liste mit Namen und Preis der Varianten aus dem oxvariantpriceWB angezeigt.

Hier meine function.oxvariantpriceWB.php

<?php
/**

  • This file is part of OXID eShop Community Edition.
  • OXID eShop Community Edition is free software: you can redistribute it and/or modify
  • it under the terms of the GNU General Public License as published by
  • the Free Software Foundation, either version 3 of the License, or
  • (at your option) any later version.
  • OXID eShop Community Edition is distributed in the hope that it will be useful,
  • but WITHOUT ANY WARRANTY; without even the implied warranty of
  • MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  • GNU General Public License for more details.
  • You should have received a copy of the GNU General Public License
  • along with OXID eShop Community Edition. If not, see <http://www.gnu.org/licenses/>.
  • @link http://www.oxid-esales.com
  • @copyright © OXID eSales AG 2003-2014
  • @version OXID eShop CE
    */

/**

  • Smarty function


  • Purpose: outputs HTML and JavaScript selectboxes for MD variant management

  • call example:

  • [{oxvariantpriceWB value=$product->getMdVariants() separator=" " artid=$product->getId()}]


  • @param array $params params

  • @param Smarty &$smarty clever simulation of a method

  • @return string
    */
    function smarty_function_oxvariantpriceWB( $params, &$smarty )
    {
    $sOutput = ‘’;
    $oMdVariants = $params[‘value’];
    $sSeparator = $params[‘separator’];
    //default selected art id
    $sArtId = $params[‘artid’];

    if (!$sArtId || !$oMdVariants->hasArticleId($sArtId)) {
    $sArtId = $oMdVariants->getArticleId();
    }

    //all select boxes
    $aSelectBoxes = array();
    //real variants to MD variants
    $aRealVariants = array();

    if (count($oMdVariants->getMdSubvariants())) {
    $sOutput = oxvariantpriceWB_addSubvariants($oMdVariants->getMdSubvariants(), 0, $aSelectBoxes, $aRealVariants, $sSeparator, $sCallMethod, $sArtId);
    $sOutput .= oxvariantpriceWB_formatJsSelecBoxesArray($aSelectBoxes);
    $sOutput .= oxvariantpriceWB_formatJsRealVariantArray($aRealVariants);
    }

    return $sOutput;
    }

/**

  • Recursiovely adds selection box of for subvariants

  • @param array[string]OxMdVariant $oMdVariants Variant list

  • @param int $iLevel Depth level

  • @param array[int][int]string &$aSelectBoxes Cummulative array of select boxes

  • @param array[string]string &$aRealVariants Cummulative array or real variants

  • @param string $sSeparator Separator placed between select boxes

  • @param string $sCallMethod Method to be called to display the variant

  • @param string $sArtId Default selected article Id

  • @return string
    */
    function oxvariantpriceWB_addSubvariants($oMdVariants, $iLevel, &$aSelectBoxes, &$aRealVariants, $sSeparator, $sCallMethod, $sArtId)
    {
    $sRes = ‘’;
    $aOptions = array();
    if (count($oMdVariants)) {
    $blVisible = false;
    $sSelectedVariant = null;
    foreach ($oMdVariants as $sKey => $oVariant) {
    $sSelectBoxName = “mdVariantSelect_”.$oVariant->getParentId();
    $aSelectBoxes[$iLevel][] = $sSelectBoxName;
    $aOptions[$oVariant->getId()] = $oVariant->getName();
    if ($oVariant->hasArticleId($sArtId)) {
    $blVisible = true;
    }

         if ($oVariant-&gt;hasArticleId($sArtId)) {
             $sSelectedVariant = $oVariant-&gt;getId();
         }
    
     }
    
     $sRes .= oxvariantpriceWB_formatSelectBox($sSelectBoxName, $aOptions, $iLevel, $blVisible, $sSelectedVariant) . "
    

";
$sRes .= $sSeparator;

    //add select boxes recursively
    foreach ($oMdVariants as $oVariant) {
        $sRes .= oxvariantpriceWB_addSubvariants($oVariant-&gt;getMdSubvariants(), $iLevel+1, $aSelectBoxes, $aRealVariants, $sSeparator, $sCallMethod, $sArtId);

        //no more subvariants? Mseans we are the last level select box, good enought to register a real variant now
        if (!count($oVariant-&gt;getMdSubvariants())) {
            $aRealVariants[$oVariant-&gt;getId()]['id'] = $oVariant-&gt;getArticleId();
            $aRealVariants[$oVariant-&gt;getId()]['link'] = $oVariant-&gt;getlink();
			$aRealVariants[$oVariant-&gt;getId()]['price'] = $oVariant-&gt;getFPrice(); /* Mane hier der Preis */
			$aRealVariants[$oVariant-&gt;getId()]['title'] = $oVariant-&gt;getName(); /* Mane hier der Name */
        }
    }
}

return $sRes;

}

/**

  • Formats variant select box
  • @param string $sId Select box id
  • @param array[string]string $aOptions Select box options
  • @param int $iLevel Level information (counted from 0)
  • @param bool $blVisible Initial select list visibility
  • @param string $sSelected Selected variant
  • @return string
    /
    function oxvariantpriceWB_formatSelectBox($sId, $aOptions, $iLevel, $blVisible, $sSelected)
    {
    /
    Mane hier alles gelöscht weil es die Ausgabe störte, ohne den ganzen Block gehts aber nicht mehr */
    }

/**

  • Formats Select Box array in JavaScritp format
  • @param array[int][int]string $aSelectBoxes Select box array
  • @return string
    /
    function oxvariantpriceWB_formatJsSelecBoxesArray($aSelectBoxes)
    {
    /
    Mane hier alles gelöscht weil es die Ausgabe störte, ohne den ganzen Block gehts aber nicht mehr */
    }

/**

  • Formats Real Variant array in JavaScritp format

  • @param array[string]string $aRealVariants Select box array

  • @return string
    /
    /
    Mane nachfolgenden Block für die Ausgabe verwendet */
    function [COLOR=“Red”]oxvariantpriceWB_formatJsRealVariantArray($aRealVariants)
    {
    $iCount = count($aRealVariants);
    $sRes .= “<ul>
    ”;
    foreach ($aRealVariants as $sMdVarian => $sRealVariant) {
    $sRes .= " <li>" . $sRealVariant[‘title’] . “</li>
    ”;
    $sRes .= " <li>" . $sRealVariant[‘price’] . “</li>
    ”;
    }
    $sRes .= “</ul>
    ”;

    return $sRes;
    }[/COLOR]

Mit der Bitte um Hinweise und Ideen:p