have a template named yourtemplate_child
make a copy of
html/com_content/category/default.php
html/com_content/category/default.xml
html/com_content/category/default_articles.php
html/com_content/category/default_children.php
rename them and put in this template an alternate layout for a category list:
html/com_content/category/mylayout.php
html/com_content/category/mylayout.xml
html/com_content/category/mylayout_myarticles.php
html/com_content/category/mylayout_mychildren.php
In mylayout.php change articles to myarticles (I did that but did not mentio in the test instructions)
Change something in the _myarticles file or put a die(); at the top to see if your template is loaded.
Change the layout title in the mylayout.xml so you recognize it in the menu item types overview
Create a new menu item and select my layout as a menu item type
your alternate layout is loaded when you selected it as a menu type
Several issues here:
so a step in between would be to create a file named:
/templates/yourtemplate/html/layouts/joomla/content/category_mylayout.php
and rename also the subtemplates in the $displayData->loadTemplate call
But even if you do this - you will get a 500 Error when your template has an underscore in it.
If you move the whole structure to a template without underscore it works.
I tried to debug within the libraries/src/MVC/View/HtmlView.php file and when I print out the path Joomla is looking for I get:
mytemplate_nlh_nlh_nlh/html/
altough my templates name is only mytemplatee_nlh, so I think it has something to do with the underscores in the template name.
Labels |
Added:
No Code Attached Yet
|
@brianteeman ok so the issue is not coming from the underscore? Strange :-/
silly question but in html/com_content/category/mylayout.php did you update the loadTemplate for your new names
$this->loadTemplate('myarticles')
It can NOT come from the underscore because that is how child templates are created by joomla
yes I did - the error dissapears when I move the complete structure
from the child to the main - so something else is interfering
well its something in your code and not a core issue
Not in my code but maybe some exception for not child template templates with underscore - i will investigate further
@brianteeman and @richard67 thanks for testing - I will report back what the issue was.
@coolcat-creations if you make a template override for any default and call it mylayout.php
then this script still contains a statement like
echo $this->loadTemplate('item');
it will load mylayout_item.php if yo did not override this statement to make
echo $this->loadTemplate('myitem');
@chmst thats what I wrote #41270 (comment)
@brianteeman @chmst I wrote both correctly in the layout. As said it works as indented when I move it in another template. there must be something else interfering. I am investigating further.
I just repeated it from scratch with no problem at all
I just tested with a not template and named it test_test and it worked too. So the issue is not in the core but something in the maintemplate probably. Thank you all for testing.
Status | New | ⇒ | Closed |
Closed_Date | 0000-00-00 00:00:00 | ⇒ | 2023-07-27 18:00:35 |
Closed_By | ⇒ | coolcat-creations |
The problem is because the child template folder name begins with the same name as the template (e.g. cassiopeia and cassiopeia_child).
Here is a fix for it in libraries/MVC/HtmlView.php
on line 377
Add a directory separator to prevent replacing the template path twice.
// Change the template folder if alternative layout is in different template
if (isset($layoutTemplate) && $layoutTemplate !== '_' && $layoutTemplate != $template->template) {
$this->_path['template'] = str_replace(
JPATH_THEMES . DIRECTORY_SEPARATOR . $template->template . DIRECTORY_SEPARATOR,
JPATH_THEMES . DIRECTORY_SEPARATOR . $layoutTemplate . DIRECTORY_SEPARATOR,
$this->_path['template']
);
}
so why is it working perfectly for me (and others)
so why is it working perfectly for me (and others)
This depends on how many subtemplates are loaded, therefore the HtmlView::loadTemplate() method is called multiple times.
$this->subtemplatename = 'myarticles';
echo LayoutHelper::render('joomla.content.category_default', $this);
Status | Closed | ⇒ | New |
Closed_Date | 2023-07-27 18:00:35 | ⇒ | |
Closed_By | coolcat-creations | ⇒ |
Should be closed as there is a PR
Status | New | ⇒ | Closed |
Closed_Date | 0000-00-00 00:00:00 | ⇒ | 2023-08-10 08:17:17 |
Closed_By | ⇒ | alikon |
As far as I know this is expected behaviour, and it was always like that. There might be even some tooltip in the template name field telling that only alpha-numeric characters and dashes are allowed.
If someone else confirms this (I don't expect myself to be perfect), I will close this issue as expected behaviour.