В коде ELiS появился функционал поиска похожих ресурсов.
Этот функционал позволяет создать блок "похожих ресурсов". Похожие ресурсы могут использоваться в качестве рекомендации почитать чего-то по схожей теме.
Принцип работы[править]
В код поиска подается нода (сущность) и по строковым значениям в её полях в поисковый сервер отправляется запрос нахождения похожих ресурсов, где между словами ставится ИЛИ.
Найденные ресурсы возвращаются в виде отранжированного массива ресурсов.
Дальше остаётся в блоке написать код темизации этих ресурсов
Зачем писать код самим вместо одного кода на всех в составе ELiS?[править]
Блок с похожими ресурсами по сути является основой для рекомендательной системы.
Но в разных проектах рекомендательные системы должна работать по разному, например в конструкторе ЭОР в рекомендательной системе следует рекомендовать не просто схожие по текстовому описанию ресурсы, но и те, у которых хорошие показатели тестов в плане сложности и дискриминативности. При этом показывать рекомендовать схожие ресурсы следует только преподавателям, чтобы они увидели что создали по теме другие и может переняли хорошие идеи, но не учащимся, так как учащиеся могут запутаться надо ли решать рекомендованные ресурсы.
В универсальной электронной библиотеке наоборот, может иметь смысл отображать любые близкие друг к другу ресурсы и делать это для всех пользователей.
Таким образом рекомендательную систему надо писать под сервис и сделать универсальное решение вряд ли получится. Тем не менее, в ELiS теперь есть реализация поиска похожих ресурсов для создания собственных рекомендательных систем под конкретный проект.
Пример кода простейшего блока[править]
Вы можете создать блок admin/structure/block/add с текстовым форматом PHP и вставить следующий код:
<?php global $base_url; $out = ""; $node = menu_get_object(); if (isset($node->nid) && isset($node->type)) { if (module_exists('elissearch')) { $results = find_similar_entity_elis_search('node', $node); $style = '<style>'; $style .= '.elis-block__similar-resource div { '; $style .= ' height: 42px;'; $style .= ' padding: 0.5em;'; $style .= ' font-size: 16px;'; $style .= ' max-width: 240px;'; $style .= ' text-align: center;'; $style .= ' border-radius: 0 0 6px 6px;'; $style .= ' background: rgba(255,255,255,.7);'; $style .= ' color: #323232;'; $style .= ' overflow: hidden; text-overflow: ellipsis; white-space: nowrap;'; $style .= '}'; $style .= '.elis-block__similar-resource img { '; $style .= ' width: 240px;'; $style .= ' height: 240px;'; $style .= ' object-fit: contain;'; $style .= ' background: rgba(0,0,0,.3);'; $style .= ' border-radius: 6px 6px 0 0;'; $style .= '}'; $style .= '.elis-block__similar-resource { '; $style .= ' border: 6px;'; $style .= ' margin: 1em;'; $style .= '}'; $style .= '.elis-block__similar-resources { '; $style .= ' display: flex; justify-content: center;'; $style .= ' width: 100%;'; $style .= ' flex-wrap: wrap;'; $style .= '}'; $style .= '</style>'; if ($results != false) { for ($i=0; $i<count($results) && $i < 4; $i++) { $res = $results[$i]; $out .= "<div class='elis-block__similar-resource' aria-hidden='true' onclick='location.href=\"{$base_url}/node/{$res->nid}?utm_source=elis&utm_medium=referral&utm_campaign=similar_block\"'><img src='{$base_url}/node/{$res->nid}/cover' alt='" . check_plain($res->title) . "'/><div>" . check_plain($res->title) . "</div></div>"; } $out = '<div class="visible-lg-block"><noindex><h3 style="text-align: center;">Возможно вам понравится</h3>'. $style . "<div class='elis-block__similar-resources'>{$out}</div></noindex></div>"; } } } print $out; ?>