Здравствуйте.
Есть ли модуль или вывод для views, который бы показывал похожие товары относительно текущего.
Можно ли ссылки?
Меня интересует скорее всего похожесть товаров по одиннаковости атрибутов.
Заранее спасибо за советы.
Решение сделал сам: http://www.drupal.ru/node/59832#comment-333874.
Комментарии
Послушаю, что другие скажут, тоже интерестно
Поищите в форуме - можно настроить с помощью views с аргументами и таксономии.
uc_upsell?
За uc_upsell спасибо, но он немного другую функцию выполняет. В моем случае вообще не ту.
Сделал в итоге для себя небольшой код.
Показывает список нод с такими же терминами из выбранного словаря, что и у показываемой ноды.
Ноды с большим совпадением элементов показываются выше.
Для терминов можно задать значимость вывода в списке терминов словаря.
Вывод согласно их весам.
<?php
$voc_rel = 3;
$tids = array();
$nids = array();
$terms = $node->taxonomy;
foreach ($node->taxonomy as $tid => $term) {
if ($term->vid == $voc_rel) {
if (!isset($weight_max)) {
$max_weight = abs($term->weight);
}
elseif (abs($term->weight) > $max_weight) {
$max_weight = abs($term->weight);
}
$tids[] = $tid;
}
else {
unset($terms[$tid]);
}
}
$c_tids = count($tids);
if ($c_tids) {
// Коэфф. умножения веса
$koef = (isset($max_weight) && $max_weight != 0) ? 49/$max_weight : 1;
// Переворачивание весов терминов
for ($i=0; $i<floor($c_tids/2); $i++) {
$temp = $terms[$tids[$i]]->weight;
$terms[$tids[$i]]->weight = $terms[$tids[$c_tids-$i-1]]->weight;
$terms[$tids[$c_tids-$i-1]]->weight = $temp;
}
foreach ($terms as $tid => $term) $terms[$tid]->weight = $terms[$tid]->weight * $koef + 50;
$sql = db_query("SELECT t.nid, t.tid
FROM {term_node} t
LEFT JOIN {node} n ON t.vid = n.vid
WHERE n.type = '%s' AND n.status <> 0 AND t.nid <> %d AND t.tid IN (%s)
LIMIT 10", $node->type, $node->nid, implode(', ', $tids));
while ($t = db_fetch_object($sql)) {
if (isset($nids[$t->nid])) {
if ($terms[$t->tid]->weight > ($nids[$t->nid][1] % 100)) {
$nids[$t->nid][1] = ceil($nids[$t->nid][1] / 100) * 100 + $terms[$t->tid]->weight;
}
else {
$nids[$t->nid][1] += 100;
}
}
else {
$nids[$t->nid][0] = $t->nid;
$nids[$t->nid][1] = $terms[$t->tid]->weight;
}
}
function sort_weights($a, $b) {
if ($a[1] == $b[1]) return 0;
return ($a[1] > $b[1]) ? -1 : 1;
}
usort($nids, 'sort_weights');
foreach ($nids as $i => $n) $nids[$i] = $n[0];
}
?>
Конечный массив нод использую для вывода вьювсы.
Можно, конечно, было сделать решение через атрибуты товара (а лучше через доступные атрибуты) и, возможно, это было бы даже правильнее, но в этом случае решение было бы уже отдельным модулем, хотя использовало те же концепции, что и этот код.
Но плюс того решения, что он был бы полностью автоматическим, так как для этого решения надо ещё вводить доп. словарь с со своими терминами.
[quote=juliv]Конечный массив нод использую для вывода вьювсы.
Добрый день. У меня такая же задача вывода похожих товаров. Очень заинтересовало ваше решение. Подскажите пожалуйста как использовать этот массив во views?
Comparison of Similiar / Relevant content block modules:
http://drupal.org/node/323329