Not offhand, but perhaps this is something you'd be interested in sponsoring?
Reach out to us at [email protected] 🙂
When I try to access user profile page I got error:
24/4 08:46 [27022] - error: TypeError: Cannot read property 'proglangs' of null at /home/apps/nodebb/node_modules/nodebb-plugin-ns-custom-fields/app/filters.js:28:40
proglangs
is the first key in custom fields. I use NodeBB 0.7
result.data
is empty, thats why it has error, to fix this you have to add check in:
/nodebb-plugin-ns-custom-fields/app/filters.js
from line 24:
if (result.data) {
var i = 0, len = result.fields.length, fieldMeta, customFields = [];
for (i; i < len; ++i) {
fieldMeta = result.fields[i];
var value = result.data[fieldMeta.key];
if (value) {
customFields.push({
name : fieldMeta.name,
value: value
});
}
}
params.userData.customFields = customFields;
}
callback(null, params);
@Nicolas can you show template changes for I found it in account/edit.tpl
file.nodebb-plugin-ns-custom-fields/templates/account/edit.tpl
Looks cool.
@Sergey Same issue for me, 0.7
@Sergey thanks for report and participating in testing of the plugin on It's earlier stages I will fix it today. I think I know that is the problem.
@Nicolas Consider changing
customFields = [];
to
customFields = params.userData.customFields || [];
So that you don't overwrite customFields added by other plugins.
Last error I found in : nodebb-plugin-ns-custom-fields/public/js/fields-edit.js
line 61:
- .val(content[fieldEntity.key]);
+ .val(content && content[fieldEntity.key]);
Now it works as expected. Thanks @Nicolas !
Small suggestion, check if Custom Field value is url and replace it with link.
filters.js
:
4: var urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/i;
..
..
26: if (result.data) {
var i = 0, len = result.fields.length, fieldMeta, customFields = params.userData.customFields || [];
for (i; i < len; ++i) {
fieldMeta = result.fields[i];
var value = result.data[fieldMeta.key];
if (value) {
customFields.push({
name : fieldMeta.name,
value: value.match(urlRegex)? urlify(value) : value
});
}
}
params.userData.customFields = customFields;
39: }
..
..
53: function urlify(text) {
return text.replace(urlRegex, function(url,b,c) {
var url2 = (c == 'www.') ? 'http://' +url : url;
return '<a href="' +url2+ '" target="_blank">' + url + '</a>';
})
58: }
@Sergey
For such task, will be dedicated formatters.
8-th list item in TODO list
Can you also add those custom fields in post data, so we can display them somewhere under user's avatar or something like that.
Critical fixes are made, also plugin is published to Node Package Manager.
First post is updated, same as documentation on GitHub.
@Sergey sure, but it will be optional (You should toggle it in ACP)
Nice I'm sure there is a way we can add something to core without having you required to edit the theme manually. What if it was a widget area in the profile page? I'd accept that PR if you were willing to change how this works
If this works and I'll try it tommorow you sir are my hero. I was looking forward this feature since the begining and didn't had the time to jump in.
New version 1.1.0
has been released.
Now you have ability to populate Topic View with custom fields. Also this feature is optional, so Settings was introduced also.
@psychobunny I'm not familiar with widgets in NodeBB. Can you collaborate and give me some example? (link on repo, benefits, etc.)
@psychobunny Also I'm going to create another plugin, and I need this space in user's profile. Do you have any suggestions how I can reach it without manual editing also?
For example, render numeric values under avatar as metrics
or accountStats
<div class="text-center account-stats">
<div class="inline-block text-center">
<span class="human-readable-number" title="{reputation}">{reputation}</span>
<span class="account-bio-label">[[global:reputation]]</span>
</div>
<div class="inline-block text-center">
<span class="human-readable-number" title="{postcount}">{postcount}</span>
<span class="account-bio-label">[[global:posts]]</span>
</div>
<div class="inline-block text-center">
<span class="human-readable-number" title="{profileviews}">{profileviews}</span>
<span class="account-bio-label">[[user:profile_views]]</span>
</div>
</div>
Change on:
<!-- BEGIN metrics -->
<div class="inline-block text-center">
<span class="human-readable-number" title="{metrics.value}">{metrics.value}</span>
<span class="account-bio-label">{metrics.label}</span>
</div>
<!-- END metrics -->
NodeBB 0.7, new version error on startup:
25/4 07:34 [27825] - error: Error: Cannot find module 'object-assign'
Sorry, npm install
should fix that problem.
@Nicolas said:
@psychobunny Also I'm going to create another plugin, and I need this space in user's profile. Do you have any suggestions how I can reach it without manual editing also?
Looks like it's the same problem, that part is tied to the theme, so it would need a widget area or a filter from core.
I can probably help with the widget areas if needed.
Warning in console:
25/4 11:57 [28225] - warn: [plugins] Callback timed out, hook 'static:app.load' in plugin 'nodebb-plugin-ns-custom-fields'
I found another problem: Try to edit any user's profile as admin and you will see custom fields populated with admin's data.