Показ схожих информационных элементов на основе меток

Модератор
#
Показ схожих информационных элементов на основе меток
Выбирает 5 случайных элементов из информационной системы, имеющих хотя бы один общий тег с исходным и добавляет такие элементы контроллеру в тег samenews.

Код вносится в типовую дин. страницу ИС перед показом контроллера.
$oInformationsystem_Item = Core_Entity::factory('Informationsystem_Item', $Informationsystem_Controller_Show->item);
$oTag_Informationsystem_Items = $oInformationsystem_Item->Tag_Informationsystem_Items->findAll();

// Минимальное количество тегов для совпадения.
$iSameTags = 2;

$aTagIds = array();
foreach($oTag_Informationsystem_Items as $oTag_Informationsystem_Item)
{
   $aTagIds[] = $oTag_Informationsystem_Item->tag_id;
}

if (count($aTagIds))
{
   $oSameTag_Informationsystem_Items = Core_Entity::factory('Tag_Informationsystem_Item');
   $oSameTag_Informationsystem_Items->queryBuilder()
      ->select('tag_informationsystem_items.*')
      ->where('tag_id', 'IN', $aTagIds)
      ->where('tag_informationsystem_items.informationsystem_item_id', '!=', $oInformationsystem_Item->id)
      ->join('informationsystem_items', 'tag_informationsystem_items.informationsystem_item_id', '=', 'informationsystem_items.id')
      ->join('informationsystems', 'informationsystem_items.informationsystem_id', '=', 'informationsystems.id')
      ->where('informationsystems.site_id', '=', CURRENT_SITE)
      ->groupBy('informationsystem_items.id')
      ->having('COUNT(tag_id)', '>=', $iSameTags)
      ->clearOrderBy()
      ->orderBy('RAND()')
      ->limit(5);

   $aSameTag_Informationsystem_Items = $oSameTag_Informationsystem_Items->findAll();

   $oXmlSamenews = Core::factory('Core_Xml_Entity')->name('samenews');
   $Informationsystem_Controller_Show->addEntity($oXmlSamenews);

   foreach($aSameTag_Informationsystem_Items as $oSameTag_Informationsystem_Item)
   {
      $oXmlSamenews->addEntity(
         $oSameTag_Informationsystem_Item->Informationsystem_Item->clearEntities()
      );
   }
}


в $iSameTags указывается минимальное количество тегов для совпадения.

вариант для пятой версии http://www.hostcms.ru/forums/22/3172/
#
Re: Показ схожих информационных элементов на основе меток
Допустим для элемента ИС есть 30 похожих (удовлетворяющих условию) - при каждом заходе на страничку список из 5 похожих каждый раз будет разным?

Просто стоит задача в автоматическом режиме выводить похожие статьи, но для конкретной новости этот список должен быть статичным. Беспокоит фактор времени для передачи веса по ссылке.
#
Re: Показ схожих информационных элементов на основе меток
Подскажите как правильно вывести в шаблоне?
Скрипт добавил теперь в XML вижу в <samenews>Схожие ИС</samenews> а выести тяму не хватает
#
Re: Показ схожих информационных элементов на основе меток
Разобрался, решил выложить для таких-же как я которые еще учатся дабы упростить жизнь
В шаблоне вывода элемента информационной системы добавляем:
Оригинал
   
<xsl:template match="/">
      <xsl:apply-templates select="/informationsystem/informationsystem_item"/>
   </xsl:template>


Измененный
   <xsl:template match="/">
      <xsl:apply-templates select="/informationsystem/informationsystem_item"/>
<xsl:apply-templates select="/informationsystem/samenews/informationsystem_item"/>
   </xsl:template>

и добавляем сам шаблон для оформления похожих статей
<xsl:template match="/informationsystem/samenews/informationsystem_item">
шаболн для похожих статей
   </xsl:template>
#
Re: Показ схожих информационных элементов на основе меток
Как вывести на страницу все товары магазина с одинаковой "меткой"?
#
Re: Показ схожих информационных элементов на основе меток
m@rs,
так не подходит?
tag($path) путь тега, с использованием которого ведется отбор товаров

http://hostcms.ru/api6/classes/Shop_Controller_Show.html
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Показ схожих информационных элементов на основе меток
Как это оформить в макете страницы?
#
Re: Показ схожих информационных элементов на основе меток
добрый вечер! с этим кодом все отлично получилось!

а какой код для ТДС - если мне нужно чтобы все элементы информационной системы выводились на странице одного элемента?

спасибо)
#
Re: Показ схожих информационных элементов на основе меток
Здравствуйте! Подскажите пожалуйста с кодом на основе меток все получилось, только никак не могу разобраться, мне необходимо, чтобы инфоэлементы по меткам брались из конкретных информационных систем, а в этом коде берутся из всех, где и что поправить в коде? спасибо за ответ заранее.
#
Re: Показ схожих информационных элементов на основе меток
Denis_prk писал(а):
Разобрался, решил выложить для таких-же как я которые еще учатся дабы упростить жизнь


Спасибо за наглядность
Авторизация