Skip to content

Link vs Refresh

Solved Customisation
20 3 6.7k 1
  • @Madchatthew I tried looking at this earlier, but didn’t get very far as I need access to the admin settings. Do you get the same if you browse to /user/admin/blog ? (I’m assuming you are logged in as admin)

    wrote on last edited by
    #10

    @phenomlab I get the following error when I go to that address. Also I sent you a DM with username and password so you can login and take a look.

    Internal Error.
    Oops! Looks like something went wrong!
    
    /user/admin/blog
    
    Cannot read property 'username' of null
    
  • @phenomlab I get the following error when I go to that address. Also I sent you a DM with username and password so you can login and take a look.

    Internal Error.
    Oops! Looks like something went wrong!
    
    /user/admin/blog
    
    Cannot read property 'username' of null
    
    wrote on last edited by
    #11

    @Madchatthew thanks. I’ll check on this tomorrow.

  • @Madchatthew thanks. I’ll check on this tomorrow.

    wrote on last edited by
    #12

    @phenomlab Sounds good! Thank you!!

  • @phenomlab Sounds good! Thank you!!

    wrote on last edited by phenomlab
    #13

    @Madchatthew From what I can see, you have some custom JS that looks like the below

    const gridItem = document.getElementById("gridItem");
    gridItem.removeAtribute('style');
    

    I’m not entirely sure what this is for, but it will only fire on page load - not on AJAX calls which is used when clicking links. To fix this issue, you can wrap the JS so that it will also work on AJAX calls as follows

    $(window).on('action:ajaxify.end', function(data) {
        const gridItem = document.getElementById("gridItem");
        gridItem.removeAtribute('style');
    });
    

    This will then allow the same code to execute when the links are clicked. However, this then generates the below error in the console

    b846ea60-c361-4350-84f2-bc16fa97de9f-image.png

    This relates to gridItem.removeAttribute not being a valid function, so the JS fails and will not process further. This shortened version will work though

    $(window).on('action:ajaxify.end', function(data) {
        document.getElementById("gridItem").removeAttribute("style");
    });
    

    As I mentioned, I do not see any reason for this specific code to execute, as it appears to be removing a style from an element. Is this actively being used for anything ? This doesn’t seem to be causing the strange layout - I suspect this comes from the URL entered in config.json in the NodeBB root.

    The blog page should also show when you navigate to https://siteurl.com/user/username/blog but it fails to render with the below in the console

    GET http://x.x.x.x/assets/src/client/account/fte-blog.js?v=ph7njujnhro net::ERR_ABORTED 404 (Not Found)
    

    Again, I think this is because of the url value in config.json. Is there any way I can get access to the Ubuntu server this instance is running on ?

  • @Madchatthew From what I can see, you have some custom JS that looks like the below

    const gridItem = document.getElementById("gridItem");
    gridItem.removeAtribute('style');
    

    I’m not entirely sure what this is for, but it will only fire on page load - not on AJAX calls which is used when clicking links. To fix this issue, you can wrap the JS so that it will also work on AJAX calls as follows

    $(window).on('action:ajaxify.end', function(data) {
        const gridItem = document.getElementById("gridItem");
        gridItem.removeAtribute('style');
    });
    

    This will then allow the same code to execute when the links are clicked. However, this then generates the below error in the console

    b846ea60-c361-4350-84f2-bc16fa97de9f-image.png

    This relates to gridItem.removeAttribute not being a valid function, so the JS fails and will not process further. This shortened version will work though

    $(window).on('action:ajaxify.end', function(data) {
        document.getElementById("gridItem").removeAttribute("style");
    });
    

    As I mentioned, I do not see any reason for this specific code to execute, as it appears to be removing a style from an element. Is this actively being used for anything ? This doesn’t seem to be causing the strange layout - I suspect this comes from the URL entered in config.json in the NodeBB root.

    The blog page should also show when you navigate to https://siteurl.com/user/username/blog but it fails to render with the below in the console

    GET http://x.x.x.x/assets/src/client/account/fte-blog.js?v=ph7njujnhro net::ERR_ABORTED 404 (Not Found)
    

    Again, I think this is because of the url value in config.json. Is there any way I can get access to the Ubuntu server this instance is running on ?

    wrote on last edited by
    #14

    @phenomlab I added the js to remove a style that was making the layout not work the way I wanted. So I thought well I will just remove the style so that my css will work. When I did that then my layout would work. But maybe that is the cause of my issue?

    I will see if I can set it up so you can access the server remotely. I will figure out how to make the IP public so you can remote in or at least so you can access the virtualmin/webmin pages.

  • @phenomlab I added the js to remove a style that was making the layout not work the way I wanted. So I thought well I will just remove the style so that my css will work. When I did that then my layout would work. But maybe that is the cause of my issue?

    I will see if I can set it up so you can access the server remotely. I will figure out how to make the IP public so you can remote in or at least so you can access the virtualmin/webmin pages.

    wrote on last edited by
    #15

    @Madchatthew great. Thanks

  • @Madchatthew great. Thanks

    wrote on last edited by
    #16

    @phenomlab I sent you a DM with the info in it. Thanks again!

  • @phenomlab I sent you a DM with the info in it. Thanks again!

    wrote on last edited by
    #17

    @Madchatthew I took an extended look at this, and the issue is being caused by the code you have for the custom template below

    <div class="grid">
      <!-- BEGIN topics -->
      <div id="gridItem" class="grid__item">
        <div class="card">
          <img class="card__img" src="{topics.imageurl}">  
          <div class="card__content">
            <h1 class="card__header"><a href="{config.relative_path}/topic/{topics.slug}">{topics.title}</a></h1>
            <p>{topics.date.full}</p>
            <p class="card__text">{topics.post.content}</p>
            <a href="{config.relative_path}/topic/{topics.slug}"><button class="card__btn">Read More<span>&rarr;</span></button></a>
          </div>
        </div>
      </div>
      <!-- END topics --> 
    </div>
    

    No matter what I try, it looks like the CSS you have is being overridden by either the plugin, or the core itself. Based on this, I took the decision to rewrite the code. Here’s what is in use now on your site

    <div class="row blog-wrapper">
    <br>
    <!-- BEGIN topics -->
    <div class="col-xs-2 col-sm-2 post-holder" tid="{topics.tid}">
        <div class="blog-container">
      <a href="{config.relative_path}/topic/{topics.slug}" class="post-box" style="min-height: 340px;">
          <div class="parent">
        <figure class="blog-image child" style="background: {topics.user.icon:bgColor}
          <!-- IF topics.imageurl -->
            url({topics.imageurl})
          <!-- END topics.imageurl -->
          ;">     
        </figure>
        </div>
        <div class="blog">
            <span class="category">{topics.title}</span>
        </div>
      </a>
    </div>
    </div>
    <!-- END topics -->
    </div>
    
     <!-- IF paginator -->
      <div class="section sectionMain">
        <div class="PageNav">
          <nav>
            <!-- IF prevpage -->
            <a href="{config.relative_path}{featuredRoute}{prevpage}" class="btn btn-default paginate"></a>
            <!-- ENDIF prevpage -->
    
            <!-- BEGIN pages -->
            <a href="{config.relative_path}{featuredRoute}{pages.number}" class="btn <!-- IF pages.currentPage -->btn-primary active<!-- ELSE -->btn-default<!-- ENDIF pages.currentPage -->">{pages.number}</a>
            <!-- END pages -->
    
            <!-- IF nextpage -->
            <a href="{config.relative_path}{featuredRoute}{nextpage}" class="btn btn-default paginate"></a>
            <!-- ENDIF nextpage -->
          </nav>
        </div>
      </div>
      <!-- ENDIF paginator -->
    </div>
    

    Plus, I added some custom CSS on your site

    /* Phenomlab Custom CSS */
    figure.blog-image {
        border-top-left-radius: 4px;
        border-top-right-radius: 4px;
        background-size: cover !important;
        height: 150px;
    }
    .blog {
        background: #ffffff;
        border-radius: 0 0 4px 4px;
        border-top: 0;
        color: #333;
        font-size: 2.0em;
        padding: 20px 25px;
        line-height: 1.5em;
        min-height: 108px;
        transition: all .2s ease-in-out;
        margin: 1px;
    }
    .post-holder {
        margin-bottom: 20px;
    }
    .row.blog-wrapper {
        padding: 50px;
    }
    span.category {
        color: #3384C7;
    }
    .blog-content-wrapper {
      max-width: 400px;
      margin: 50px auto;
    }
    @media (max-width: 767px) {
    .post-holder {
        width: 100%;
    }
    }
    

    The end result is this when accessing the site directly, or clicking the “Blog” link

    9f402ecd-764e-4987-81ba-21600cec4f45-image.png

    As you can see, this works without issue. Of course, you’ll need to tweak the template I created (and probably the CSS) to get the desired look and feel you want. Note, that an <a> tag is present in the entire body of each post, so no matter where you click, it’ll open the associated article - there’s no need for a “Read More” or “Explore” function.

    The code is also 100% mobile friendly, and will stack accordingly at 767px in terms of viewport breakpoint.

  • @Madchatthew I took an extended look at this, and the issue is being caused by the code you have for the custom template below

    <div class="grid">
      <!-- BEGIN topics -->
      <div id="gridItem" class="grid__item">
        <div class="card">
          <img class="card__img" src="{topics.imageurl}">  
          <div class="card__content">
            <h1 class="card__header"><a href="{config.relative_path}/topic/{topics.slug}">{topics.title}</a></h1>
            <p>{topics.date.full}</p>
            <p class="card__text">{topics.post.content}</p>
            <a href="{config.relative_path}/topic/{topics.slug}"><button class="card__btn">Read More<span>&rarr;</span></button></a>
          </div>
        </div>
      </div>
      <!-- END topics --> 
    </div>
    

    No matter what I try, it looks like the CSS you have is being overridden by either the plugin, or the core itself. Based on this, I took the decision to rewrite the code. Here’s what is in use now on your site

    <div class="row blog-wrapper">
    <br>
    <!-- BEGIN topics -->
    <div class="col-xs-2 col-sm-2 post-holder" tid="{topics.tid}">
        <div class="blog-container">
      <a href="{config.relative_path}/topic/{topics.slug}" class="post-box" style="min-height: 340px;">
          <div class="parent">
        <figure class="blog-image child" style="background: {topics.user.icon:bgColor}
          <!-- IF topics.imageurl -->
            url({topics.imageurl})
          <!-- END topics.imageurl -->
          ;">     
        </figure>
        </div>
        <div class="blog">
            <span class="category">{topics.title}</span>
        </div>
      </a>
    </div>
    </div>
    <!-- END topics -->
    </div>
    
     <!-- IF paginator -->
      <div class="section sectionMain">
        <div class="PageNav">
          <nav>
            <!-- IF prevpage -->
            <a href="{config.relative_path}{featuredRoute}{prevpage}" class="btn btn-default paginate"></a>
            <!-- ENDIF prevpage -->
    
            <!-- BEGIN pages -->
            <a href="{config.relative_path}{featuredRoute}{pages.number}" class="btn <!-- IF pages.currentPage -->btn-primary active<!-- ELSE -->btn-default<!-- ENDIF pages.currentPage -->">{pages.number}</a>
            <!-- END pages -->
    
            <!-- IF nextpage -->
            <a href="{config.relative_path}{featuredRoute}{nextpage}" class="btn btn-default paginate"></a>
            <!-- ENDIF nextpage -->
          </nav>
        </div>
      </div>
      <!-- ENDIF paginator -->
    </div>
    

    Plus, I added some custom CSS on your site

    /* Phenomlab Custom CSS */
    figure.blog-image {
        border-top-left-radius: 4px;
        border-top-right-radius: 4px;
        background-size: cover !important;
        height: 150px;
    }
    .blog {
        background: #ffffff;
        border-radius: 0 0 4px 4px;
        border-top: 0;
        color: #333;
        font-size: 2.0em;
        padding: 20px 25px;
        line-height: 1.5em;
        min-height: 108px;
        transition: all .2s ease-in-out;
        margin: 1px;
    }
    .post-holder {
        margin-bottom: 20px;
    }
    .row.blog-wrapper {
        padding: 50px;
    }
    span.category {
        color: #3384C7;
    }
    .blog-content-wrapper {
      max-width: 400px;
      margin: 50px auto;
    }
    @media (max-width: 767px) {
    .post-holder {
        width: 100%;
    }
    }
    

    The end result is this when accessing the site directly, or clicking the “Blog” link

    9f402ecd-764e-4987-81ba-21600cec4f45-image.png

    As you can see, this works without issue. Of course, you’ll need to tweak the template I created (and probably the CSS) to get the desired look and feel you want. Note, that an <a> tag is present in the entire body of each post, so no matter where you click, it’ll open the associated article - there’s no need for a “Read More” or “Explore” function.

    The code is also 100% mobile friendly, and will stack accordingly at 767px in terms of viewport breakpoint.

    wrote on last edited by
    #18

    @phenomlab Wow, that is awesome! I can see I have a long way to go before I become a web dev. It seems to me like I should have been able to figure this out. Thanks again for your help. I really appreciate it!!

  • @phenomlab Wow, that is awesome! I can see I have a long way to go before I become a web dev. It seems to me like I should have been able to figure this out. Thanks again for your help. I really appreciate it!!

    wrote on last edited by
    #19

    @Madchatthew No problem at all. More than happy to help with stuff like this 🙂

  • phenomlab phenomlab has marked this topic as solved on
  • wrote on last edited by phenomlab
    #20

    @pobojmoks Do you see any errors being reported in the console ? At first guess (without seeing the actual code or the site itself), I’d say that this is AJAX callback related


