В коде 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;
?>