Таблица сравнения данных

croatian

Новичок
Таблица сравнения данных

Краткое описание проблемы:

На сайте есть возможность сравнивать продукцию из каталога. У каждой продукции есть свой набор характеристик. Продукцию в "корзину сравнений" можно добавить сколько угодно. Когда мы сравниваем продукции то возникает таблица сравнений.

Двигатель: 3.0 | 2.0 | 1.6
Если все значения столбцов в строке не равные - то вся строка должна отобразиться другим цветом.

У меня есть:
- массив данных уникальных характеристик (чтобы не было 2 строки "Двигатель") - создана с помощью array_unique, после цикла всех продукций для сравнения (array('Двигатель', 'Мощность'));
- массив данных с информацией о продукции (array(0 => array('Модель' => 'Opel', 'Двигатель' => '2.0')));

В Smarty мы просто сравниваем ключи и получаем значения.

Есть несколько идей для реализации:
- либо для каждой строки делать цикл с сравнениями;
- либо с помощью PHP создать новый массив с перечнем ключей, которые нам будут выданы, после сравнения массивов с продукцией;
 

kruglov

Новичок
Мне кажется, что Smarty не есть язык программирования, достойный того, чтоб писать на нем, а не на PHP.
 

Yuriy_S

-=PHP-Club=-
не стоит перегружать шаблонизатор теми задачами, которые должны быть реализованы на PHP.
Так же не означает и то, что если Smarty позволяет реализовать собственными средствами некоторую логику (решение задачи), то в него нужно пихать все подряд
 

croatian

Новичок
В Smarty входят только 2 массива:
- массив уникальных ключей;
- массив с продукцией;

Выполняется один цикл с подстановкой. Не вижу, где здесь "пихать все подряд"
 

kruglov

Новичок
Приходить должен массив для рисования таблицы. Двумерный. Строки-ячейки.
 

Balloon

Новичок
Автор оригинала: croatian
В Smarty входят только 2 массива:
- массив уникальных ключей;
- массив с продукцией;

Выполняется один цикл с подстановкой. Не вижу, где здесь "пихать все подряд"
В массиве уникальных ключей должно быть не только название характеристики, но и флаг показывающий одинаковые ли значения в строке.
А значение флага считать в php при формировании массива.

к примеру:
array(
array('name'=>'Двигатель', 'hasDifference' => 1),
...
)
 

croatian

Новичок
Совершенно верно! Именно так и происходит. Только проблема не в этом.

Изначально планировалось 2 элемента продукции сравнивать, но потом возникло желание убрать ограничение в количестве. Следовательно если с 2 элементами можно было использовать банальное сравнение, то сейчас такой способ отпадает.

Либо вычислять схождения массивов элементов продукции, и результат выводить в новый массив, потом уже сверять, либо еще какой-то способ.
 

Balloon

Новичок
ну можно использовать и не банальное сравнение

например такое:
count(array_unique($array)) == count($array)
 

croatian

Новичок
Balloon
Спасибо за идею с флагами, - действительно, в моем случае это лучший вариант для меня.
 
Сверху