Did this solution help you?
Did you find the suggested solution useful? Support 💗 Sudonix with a coffee ☕
If your organisation needs deeper expertise around infrastructure, security, or technology leadership, learn more about Phenomlab Ltd. Many of the deeper technical guides behind Sudonix are published there.

Related Topics
  • External Links - New Window

    Solved Customisation nodebb links settings
    8
    2 Votes
    8 Posts
    2k Views
    phenomlab
    @Sampo2910 search the forum here for ogproxy which is the client side version of that plugin I wrote. It’s in use here on this forum.
  • Opening links in nodebb widget

    Solved Configure nodebb
    6
    4 Votes
    6 Posts
    3k Views
    phenomlab
    A more efficient way of including this would be to not over complicate it and leverage a standard iframe (providing the CSP headers of the remote site permit this) like below <iframe src="https://www.classmarker.com/online-test/start/?quiz=gag66aea7922f0a5" width="700" height="800"></iframe> This works first time every time on your site as intended.
  • MogoDB v6 to v7 upgrade

    Solved Configure nodebb
    5
    1 Votes
    5 Posts
    2k Views
    phenomlab
    @Panda if you used the Ubuntu PPA, I think this only goes as far as 6.x if I recall correctly.
  • Nodebb design

    Solved General nodebb
    2
    1 Votes
    2 Posts
    1k Views
    phenomlab
    @Panda said in Nodebb design: One negative is not being so good for SEO as more Server side rendered forums, if web crawlers dont run the JS to read the forum. From recollection, Google and Bing have the capability to read and process JS, although it’s not in the same manner as a physical person will consume content on a page. It will be seen as plain text, but will be indexed. However, it’s important to note that Yandex and Baidu will not render JS, although seeing as Google has a 90% share of the content available on the web in terms of indexing, this isn’t something you’ll likely lose sleep over. @Panda said in Nodebb design: The “write api” is preferred for server-to-server interactions. This is mostly based around overall security - you won’t typically want a client machine changing database elements or altering data. This is why you have “client-side” which could be DOM manipulation etc, and “server-side” which performs more complex operations as it can communicate directly with the database whereas the client cannot (and if it can, then you have a serious security flaw). Reading from the API is perfectly acceptable on the client-side, but not being able to write. A paradigm here would be something like SNMP. This protocol exists as a UDP (UDP is very efficient, as it is “fire and forget” and does not wait for a response like TCP does) based service which reads performance data from a remote source, thus enabling an application to parse that data for use in a monitoring application. In all cases, SNMP access should be “RO” (Read Only) and not RW (Read Write). It is completely feasible to assume complete control over a firewall for example by having RW access to SNMP and then exposing it to the entire internet with a weak passphrase. You wouldn’t do it (at least, I hope you wouldn’t) and the same ethic applies to server-side rendering and the execution of commands.
  • Link Not Working

    Solved Customisation link
    5
    1 Votes
    5 Posts
    2k Views
    phenomlab
    @cagatay Good question, but one that’s likely best answered by the devs themselves. Could easily be done with a simple jQuery regex but that would really just be painting over rotten wood.
  • Title on homepage of nodebb forum

    Solved Customisation nodebb
    2
    1 Votes
    2 Posts
    2k Views
    phenomlab
    @eveh Welcome board The code you are referring to is custom written as no such functionality exists under NodeBB. However, adding the functionality is relatively trivial. Below are the required steps Navigate to /admin/appearance/customise#custom-header Add the below code to your header, and save once completed <ol id="mainbanner" class="breadcrumb"><li id="addtext">Your Title Goes Here</li></ol> Navigate to /admin/appearance/customise#custom-js and add the below code, then save $(document).ready(function() { $(window).on('action:ajaxify.end', function(data) { // Initialise mainbanner ID, but hide it from view $('#mainbanner').hide(); var pathname = window.location.pathname; if (pathname === "/") { $("#addtext").text("Your Title"); $('#mainbanner').show(); } else {} // If we want to add a title to a sub page, uncomment the below and adjust accordingly //if (pathname === "/yourpath") { //$("#addtext").text("Your Title"); //$('#mainbanner').show(); //} }); }); Navigate to /admin/appearance/customise#custom-css and add the below CSS block .breadcrumb { right: 0; margin-right: auto; text-align: center; background: #0086c4; color: #ffffff; width: 100vw; position: relative; margin-left: -50vw; left: 50%; top: 50px; position: fixed; z-index: 1020; } Note, that you will need to adjust your CSS code to suit your own site / requirements.
  • plugin open link IMgur images

    Customisation plugin imgur
    7
    0 Votes
    7 Posts
    3k Views
    phenomlab
    @DownPW not sure what you mean. Can you elaborate ?
  • Bootstrap Version

    Solved Customisation nodebb bootstrap
    8
    5 Votes
    8 Posts
    3k Views
    Madchatthew
    @phenomlab That will be nice once they have completed that. It will be interesting to see how long that takes. So for now I will use custom css to make it look the way I want. Frameworks just make things a little faster. Thanks @phenomlab