Несколько участников (включая моего основного модератора) выразили некоторое разочарование функцией «Ваша тема похожа на». Я предполагаю, что часть проблем связана с размером экрана и тем, что блок с этой функцией частично перекрывает другие элементы и т. д.
Да, я знаком с возможностью увеличить минимальное значение запроса текста до более высокого значения. Я уже установил его на 25 символов, но думаю, что эта функция могла бы быть полезной, если она не будет раздражать больше участников, чем помогать.
Это фактически отключит его, но я спрашивал не об этом. Лучшим решением было бы предоставить пользователям, которым функция не нравится, возможность отключить её через cookie или настройки аккаунта.
Вы можете изучить код этого компонента и адаптировать его для скрытия элементов с помощью CSS (целевой класс .similar-topics) в настройках пользователей. Именно это я сделал на https://unicyclist.com/, где у пользователей есть настройка для скрытия иконки пожертвований в правом верхнем углу заголовка.
По сути, единственное изменение, которое я внес в оригинальный плагин, — это сохранение настройки в файле cookie (я хочу напоминать пользователям о пожертвованиях каждый год на оплату серверов).
Вот код моего собственного компонента темы:
<script type="text/discourse-plugin" version="0.8">
// установить длительность cookie на 1 год
function setHideDonationCookie(value=null) {
var now = new Date();
var time = now.getTime();
var expireTime = time + 1000*60*60*24*365;
now.setTime(expireTime);
document.cookie = 'donationButton=' + value + ';expires='+now.toUTCString()+';path=/';
}
// вернуть значение cookie
function getCookie(name) {
var dc = document.cookie;
var prefix = name + "=";
var begin = dc.indexOf("; " + prefix);
if (begin == -1) {
begin = dc.indexOf(prefix);
if (begin != 0) return null;
}
else
{
begin += 2;
var end = document.cookie.indexOf(";", begin);
if (end == -1) {
end = dc.length;
}
}
return decodeURI(dc.substring(begin + prefix.length, end));
}
function getToggleDonationIcon() {
let pref = getCookie('donationButton');
let result = settings.default_enabled;
if (pref !== null) {
result = pref === "true";
}
return result;
}
// Добавляем правило CSS в HTML-код
if (getToggleDonationIcon()) {
let style = document.createElement('style');
style.innerHTML = ".header-icon-help-fund-servers-fees{ display: none; }";
document.head.appendChild(style);
}
// технически здесь мы хотим изменить только текущего пользователя
api.modifyClass("model:user", {
toggleDonationIcon: function() {
return getToggleDonationIcon();
}.property()
});
api.modifyClass("controller:preferences/interface", {
actions: {
save() {
this._super();
// установить значение cookie как значение настройки
if(this.get("model.toggleDonationIcon") != getToggleDonationIcon()) {
setHideDonationCookie(this.get("model.toggleDonationIcon").toString());
if(this.get("model.toggleDonationIcon") == false) {
document.getElementsByClassName("header-icon-help-fund-servers-fees")[0].style.display = "";
}
else {
document.getElementsByClassName("header-icon-help-fund-servers-fees")[0].style.display = "none";
}
}
}
}
});
</script>
<script type='text/x-handlebars' data-template-name='/connectors/user-preferences-interface/add-selector'>
{{preference-checkbox labelKey=(theme-prefix 'donation_icon_toggle') checked=model.toggleDonationIcon}}
</script>