[Решено] Ищу модуль "Похожие товары"

Главные вкладки

Аватар пользователя juliv juliv 30 марта 2011 в 11:25

Здравствуйте.

Есть ли модуль или вывод для views, который бы показывал похожие товары относительно текущего.
Можно ли ссылки?
Меня интересует скорее всего похожесть товаров по одиннаковости атрибутов.

Заранее спасибо за советы.

Решение сделал сам: http://www.drupal.ru/node/59832#comment-333874.

Комментарии

Аватар пользователя juliv juliv 8 апреля 2011 в 13:43

За 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->nidimplode(', '$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;
  }
  
usort($nids'sort_weights');
  foreach (
$nids as $i => $n$nids[$i] = $n[0];
}
?>
Аватар пользователя juliv juliv 8 апреля 2011 в 13:48

Конечный массив нод использую для вывода вьювсы.

Можно, конечно, было сделать решение через атрибуты товара (а лучше через доступные атрибуты) и, возможно, это было бы даже правильнее, но в этом случае решение было бы уже отдельным модулем, хотя использовало те же концепции, что и этот код.
Но плюс того решения, что он был бы полностью автоматическим, так как для этого решения надо ещё вводить доп. словарь с со своими терминами.

Аватар пользователя ex3m1287 ex3m1287 11 июля 2013 в 10:17

[quote=juliv]Конечный массив нод использую для вывода вьювсы.

Добрый день. У меня такая же задача вывода похожих товаров. Очень заинтересовало ваше решение. Подскажите пожалуйста как использовать этот массив во views?