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

maxbat

  • Новичок
  • 5
  • 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

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = 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

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

Как вставить модуль в код нужной страницы php?

Автор zvi

Ответов: 9
Просмотров: 3833
Последний ответ 21.02.2024, 11:03:08
от saynez
Не удается разблокировать в менеджере материалов.

Автор vityavoluevich

Ответов: 0
Просмотров: 235
Последний ответ 10.01.2024, 09:05:30
от vityavoluevich
Убрать из модуля новостей ссылку на статью, на которой выводится модуль

Автор zeus07

Ответов: 3
Просмотров: 718
Последний ответ 08.11.2023, 21:17:26
от GrayAn
Модуль Похожие метки – только более ранние статьи!

Автор Gerostrat

Ответов: 6
Просмотров: 453
Последний ответ 24.08.2023, 21:56:09
от sivers
Модуль для опросов Advanced Poll не работает

Автор Escander

Ответов: 15
Просмотров: 1424
Последний ответ 02.06.2023, 20:10:22
от kzalmatuy1