How to change load layout in Joomla view?

By default, joomla looks for the layout keyword in the URL to decide which layout to display. If this variable is empty or not present then the tmpl/default.php layout will be loaded.

By editting your view.html.php file you can set the default layout by using the JView API, e.g. $this->setLayout('lol') will make the URL example.com/yourview equivalent to example.com/yourview?layout=lol.

However, this change alone will result in Joomla overriding it's default behaviour so that the layout request will be ignored. This means that the request example.com/yourview?layout=lmao will also display example.com/yourview = example.com/yourview?layout=lol

You can solve this easily by adding a condition around the setLayout function so that only if the layout keyword is not present then you will set the default layout to lol, e.g.

    <?php 
    # ...

      function display($tpl = null) {
        # ...

        # Edit : Set the default layout to 'lol'
        $layout = JRequest::getWord('layout', '');
        if (empty($layout)) $this->setLayout("lol");

        // Display the view
        parent::display($tpl);
      }

    # ...

Solved the problem by myself. Need to use the method setLayout and pay attention to the input syntax

$this->setLayout('dafault:lol');
parent::display($tpl);

I keep coming back to this and I've yet to find a satisfying solution.

What does work, from J1.5 right up to J3.4, for me has always been to set the $tpl variable in view.html.php

If $tpl is empty or "" then tmpl/default.php is displayed by default.

If you change $tpl to a string, e.g. $tpl="stacker" then it will look for and display tmpl/default_stacker.php

I've seen various differing theories on changing it earlier in the MVC so that it doesn't need the default_ pretext. e.g. tmpl/stacker.php None have worked for me.