0 Пользователей и 1 Гость просматривают эту тему.
  • 2 Ответов
  • 123 Просмотров
*

maxbat

  • Новичок
  • 1
  • 0 / 0
У кого есть решение модуля который смог бы показывать список похожих материалов сравнивая метки текущего материала с метками материалов заданных категорий. Например находясь на странице с метками(тегами) "красный, бензиновый, bmw" вывести список похожих материалов в которых есть наибольшее совпадение по меткам. Аналогично модулю "Материалы - Связанные материалы", но не по ключевым словам а именно по меткам.

Своими силами получается вот что:
Код
<?php defined('_JEXEC') or die;

// id текущего материала
$id_mat = JFactory::getApplication()->input->getCmd('id', '');

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select(array('content_item_id','tag_id'));
$query->from($db->quoteName('#__contentitem_tag_map'));
$db->setQuery($query);
$results = $db->loadRowList();

$a=array();//массив id меток текущего материала
foreach ($results as $val) { if($val[0]==$id_mat) {array_push($a,$val[1]);} }

// определяем макс ID
$max_id=0;
foreach ($results as $val) { if($val[0]>$max_id) $max_id=$val[0]; }
$max_id++;

$z=[]; //массив совпадений
$z=array_pad($z, $max_id,'0');//задаем размер и обнуляем его

foreach ($results as $val) {
    if(array_search($val[1], $a)!==false) {$z[$val[0]]++;}//есть совпадение, увеличиваем ячейку с индексом равным ID материала на 1.
}

$z[$id_mat]=0; // удаляем из массива ID текущего материала


Гуру, помогите дальше пожалуйста!
P.S. Вот только ругать не надо, лучше подскажите как надо. Я ведь не волшебник - я только учусь!
« Последнее редактирование: 26.10.2020, 16:17:48 от maxbat »
*

gartes

  • Завсегдатай
  • 1630
  • 127 / 5
  • Е = mс²
Первое  чего я бы поправил - это заменил вывод результата не в $results = $db->loadRowList();
Код
$db = \Joomla\CMS\Factory::getDbo();
$query = $db->getQuery(true);
$query->select(array('content_item_id','tag_id'));
$query->from($db->quoteName('#__contentitem_tag_map'));
$db->setQuery($query);
$results = $db->loadAssocList();

// И тогда
$a=array();//массив id меток текущего материала
foreach ($results as $val) {
    if($val['content_item_id']==$id_mat) {
        array_push($a,$val['tag_id']);
    }
}

*

gartes

  • Завсегдатай
  • 1630
  • 127 / 5
  • Е = mс²
решение Ваше  - простите неправильно !
Нет под рукой Joomla  - сайта !  с метками !
Что там в таблице у вас #__contentitem_tag_map - Срин киньте !
Посмотрим ! - Напомните в личку - сто бы не потерялось !
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как ограничить область поиска материалов?

Автор zahar_92

Ответов: 7
Просмотров: 152
Последний ответ 24.01.2021, 21:47:53
от sivers
Логи материалов

Автор Артём46

Ответов: 3
Просмотров: 105
Последний ответ 23.01.2021, 16:50:42
от beliyadm
Модуль Yandex map

Автор baren

Ответов: 6
Просмотров: 154
Последний ответ 11.01.2021, 14:36:32
от baren
Пакетная загрузка 1000 фото и создание 1000 материалов

Автор slepoy

Ответов: 2
Просмотров: 117
Последний ответ 04.01.2021, 00:51:55
от pavelrer
Редактор материалов сейвится на http error 500

Автор Усач911

Ответов: 3
Просмотров: 128
Последний ответ 29.12.2020, 11:01:33
от draff