SOLVED Section name not being included in breadcrumb


  • @baris thanks for the hint and reply.
    I changed that line to this:

    if (!data.disabled && data.isSection) {
    

    And now it is working fine.
    Is that right? And would this cause a problem in the future?
    BTW, should I manually modify this file whenever I update/upgrade NodeBB? Am I right?

  • NodeBB

    You should actually change it to

    if (!data.disabled) {

    So all categories are used in the breadcrumbs whether they are sections or not.


  • @baris I did this first and when I restart nodebb, my forum does not work. When I revert it back, it works again.
    Anything wrong I did?

  • NodeBB

    That could be due to a loop in your category hierarchy, that code is in a while loop and if a category is a parent and child of another category by mistake it will never exit that loop.

    Make sure your category tree doesn't have any loops.


  • @baris that was fine and nothing was wrong with hierarchy.
    It seemed it took some time to affect the changes. Now it's as you wrote down, and my forum is working.
    The issue is solved, thanks.


  • Hello again and sorry for bumping up this old topic.

    The solution of this topic works fine until you do not decide to update/upgrade your NodeBB, because the new file overwrites the modified one so that the changes are reverted back.
    Are there any solutions so that whenever I update/upgrade my forum, the changes are not back?

  • Global Moderator Plugin & Theme Dev

    @inna in a plugin/theme you could overwrite that function

    // library.js
    
    const helpers = require.main.require('./src/controllers/helpers');
    
    helpers.buildCategoryBreadcrumbs = // copy of function from core with your modifications
    

  • @pitaj Thanks, but pardon for being unable to get your mean. I added that function to my library.js theme file, but I have some issues.
    This is my /some_path/node_modules/nodebb-theme-persona/library.js:

    'use strict';
    
    const helpers = require.main.require('./src/controllers/helpers');
    helpers.buildCategoryBreadcrumbs = async function (cid) {
            const breadcrumbs = [];
    
            while (parseInt(cid, 10)) {
                    /* eslint-disable no-await-in-loop */
                    const data = await categories.getCategoryFields(cid, ['name', 'slug', 'parentCid', 'disabled', 'isSection']);
                    if (!data.disabled) {
                            breadcrumbs.unshift({
                                    text: String(data.name),
                                    url: `${relative_path}/category/${data.slug}`,
                                    cid: cid,
                            });
                    }
                    cid = data.parentCid;
                                    }
                    if (meta.config.homePageRoute && meta.config.homePageRoute !== 'categories') {
                            breadcrumbs.unshift({
                                    text: '[[global:header.categories]]',
                                    url: `${relative_path}/categories`,
                            });
                    }
    
                    breadcrumbs.unshift({
                            text: '[[global:home]]',
                            url: `${relative_path}/`,
                    });
    
            return breadcrumbs;
    };
    

    These are the first lines of this file. When I restart NodeBB, this is the error I get in the log:

    error: /category/5/%D9%BE%D8%B1%D8%B3%D8%B4-%D9%88-%D9%BE%D8%A7%D8%B3%D8%AE
    ReferenceError: categories is not defined
        at Object.helpers.buildCategoryBreadcrumbs (/some_path/node_modules/nodebb-theme-persona/library.js:9:33)
        at buildBreadcrumbs (/some_path/src/controllers/category.js:140:31)
        at categoryController.get (/some_path/src/controllers/category.js:98:8)
    

    I tried the const helpers = require.main.require('./src/controllers/helpers'); part with absolute path, relative path, both with .js extension and without it, but that does not differ.
    I also tried adding this part at the end of this file but still I get the same error.

    Would you please help me where's the issue? is that correct at all that I'm editing my theme file?
    Can I create a plugin only for doing such things? Is that good?

    Thanks in advance

  • Global Moderator Plugin & Theme Dev

    @inna yeah I recommend doing this in a custom plugin or theme, rather than editing the persona files directly.

    Anyways, you'll need to import categories and meta as well like so:

    const categories = require.main.require('./src/categories');
    const meta = require.main.require('./src/meta');
    

    Everything else looks right


  • @pitaj Thanks, but it seems my custom function is not being executed because I do not see any changes after restarting NodeBB.

  • Global Moderator Plugin & Theme Dev

    @inna you can try putting a console.log call in there to see whether it's executing. Is it still in the persona file?


  • @pitaj Thanks, I have added console.log(helpers) to library.js file after the function is closed, but when I reload the page I see nothing in console tab.

  • Global Moderator Plugin & Theme Dev

    @inna you'd want to put console.log(breadcrumbs) right before the return at the end of the function. If you put it outside the function it will only execute once at startup


  • @pitaj I tried that, but I see nothing in console tab. I tried commenting and uncommenting console.log code to see if it changes, but nothing changes in both cases.
    I have attached the contents of library.js file and console tab.

    Is library.js the correct file I'm trying to edit? Does this file execute in every single page? I mean is that the correct file? I'm asking to ensure whether I'm trying right or not.

    library-js.png console.png

  • Global Moderator Plugin & Theme Dev

    @inna that's the right file. Can you look at your startup logs? I bet there's an error on startup caused by you having const meta at the top and later var meta redeclared. This will prevent the plugin from being loaded


  • @pitaj this is it:

    2021-03-04T17:05:46.584Z [4567/600] - error: /some_path/node_modules/nodebb-theme-persona/library.js:37
    var meta = require.main.require('./src/meta');
        ^
    
    SyntaxError: Identifier 'meta' has already been declared
        at Module._compile (internal/modules/cjs/loader.js:723:23)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
        at Module.load (internal/modules/cjs/loader.js:653:32)
        at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
        at Function.Module._load (internal/modules/cjs/loader.js:585:3)
        at Module.require (internal/modules/cjs/loader.js:692:17)
        at require (internal/modules/cjs/helpers.js:25:18)
        at Object.Plugins.requireLibrary (/some_path/src/plugins/index.js:60:38)
        at registerHooks (/some_path/src/plugins/load.js:159:13)
        at Plugins.loadPlugin (/some_path/src/plugins/load.js:122:4)
    
  • Global Moderator Plugin & Theme Dev

    @inna yep so try commenting out that line and restarting


  • @pitaj I've tried to check internal/modules/cjs/loader.js, but this path and this file does not exist.
    I also checked src/plugins/load.js and src/plugins/index.js, but they do not have any meta variable or such thing.

    I've also tried to commenting out them, these index.js and load.js files at given lines but I give errors, because I've been trying to commenting out registerHooks and Plugins.loadPlugin and Object.Plugins.requireLibrary.


  • @inna By the way, as I've here, I've entered some info, but I found something:

    at registerHooks (/some_path/src/plugins/load.js:159:13)
    at Plugins.loadPlugin (/some_path/src/plugins/load.js:122:4)
    

    The issue is Plugins.loadPlugin is in line 159, and registerHooks is in line 122.
    Should I report this to NodeBB Github issues? Is it related to Persona theme? Or just reporting here is enough to check it?

  • Global Moderator Plugin & Theme Dev

    No no no no no. Comment out the line with var meta. The one that shows up at the top of the error message you posted. Make sure you uncomment all of those other things.

    This is not a bug in NodeBB. As the error message clearly says, the variable meta was already declared in that scope in library.js. (As const meta ...)

Suggested Topics

| |