現在、トピック一覧ページでは、各トピックの主要な参加者のアバターと、ユーザープロフィールページへのリンクが表示されています。これはここで確認できます。
ユーザーがサインインしていない場合、このリンクはクリック可能になりません。そうでなければログインページへのリダイレクトが発生するためです。
問題は、SEOコンサルタントがこれを問題であると判断し、プロフィールページへのリンクをGoogleに一切表示させたくないということです。
トピック投稿などにも同様の問題がありますが、これらはすべてウィジェット内にあり、api.reopenWidge()などで比較的簡単に解決できました。
トピック一覧ページではそうはいきません。ここでは、raw-templates/list/posters-column.hbrの内容を変更する必要があります!
試したことを以下に説明します。もし答えをご存知であれば、最後にスキップしてください。
まず、初心者向けガイドの指示に従ってウィジェットをマウントしようとしました。
<td>
{{#each posters as |poster|}}
{{#if poster.moreCount}}
<a class="posters-more-count">{{poster.moreCount}}</a>
{{else}}
{{mount-widget widget="custom-list-avatar"}}
{{/if}}
{{/each}}
</td>
これは全く何も効果がないように見えました。最終的に、誰かがdata-template-nameの値で.raw拡張子を使用しているテーマを見つけました。そのため、ガイドは単に時代遅れであると推測しました。生のテンプレートについては何も言及されていませんでした!.rawを使用すると、上記の変更はレンダリングされますが、カスタムウィジェットはロードされませんでした。
これは奇妙です。なぜなら、list/posters-columnはtopic-list-item.hbrによってのみ参照されており、これも生のテンプレートであり、そのガイドで使用されているテンプレートの1つだからです。しかし…また時代遅れなのでしょうか?生のテンプレートにはウィジェットをマウントできないとどこかで読んだので、これは決して機能しなかったようです。
次に、パーティアルを発見し、それらを使用しようとしました。それらの部分が生のテンプレートではなくなったので、もっとうまくいくかもしれないと思いました。
<script type="text/x-handlebars" data-template-name="components/custom-avatar">
<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.name" imageSize="small"}}</a>
</script>
<script type="text/x-handlebars" data-template-name="list/posters-column.raw">
<td class='posters topic-list-data'>
{{#each posters as |poster|}}
{{#if poster.moreCount}}
<a class="posters-more-count">{{poster.moreCount}}</a>
{{else}}
{{partial 'components/custom-avatar'}}
{{/if}}
{{/each}}
</td>
</script>
残念ながら、生のテンプレートでもパーティアルを使用できないようです。そのため、そのアプローチも却下されました。
次に、このスレッドを見つけました。これは私が求めているものを含んでいるように見えました。そのアプローチに基づいて、list/topic-list-item(list/posters-columnを呼び出す)がtopic-list-itemコンポーネントによって使用されていることを知って、以下のようになりました。
<script type="text/x-handlebars" data-template-name="list/posters-column.raw">
<td class='posters topic-list-data'>
{{#each posters as |poster|}}
{{#if poster.moreCount}}
<a class="posters-more-count">{{poster.moreCount}}</a>
{{else}}
{{#if hideFromAnonUser}}
<div data-user-card="{{poster.user.username}}" class="{{poster.extraClasses}}">{{avatar poster avatarTemplatePath="user.avatar_template" usernamePath="user.username" namePath="user.name" imageSize="small"}}</div>
{{else}}
<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.name" imageSize="small"}}</a>
{{/if}}
{{/if}}
{{/each}}
</td>
</script>
<script type="text/discourse-plugin" version="1.1.0">
const settings = Discourse.SiteSettings;
const user = api.getCurrentUser();
const hideFromAnonUser = settings.hide_user_profiles_from_public && !user;
const topicListItemComponent = require('discourse/components/topic-list-item').default;
topicListItemComponent.reopen({
hideFromAnonUser: function() {
return hideFromAnonUser
}.property()
});
</script>
残念ながら、hideFromAnonUserは生のテンプレートからは決して見えません。おそらくhideFromAnonUserは、hideFromAnonUserキーに割り当てられた関数の中から計算する必要があるのでしょうか?どちらにしても関係ないようです。最初の3つのconst代入をコメントアウトして、単にFalseを返すように設定したり、その中にconsole.log()呼び出しを追加して返しても、関数が何も実行されていないことがわかります。
この時点で、私は途方に暮れています。これまでにこのような作業をしたことがないので、手に負えないと感じています。何か見落としているかもしれませんが、多くの情報が誤解を招くものか、時代遅れであるか、あるいは私が間違った場所を見ているか、単に何かを誤解しているかのようです。
トピック一覧ページのアバターの<a></a>タグを<div></div>タグに置き換えるにはどうすればよいですか?ありがとうございます。
