Was soll erledigt werden?
Ich benötige einen Button im oberen Menü, der dem posted-Button ähnelt und alle von dir erstellten Beiträge anzeigt, jedoch nicht die Themen anderer Benutzer, auf die du geantwortet hast (im Gegensatz zu posted).
Es wäre schön, wenn ich ihn in bestimmten Kategorien auch in „Meine Fotos“ umbenennen könnte.
Dies muss mit dem Topic-Previews-Plugin funktionieren, damit die Ergebnisse Vorschaubilder anzeigen, was der untenstehende Code bereits unterstützt.
Wann muss es erledigt sein?
Kein Eile, aber es wäre schön, wenn es innerhalb eines Monats fertig wäre.
Was ist dein Budget in USD, das du für diese Aufgabe anbieten kannst?
Ich hoffe, dass der untenstehende Code als Ausgangspunkt dienen kann (dies ist für einen Button, der Beiträge ohne Antworten anzeigt), und dass es eine ziemlich einfache Aufgabe sein wird, daher biete ich 100 $ an.
Das größte Problem, das ich bei der eigenen Anpassung habe, ist, dass ich keinen Weg finde, eine Benutzernamen-Variable in der Suchabfrage zu verwenden, sodass nur die Themen des aktuellen Benutzers angezeigt werden.
<!-- NEEDS REPLY -->
<script type="text/discourse-plugin" version="0.8.18">
if (I18n.translations.en) {
I18n.translations.en.js.filters.needsreply = {title: "Keine Antworten", help: "Themen ohne Antworten"};
}
// PASSE DIESE WERTE AN
// Setze die Suchabfrage
let search_query = '?max_posts=1';
// Schließe bestimmte Kategorien aus, damit der Menüpunkt „Keine Antworten“ nicht angezeigt wird
let excludeList = ['classifieds', 'workshops', 'staff', 'wiki','site-discussions', 'site-feedback', 'announcements', 'site-tips', 'site-support'];
// Füge die aktive Klasse zum Button „Keine Antworten“ hinzu
api.modifyClass('component:navigation-item', {
active: Ember.computed("contentFilterMode", "filterMode", function () {
let contentFilterMode = this.get('content').get('filterMode');
if (window.location.search && window.location.search.split('&')[0] === search_query.split('&')[0]) {
return contentFilterMode === "needsreply";
} else {
return this._super(contentFilterMode, this.get('filterMode'));
}
}),
});
// Entferne den max_posts-Filter und den Tags-Filter
api.modifyClass('controller:discovery/topics', {
resetParams: function () {
this.setProperties({max_posts: null});
this.setProperties({tags: null});
this._super();
}
});
Discourse.ExternalNavItem = Discourse.NavItem.extend({
href: function () {
return this.get('href');
}.property("href")
});
Discourse.NavItem.reopenClass({
buildList: function (category, args) {
let list = this._super(category, args),
tag = args.tagId,
needsreplyHref;
if (!category) { // hat keine Kategorie
needsreplyHref = tag ? '/latest/' + search_query + '&tags=' + tag : '/latest/' + search_query; // wenn ein Tag vorhanden ist, baue die URL mit dem Tag, sonst fälle zurück auf die neueste Ansicht und die Suchabfrage
}
else if (excludeList.indexOf(category.slug) != -1) { // die Kategorie befindet sich in der Ausnahmeliste, nichts tun
return list; // gib die Liste zurück, ohne das benutzerdefinierte Navigations-Element zu erstellen
}
else if (!category.parentCategory) { // ist keine Unterkategorie
needsreplyHref = tag ? '/c/' + category.slug + search_query + '&tags=' + tag : '/c/' + category.slug + search_query; // wenn ein Tag vorhanden ist, baue die URL mit Tags und der Kategorie, sonst fälle zurück auf die Suchabfrage usw.
} else { // ist eine Unterkategorie
needsreplyHref = tag ? '/c/' + category.parentCategory.slug + '/' + category.slug + search_query + '&tags=' + tag :
'/c/' + category.parentCategory.slug + '/' + category.slug + search_query; // wenn ein Tag vorhanden ist, baue die URL mit Tags, Unterkategorie und Kategorie, sonst fälle zurück auf die Suchabfrage usw.
}
list.push(Discourse.ExternalNavItem.create({href: needsreplyHref, name: 'needsreply'}));
return list;
}
});
</script>