Есть размерная сетка на opencart 2.3, ее нужно повторить но уже на opencart 3:
на двойке она сделана на чистом php в tpl файле (product.tpl), но opencart 3 поддерживает только twig формат, поэтому скопировать просто php код на тройку не получится (product.twig)
Вот код на opencart 2.3:
<table>
<?php
$s1 = array();
$s2 = array();
$arr = array();
foreach ($option['product_option_value'] as $option_value) {
list($a, $b) = explode("x", $option_value['name']);
$s1[] = intval($a);
$s2[] = intval($b);
$arr[intval($a)][] = array(intval($b), $option_value['product_option_value_id']);
}
$id = $option['product_option_id'];
$s1 = array_unique($s1);
rsort($s1);
$s2 = array_unique($s2);
sort($s2);
foreach ($s1 as &$value) {
echo "<tr>";
echo "<td>".$value."</td>";
foreach ($s2 as &$value2) {
echo "<td>";
$p = false;
foreach ($arr[$value] as &$value3) {
if($value3[0] == $value2){
$p = true;
$val = $value3[1];
}
}
if ($p) {
echo "<label><input type='radio' name='option[".$id."][]' value='".$val."' required /><span class='stock' val='".$val."' name ='".$value."x".$value2."' vid='".$id."'></span></label>";
}
else{
echo "<span class='out-stock'></span>";
}
echo "</td>";
}
echo "</tr>";
}
echo "<tr><td></td>";
foreach ($s2 as &$value) {
echo "<td>".$value."</td>";
}
echo "</tr>";
?>
</table>
В админке опции прописаны вот так: 170x52, 170x54, 170x60, 176x52, 176x54, 176x60, 182x52, 182x54, 182x60 (пример)
Пытался воспользоваться онлайн сервисом http://phptotwig.com/ , но выдает ошибку на строке с explode
Пытался адаптировать сам этот код под твиг, но опыта в этом мало, вот что получилось:
<table>
<tbody>
{% for option_value in option.product_option_value %}
<tr>
<td>{{ option_value.name | split('x', 2)[0] }}</td>
<td><label><input type="radio" name="option[{{ option.product_option_id }}][]" value="{{ option_value.product_option_value_id }}" required=""><span class="stock" val="{{ option_value.product_option_value_id }}" name="{{ option_value.name }}" vid="402"></span></label></td>
</tr>
{% endfor %}
<tr>
<td></td>
{% for option_value in option.product_option_value %}
<td>{{ option_value.name | split('x', 2)[1] }}</td>
{% endfor %}
</tr>
</tbody>
</table>
Может есть модуль для такой сетки? Или лучше уже допилить код? Подскажите, пожалуйста, в какую сторону нужно копать.