لقد قمت للتو بالتحقق ولا يزال الكود يعمل. جميع الملاحظات التي أشرت إليها لا تزال سارية.
لقد حاولت تتبع جميع المناطق التي يُستخدم فيها الاسم الكامل للمستخدم كخاصية title لصورة رمزيته (avatar). يجب أن يغطي الكود التالي جميع هذه المناطق بافتراض تفعيل hide_user_profiles_from_public و prioritize_username_in_ux. للأسف، يعتمد هذا الحل على تجاوز عدد قليل من القوالب (templates)، لكنها لا تتغير في كثير من الأحيان. لقد أدرجت روابط إلى الملفات على GitHub في حال رغبت يومًا في التحقق مما إذا كنت بحاجة لتحديث أي جزء من الكود. التعديل الوحيد الذي قمت به كان إما إضافة أو تغيير namePath بحيث يستخدم اسم المستخدم بدلاً من الاسم الكامل.
<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("poster-name", {
html(attrs) {
let contents = this._super(attrs);
if(contents.length == 2 && api.getCurrentUser()) {
return contents.shift();
}
return contents;
}
});
api.reopenWidget("post-avatar", {
html(attrs) {
attrs.name = "";
return this._super(attrs);
}
});
api.reopenWidget("topic-map-summary", {
html(attrs, state) {
attrs.createdByName = "";
attrs.lastPostName = "";
return this._super(attrs, state);
}
});
api.reopenWidget("topic-participant", {
html(attrs, state) {
attrs.name = "";
return this._super(attrs, state);
}
});
</script>
<!-- https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/components/user-info.hbs -->
<script type="text/x-handlebars" data-template-name="components/user-info">
<div class="user-image">
<div class="user-image-inner">
<a href="{{unbound userPath}}" data-user-card="{{unbound user.username}}">{{avatar user namePath="user.username" imageSize="large"}}</a>
{{#if user.primary_group_name}}
{{avatar-flair
flairURL=user.primary_group_flair_url
flairBgColor=user.primary_group_flair_bg_color
flairColor=user.primary_group_flair_color
groupName=user.primary_group_name}}
{{/if}}
</div>
</div>
<div class="user-detail">
<div class='name-line'>
<span class="username"><a href="{{unbound userPath}}" data-user-card="{{unbound user.username}}">{{format-username user.username}}</a></span>
<span class="name">{{unbound name}}</span>
</div>
<div class="title">{{unbound user.title}}</div>
{{#if hasBlock}}
<div class='details'>
{{yield}}
</div>
{{/if}}
</div>
</script>
<!-- https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/list/posters-column.raw.hbs -->
<script type="text/x-handlebars" data-template-name="list/posters-column.raw">
<td class='posters'>
{{#each posters as |poster|}}
<a href="{{poster.user.path}}" data-user-card="{{poster.user.username}}" class="{{poster.extraClasses}}">{{avatar poster avatarTemplatePath="user.avatar_template" usernamePath="user.username" namePath="user.username" imageSize="small"}}</a>
{{/each}}
</td>
</script>
<!-- https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/components/latest-topic-list-item.hbs -->
<script type="text/x-handlebars" data-template-name="components/latest-topic-list-item">
<div class='topic-poster'>
{{#user-link user=topic.lastPoster}}
{{avatar topic.lastPoster namePath="topic.lastPoster" imageSize="large"}}
{{/user-link}}
</div>
<div class='main-link'>
<div class='top-row'>
{{raw "topic-status" topic=topic}}
{{topic-link topic}}
{{#if topic.featured_link}}
{{topic-featured-link topic}}
{{/if}}
{{topic-post-badges newPosts=topic.totalUnread unseen=topic.unseen url=topic.lastUnreadUrl}}
</div>
<div class='bottom-row'>
{{category-link topic.category}}
{{discourse-tags topic mode="list"}}
</div>
</div>
<div class='topic-stats'>
{{raw "list/posts-count-column" topic=topic tagName="div"}}
<div class="topic-last-activity">
<a href="{{topic.lastPostUrl}}" title="{{topic.bumpedAtTitle}}">{{format-date topic.bumpedAt format="tiny" noTitle="true"}}</a>
</div>
</div>
</script>
لا ينبغي اعتبار هذه الطريقة آمنة بنسبة 100%، لكنها ستبقي المعلومات بعيدة عن الأنظار لأي شخص لا يبذل جهدًا كبيرًا للعثور عليها.
في مرحلة ما، سيكون من الجيد أن تصبح هذه الوظيفة سلوكًا أساسيًا (core behavior) كلما تم تفعيل prioritize_username_in_ux.
@DavidO هل قرأت الدليل المبتدئ لاستخدام سمات Discourse على الرابط التالي؟ Beginner's guide to using Discourse Themes إذا قمت بإنشاء مكون سمة (theme component) وأضفت الكود إلى قسم <head> المشترك، فتأكد من إضافة المكون إلى سمةك الرئيسية.