2016-12-10 1 views
0

Je travaille dans Opencart 2.3 & Je me suis retrouvé dans une situation où nous avons besoin de décimales converties en fractions. Je travaille avec la page category.tpl, et nos produits sont affichés dans une liste sur la page. Les attributs varient selon le produit.

Exemple; Une page a la couleur Attributs, la longueur A et la longueur B. Les données du produit A sont actuellement affichées dans le graphique sous la forme: Bleu, 5.5, 10.75. Nous aimerions qu'il produise: Bleu, 5 1/2, 10 3/4

Y a-t-il un moyen de mettre la variable $ attribute ['text']; dans un filtre, qui crache une fraction (au lieu de la décimale)? Notez également que nous aurions besoin de Blue pour cracher Blue still.

-Merci, Michael P.

Voici le code ci-dessous:

<?php if ($product['attribute_groups']) { ?> 
     <?php foreach ($product['attribute_groups'] as $attribute_group) { ?> 
      <?php foreach ($attribute_group['attribute'] as $attribute) { ?> 

    <div class="attGroup matchHeight"><?php echo $attribute['text']; ?> </div> 

       <?php } ?> 
      <?php } ?> 
     <?php } ?> 

Répondre

0

Si l'on suppose il n'y a que quelques fractions de realisticly utilisées, vous pouvez prevously les enregistrer, puis utiliser ce registre pour convertir toute valeur décimale trouvée.

Il pourrait être quelque chose comme ceci:

function dec2frac($x) { 
    $dec_parts = [ 
     25 => '1/4', 
     50 => '1/2', 
     75 => '3/4', 
    ]; 

    $int_part = floor($x); 
    echo $dec_part = ($x - $int_part) * 100; 
    if (isset($dec_parts[$dec_part])) { 
     $x = $int_part . ' ' . $dec_parts[$dec_part]; 
    } 
    return $x; 
} 

Ensuite, votre partie HTML serait:

<div class="attGroup matchHeight"><?php echo dec2frac($attribute['text']); ?> </div> 
0

avec l'aide de cet algorithme: Converting float decimal to fraction

essayez ceci:

function float2rat($n, $tolerance = 1.e-6) { 
    $h1=1; $h2=0; 
    $k1=0; $k2=1; 
    $b = 1/$n; 
    do { 
     $b = 1/$b; 
     $a = floor($b); 
     $aux = $h1; $h1 = $a*$h1+$h2; $h2 = $aux; 
     $aux = $k1; $k1 = $a*$k1+$k2; $k2 = $aux; 
     $b = $b-$a; 
    } while (abs($n-$h1/$k1) > $n*$tolerance); 

    return "$h1/$k1"; 
} 


function printNiceAttr($attrString) { 
    $arr = explode(',', $attrString); 
    $color = trim($arr[0]); 
    $size1A = explode('.', $arr[1]); 
    $size1F = float2rat((float) ('0.' . $size1A[1])); 

    $size2A = explode('.', $arr[2]); 
    $size2F = float2rat((float) ('0.' . $size2A[1])); 
    return $color . ', ' . $size1A[0] . ' ' . $size1F . ', ' . $size2A[0] . ' ' . $size2F; 
} 

echo printNiceAttr('Blue, 5.5, 10.75'); //outputs Blue, 5 1/2, 10 3/4